记一次使用screw 生成数据库文档
介绍
🚀 screw (螺丝钉) 英:[skruː] ~ 简洁好用的数据库表结构文档生成工具
特点
支持多种数据库
MySQLOracleTIDBSqlServerMariaDBPostgreSQLCache DB
支持多种生成文档类型
MD(Markdown)HTMLWord
普通方式
引入依赖
<dependency>
<groupId>cn.smallbun.screw
</groupId>
<artifactId>screw-core
</artifactId>
<version>${lastVersion}
</version>
</dependency>
编写代码
@Test
public void shouldAnswerWithTrue() {
HikariConfig hikariConfig
= new HikariConfig();
hikariConfig
.setDriverClassName("com.mysql.cj.jdbc.Driver");
hikariConfig
.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/tobacco?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT");
hikariConfig
.setUsername("root");
hikariConfig
.setPassword("a123");
hikariConfig
.addDataSourceProperty("useInformationSchema", "true");
hikariConfig
.setMinimumIdle(2);
hikariConfig
.setMaximumPoolSize(5);
DataSource dataSource
= new HikariDataSource(hikariConfig
);
EngineConfig engineConfig
= EngineConfig
.builder()
.fileOutputDir("/Users/lengleng")
.openOutputDir(true)
.fileType(EngineFileType
.MD
)
.produceType(EngineTemplateType
.freemarker
).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");
ArrayList
<String> ignatedTable
= new ArrayList<>();
ignatedTable
.add("Party_");
ignatedTable
.add("sys_");
ProcessConfig processConfig
= ProcessConfig
.builder()
.designatedTableName(new ArrayList<>())
.designatedTablePrefix(ignatedTable
)
.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();
}
Maven插件方式 - POM.XML(只在POM.xml配置完即可 不用其他任何配置)
<build>
<plugins>
<plugin>
<groupId>cn.smallbun.screw
</groupId>
<artifactId>screw-maven-plugin
</artifactId>
<version>${lastVersion}
</version>
<dependencies>
<dependency>
<groupId>com.zaxxer
</groupId>
<artifactId>HikariCP
</artifactId>
<version>3.4.5
</version>
</dependency>
<dependency>
<groupId>mysql
</groupId>
<artifactId>mysql-connector-java
</artifactId>
<version>8.0.20
</version>
</dependency>
</dependencies>
<configuration>
<username>root
</username>
<password>password
</password>
<driverClassName>com.mysql.cj.jdbc.Driver
</driverClassName>
<jdbcUrl>jdbc:mysql://127.0.0.1:3306/xxxx
</jdbcUrl>
<fileType>HTML
</fileType>
<openOutputDir>false
</openOutputDir>
<produceType>freemarker
</produceType>
<fileName>测试文档名称
</fileName>
<description>数据库文档生成
</description>
<version>${project.version}
</version>
<title>数据库文档
</title>
</configuration>
<executions>
<execution>
<phase>compile
</phase>
<goals>
<goal>run
</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
运行
双击运行
结果
生成报错问题
导入完成 运行
java.lang.NoClassDefFoundError: freemarker/cache/TemplateLoader
原因是 缺少依赖
<dependency>
<groupId>org.freemarker
</groupId>
<artifactId>freemarker
</artifactId>
<version>2.3.20
</version>
</dependency>
java.sql.SQLException: The server time zone value ‘�й���ʱ��’ is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the ‘serverTimezone’ configuration property) to use a more specifc time zone value if you want to utilize time zone support.
出现这种问题还是版本新,与其他版本造成
显示新版本的数据库连接程序需要指定UTC时区,改正方法将配置文件中的“url”后面加上指定的时区,将其值改为“url=jdbc:mysql://localhost:3306/db&serverTimezone=GMT”
例子:
jdbc:mysql://127.0.0.1:3306/tobacco?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT
生成后文档乱码?
MySQL:URL加入?characterEncoding=UTF-8。
Caused by: java.lang.NoSuchFieldError: VERSION_2_3_30?
检查项目freemarker依赖,这是由于版本过低造成的,升级版本为2.3.30即可。
MySQL数据库表和列字段有说明、生成文档没有说明?
URL链接加入useInformationSchema=true即可。
更多问题去Github观看开发者的Readme,上面有写。遇到其他问题也可以问开发者
本次生成测试的数据库是MySQL。