当前位置: 首页 > 工具软件 > screw > 使用案例 >

Screw简洁好用的数据库表结构文档生成器

郑旭
2023-12-01

Screw

最近写论文,发现一个简洁好用的数据库表结构文档生成器,可以根据数据库快速生成文档。

官方地址:https://github.com/pingfangushi/screw

官方演示视频:https://www.bilibili.com/video/BV1F5411e7J8?spm_id_from=333.880.my_history.page.click

官方给的演示视频是针对MySQL的,以下总结了MySQL和SQL Server两种数据库的使用方法。

Screw + MySQL5数据库文档生成配置:

1.1 运行环境

Java:JDK8

MySQL:MySQL5

1.2 pom.xml 依赖

<!-- 数据库文档自动生成 -->
<dependency>
    <groupId>cn.smallbun.screw</groupId>
    <artifactId>screw-core</artifactId>
    <version>1.0.5</version>
</dependency>
<!--mysql 驱动程序 -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.29</version>
</dependency>

1.3 核心功能代码

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 com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;

import javax.sql.DataSource;
import java.util.ArrayList;

public class Test {
    public static void main(String[] args) {
        /**
         * 文档生成
         */
        //数据源
        HikariConfig hikariConfig = new HikariConfig();
        //MySQL配置
        hikariConfig.setDriverClassName("com.mysql.jdbc.Driver");
        hikariConfig.setJdbcUrl("jdbc:mysql://localhost:3306/demo?useUnicode=true&characterEncoding=utf8");
        hikariConfig.setUsername("root");
        hikariConfig.setPassword("123456");
        //设置可以获取tables remarks信息
        hikariConfig.addDataSourceProperty("useInformationSchema", "true");
        hikariConfig.setMinimumIdle(2);
        hikariConfig.setMaximumPoolSize(5);
        DataSource dataSource = new HikariDataSource(hikariConfig);
        //生成配置
        EngineConfig engineConfig = EngineConfig.builder()
                //生成文件路径
                .fileOutputDir("C:\\Users\\F\\Desktop\\picture")
                //打开目录
                .openOutputDir(true)
                //文件类型
                .fileType(EngineFileType.WORD)
                //生成模板实现
                .produceType(EngineTemplateType.freemarker)
                //自定义文件名称
                .fileName("自定义文件名称").build();

        //忽略表
        ArrayList<String> ignoreTableName = new ArrayList<>();
        ignoreTableName.add("test_user");
        ignoreTableName.add("test_group");
        //忽略表前缀
        ArrayList<String> ignorePrefix = new ArrayList<>();
        ignorePrefix.add("test_");
        //忽略表后缀
        ArrayList<String> ignoreSuffix = new ArrayList<>();
        ignoreSuffix.add("_test");
        ProcessConfig processConfig = ProcessConfig.builder()
                //指定生成逻辑、当存在指定表、指定表前缀、指定表后缀时,将生成指定表,其余表不生成、并跳过忽略表配置
                //根据名称指定表生成
                .designatedTableName(new ArrayList<>())
                //根据表前缀生成
                .designatedTablePrefix(new ArrayList<>())
                //根据表后缀生成
                .designatedTableSuffix(new ArrayList<>())
                //忽略表名
                .ignoreTableName(ignoreTableName)
                //忽略表前缀
                .ignoreTablePrefix(ignorePrefix)
                //忽略表后缀
                .ignoreTableSuffix(ignoreSuffix).build();
        //配置
        Configuration config = Configuration.builder()
                //版本
                .version("1.0.0")
                //描述
                .description("数据库设计文档生成")
                //数据源
                .dataSource(dataSource)
                //生成配置
                .engineConfig(engineConfig)
                //生成配置
                .produceConfig(processConfig)
                .build();
        //执行生成
        new DocumentationExecute(config).execute();

    }
}

Screw + SQLServer2019数据库文档生成配置:

1.1 运行环境

Java:JDK8

SQLServer:SQLServer2019

1.2 pom.xml 依赖

<!-- 数据库文档自动生成 -->
<dependency>
	<groupId>cn.smallbun.screw</groupId>
	<artifactId>screw-core</artifactId>
	<version>1.0.5</version>
</dependency>

以下两种方式选择一种即可。

方式一:微软官网之前并未将SQL Server的JDBC驱动放入maven的管理仓库中,导致需要手动在maven中添加sql server的jdbc驱动包。

1.2.1 maven添加sqlserver的jdbc驱动包

用 springboot 构建项目,在pom中引入sqlserver 驱动包的时候,启动程序报错,发现maven中不支持jdbc4 一下的类库。所以需要本地安装sqljdbc的jar包,然后再在pom里面引入。

1、在微软官网下载sqljdbc的jar包:http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=11774

本次下载了6.0版本 ,可以支持jre8

2、通过maven命令将jar包安装到本地。在有sqljdbc6.jar包的文件夹下,打开命令窗口,然后执行以下maven命令

mvn install:install-file -Dfile=sqljdbc42.jar -Dpackaging=jar  -DgroupId=com.microsoft.sqlserver -DartifactId=sqljdbc6 -Dversion=6.0

命令解释:mvn install:install-file -Dfile=“jar包的绝对路径” -Dpackaging=“文件打包方式” -DgroupId=groupid名 -DartifactId=artifactId名 -Dversion=jar版本

3、在pom.xml中引入本地jar包

<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>sqljdbc6</artifactId>
    <version>6.0</version>
</dependency>

方式二:近来微软终于想起来这事了,所以可以直接在pom.xml文件中导入如下内容即可。

1.2.2直接在maven的pom.xml文件中添加以下依赖

<dependency>
    <groupId>com.microsoft.sqlserver</groupId>
    <artifactId>mssql-jdbc</artifactId>
    <version>6.5.0.jre8-preview</version>
</dependency>

1.3、核心功能代码

package com.example.demo;


import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.sql.DataSource;
import org.junit.Test;
import org.springframework.boot.test.context.SpringBootTest;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
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;

@SpringBootTest
public class ScrewApplicationTest {
    @Test
    public void screwGenerate() throws Exception {
        /**
         * 文档生成
         */
        //数据源
        HikariConfig hikariConfig = new HikariConfig();
        // SQLServer2019 数据库配置
        hikariConfig.setDriverClassName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        hikariConfig.setJdbcUrl("jdbc:sqlserver://127.0.0.1:1433;databasename=demo");
        hikariConfig.setUsername("sa");
        hikariConfig.setPassword("123456");
        DataSource hikariDataSource = new HikariDataSource(hikariConfig);
        // 生成文件配置
        EngineConfig engineConfig = EngineConfig.builder()
                // 生成文件路径,自己mac本地的地址,这里需要自己更换下路径
                .fileOutputDir("C:\\Users\\F\\Desktop\\picture")
                // 打开目录
                .openOutputDir(false)
                // 文件类型
                .fileType(EngineFileType.WORD)
                // 生成模板实现
                .produceType(EngineTemplateType.freemarker).build();
        // 生成文档配置(包含以下自定义版本号、描述等配置连接)
        Configuration config = Configuration.builder().version("1.0.0").description("生成文档信息描述")
                .dataSource(hikariDataSource).engineConfig(engineConfig).produceConfig(getProcessConfig()).build();
        // 执行生成
        new DocumentationExecute(config).execute();
    }
    /**
     * 配置想要生成的表+ 配置想要忽略的表
     *
     * @return 生成表配置
     */
    public static ProcessConfig getProcessConfig() {
        // 忽略表名
        List<String> ignoreTableName = Arrays.asList("aa", "test_group");
        // 忽略表前缀,如忽略a开头的数据库表
        List<String> ignorePrefix = Arrays.asList("a", "t");
        // 忽略表后缀
        List<String> ignoreSuffix = Arrays.asList("_test", "czb_");
        return ProcessConfig.builder()
                // 根据名称指定表生成
                .designatedTableName(new ArrayList<>())
                // 根据表前缀生成
                .designatedTablePrefix(new ArrayList<>())
                // 根据表后缀生成
                .designatedTableSuffix(new ArrayList<>())
                // 忽略表名
                .ignoreTableName(new ArrayList<>())
                // 忽略表前缀
                .ignoreTablePrefix(new ArrayList<>())
                // 忽略表后缀
                .ignoreTableSuffix(new ArrayList<>()).build();
    }
}
 类似资料: