SpringBoot中集成screw(螺丝钉)实现数据库表结构文档生成方法

 更新时间:2024年07月26日 09:03:34   作者:霸道流氓气质  
这篇文章主要介绍了SpringBoot中集成screw(螺丝钉)实现数据库表结构文档生成,下面以连接mysql数据库并生成html格式的数据库结构文档为例,插件的使用方式除可以使用代码外,还可以使用Maven插件的方式,需要的朋友可以参考下

场景

经常会有编写数据库表结构文档的时间付出,那能否通过简单配置实现自动生成。

screw

screw (螺丝钉) 英:[skruː] ~ 简洁好用的数据库表结构文档生成工具。

https://gitee.com/leshalv/screw

特点

简洁、轻量、设计良好

多数据库支持

多种格式文档

灵活扩展

支持自定义模板

数据库支持

MySQL

MariaDB

TIDB

Oracle

SqlServer

PostgreSQL

Cache DB(2016)

H2 (开发中)

DB2 (开发中)

HSQL (开发中)

SQLite(开发中)

瀚高(开发中)

达梦 (开发中)

虚谷 (开发中)

人大金仓(开发中)

文档生成支持

html

word

markdown

实现

下面以连接mysql数据库并生成html格式的数据库结构文档为例

插件的使用方式除可以使用代码外,还可以使用Maven插件的方式。

这里考虑将其集成到单独的springboot项目中,并使用单元测试的方式需要时配置和运行。

新建springboot项目,并引入screw的依赖

        <dependency>
            <groupId>cn.smallbun.screw</groupId>
            <artifactId>screw-core</artifactId>
            <version>1.0.3</version>
        </dependency>

maven仓库地址

https://mvnrepository.com/artifact/cn.smallbun.screw/screw-core

然后生成文档还需依赖

        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.30</version>
        </dependency>

这里还需要连接mysql数据库以及单元测试等的依赖

 <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <!--MySQL驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>       

新建单元测试类

import cn.smallbun.screw.core.Configuration;
import cn.smallbun.screw.core.engine.EngineConfig;
import cn.smallbun.screw.core.engine.EngineFileType;
import cn.smallbun.screw.core.engine.EngineTemplateType;
import cn.smallbun.screw.core.execute.DocumentationExecute;
import cn.smallbun.screw.core.process.ProcessConfig;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.context.ApplicationContext;
import javax.sql.DataSource;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
@SpringBootTest
class ScrewTest {
    @Autowired
    ApplicationContext applicationContext;
    @Test
    void createDataBaseWorld() {
        DataSource dataSourceMysql = applicationContext.getBean(DataSource.class);
        // 生成文件配置
        EngineConfig engineConfig = EngineConfig.builder()
                // 生成文件路径,自己mac本地的地址,这里需要自己更换下路径
                .fileOutputDir("D:\\test\\badao\\")
                // 打开目录
                .openOutputDir(false)
                // 文件类型
                .fileType(EngineFileType.HTML)
                // 生成模板实现
                .produceType(EngineTemplateType.freemarker).build();
        // 生成文档配置(包含以下自定义版本号、描述等配置连接)
        Configuration config = Configuration.builder()
                .version("1.0.3")
                .description("badao")
                .dataSource(dataSourceMysql)
                .engineConfig(engineConfig)
                .produceConfig(getProcessConfig())
                .build();
        // 执行生成
        new DocumentationExecute(config).execute();
    }
    /**
     * 配置想要生成的表+ 配置想要忽略的表
     * @return 生成表配置
     */
    public static ProcessConfig getProcessConfig(){
        // 忽略表名
        List<String> ignoreTableName = Arrays.asList("test_users","test1");
        // 忽略表前缀,如忽略a开头的数据库表
        List<String> ignorePrefix = Arrays.asList("qrtz","sys","gen");
        // 忽略表后缀
        List<String> ignoreSuffix = Arrays.asList("_log");
        return ProcessConfig.builder()
                //根据名称指定表生成
                .designatedTableName(new ArrayList<>())
                //根据表前缀生成
                .designatedTablePrefix(new ArrayList<>())
                //根据表后缀生成
                .designatedTableSuffix(new ArrayList<>())
                //忽略表名
                .ignoreTableName(ignoreTableName)
                //忽略表前缀
                .ignoreTablePrefix(ignorePrefix)
                //忽略表后缀
                .ignoreTableSuffix(ignoreSuffix).build();
    }
}

这里要注意引入依赖的路径。

然后这里需要在配置文件这里是yml中配置数据源

# 数据源
spring:
  application:
    name: badao-tcp-demo
  datasource:
    url: jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8
    username: root
    password: root
    driver-class-name: com.mysql.cj.jdbc.Driver
    dbcp2:
      min-idle: 5                                # 数据库连接池的最小维持连接数
      initial-size: 5                            # 初始化连接数
      max-total: 5                               # 最大连接数
      max-wait-millis: 150                       # 等待连接获取的最大超时时间

然后再上面单元测试中还可配置要忽略的表,指定前后缀等。

运行该单元测试,到配置的指定目录下查看

到此这篇关于SpringBoot中集成screw(螺丝钉)实现数据库表结构文档生成的文章就介绍到这了,更多相关SpringBoot中集成screw(螺丝钉)实现数据库表结构文档生成内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 浅析Java中Runnable和Thread的区别

    浅析Java中Runnable和Thread的区别

    在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口;Thread类是在java.lang包中定义的。接下来通过本文给大家浅析Java中Runnable和Thread的区别,一起看看吧
    2017-02-02
  • Java集合ConcurrentHashMap详解

    Java集合ConcurrentHashMap详解

    ConcurrentHashMap 是 J.U.C 包里面提供的一个线程安全并且高效的 HashMap,所以ConcurrentHashMap 在并发编程的场景中使用的频率比较高
    2023-01-01
  • 基于SpringBoot和Vue3的博客平台的用户注册与登录功能实现

    基于SpringBoot和Vue3的博客平台的用户注册与登录功能实现

    本教程将指导您如何使用Spring Boot和Vue3实现用户注册与登录功能。我们将使用Spring Boot作为后端框架,Vue3作为前端框架,同时使用MySQL作为数据库,感兴趣的朋友可以参考一下
    2023-04-04
  • java判断字符串中是否包含中文并过滤中文

    java判断字符串中是否包含中文并过滤中文

    这篇文章主要为大家详细介绍了java判断字符串中是否包含中文,并过滤掉中文,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-09-09
  • Java生成验证码

    Java生成验证码

    本文介绍了Java生成验证码的流程与方法。具有很好的参考价值,下面跟着小编一起来看下吧
    2017-02-02
  • java实现文件读写与压缩实例

    java实现文件读写与压缩实例

    这篇文章主要介绍了java实现文件读写与压缩实例,有助于读者加深对文件操作的理解,需要的朋友可以参考下
    2014-07-07
  • SpringBoot @RestControllerAdvice注解对返回值统一封装的处理方法

    SpringBoot @RestControllerAdvice注解对返回值统一封装的处理方法

    这篇文章主要介绍了SpringBoot @RestControllerAdvice注解对返回值统一封装,使用@RestControllerAdvice对响应进行增强,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-09-09
  • 深入了解Java Synchronized锁升级过程

    深入了解Java Synchronized锁升级过程

    java中的锁是针对对象而言的,它锁住的是一个对象,并且具有可重入的性质,下面这篇文章主要给大家介绍了关于Java Synchronized锁升级过程的相关资料,需要的朋友可以参考下
    2022-03-03
  • springboot 实现mqtt物联网的示例代码

    springboot 实现mqtt物联网的示例代码

    这篇文章主要介绍了springboot 实现mqtt物联网,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • 在@Value注解内使用SPEL自定义函数方式

    在@Value注解内使用SPEL自定义函数方式

    这篇文章主要介绍了在@Value注解内使用SPEL自定义函数方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-02-02

最新评论