最近写论文,发现一个简洁好用的数据库表结构文档生成器,可以根据数据库快速生成文档。
官方地址:https://github.com/pingfangushi/screw
官方演示视频:https://www.bilibili.com/video/BV1F5411e7J8?spm_id_from=333.880.my_history.page.click
官方给的演示视频是针对MySQL的,以下总结了MySQL和SQL Server两种数据库的使用方法。
Java:JDK8
MySQL:MySQL5
<!-- 数据库文档自动生成 -->
<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>
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();
}
}
Java:JDK8
SQLServer:SQLServer2019
<!-- 数据库文档自动生成 -->
<dependency>
<groupId>cn.smallbun.screw</groupId>
<artifactId>screw-core</artifactId>
<version>1.0.5</version>
</dependency>
以下两种方式选择一种即可。
方式一:微软官网之前并未将SQL Server的JDBC驱动放入maven的管理仓库中,导致需要手动在maven中添加sql server的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文件中导入如下内容即可。
<dependency>
<groupId>com.microsoft.sqlserver</groupId>
<artifactId>mssql-jdbc</artifactId>
<version>6.5.0.jre8-preview</version>
</dependency>
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();
}
}