Java 生成数据库表结构文档

工作需要熟悉表结构或书写数据字典开发文档,此时可以使用Screw+HikariCP实现生成数据库文档

Mysql数据库生成:

引入依赖包:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<dependencies>
<!-- Screw Core -->
<dependency>
<groupId>cn.smallbun.screw</groupId>
<artifactId>screw-core</artifactId>
<version>1.0.2</version>
</dependency>
<!-- HikariCP -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>3.4.5</version>
</dependency>
<!-- Mysql Driver -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
</dependencies>

直接上代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// 数据源
HikariConfig hikariConfig = new HikariConfig();
hikariConfig.setDriverClassName("com.mysql.cj.jdbc.Driver");
hikariConfig.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/test01?serverTimezone=UTC");
hikariConfig.setUsername("root");
hikariConfig.setPassword("123456");
// 设置可以获取tables remarks信息
hikariConfig.addDataSourceProperty("useInformationSchema", "true");
hikariConfig.setMinimumIdle(2);
hikariConfig.setMaximumPoolSize(5);
DataSource dataSource = new HikariDataSource(hikariConfig);

// 1、生成文件配置
EngineConfig engineConfig = EngineConfig.builder()
// 生成文件路径
.fileOutputDir("D://11")
// 打开目录
.openOutputDir(false)
// 文件类型 EngineFileType.DOC
.fileType(EngineFileType.HTML)
// 生成模板实现
.produceType(EngineTemplateType.freemarker).build();

// 忽略表名
List<String> ignoreTableName = Arrays.asList("test");
// 忽略表前缀
List<String> ignorePrefix = Arrays.asList("_a", "a");
// 忽略表后缀
List<String> ignoreSuffix = Arrays.asList("_bak", "bak");

// 2、配置想要忽略的表
ProcessConfig processConfig = ProcessConfig.builder().ignoreTableName(ignoreTableName)
.ignoreTablePrefix(ignorePrefix).ignoreTableSuffix(ignoreSuffix).build();

// 3、生成文档配置(包含以下自定义版本号、描述等配置连接)
Configuration config = Configuration.builder().version("1.0.0").description("数据库文档").dataSource(dataSource)
.engineConfig(engineConfig).produceConfig(processConfig).build();

// 4、执行生成
new DocumentationExecute(config).execute();

注:新版mysql驱动url后面需要加?serverTimezone=UTC

否则会报:Failed to initialize pool: 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.

Oracle数据库生成:

注意jdk8对应驱动 ojdbc8

相关依赖 orai18n 防止乱码

注意以下依赖

com.oracle.database.jdbc ojdbc8 21.3.0.0 cn.easyproject orai18n 12.1.0.2.0

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// 数据源
HikariConfig hikariConfig = new HikariConfig();
hikariConfig.setDriverClassName("oracle.jdbc.Driver");
hikariConfig.setJdbcUrl("jdbc:oracle:thin:@172.0.0.1:1521:test");
hikariConfig.setUsername("zhangsan");
hikariConfig.setPassword("asdf2151#415");
// 设置可以获取tables remarks信息
hikariConfig.addDataSourceProperty("useInformationSchema", "true");
hikariConfig.setMinimumIdle(2);
hikariConfig.setMaximumPoolSize(5);
DataSource dataSource = new HikariDataSource(hikariConfig);

// 1、生成文件配置
EngineConfig engineConfig = EngineConfig.builder()
// 生成文件路径
.fileOutputDir("D:\\test01")
// 打开目录
.openOutputDir(false)
// 文件类型
.fileType(EngineFileType.HTML)
// 生成模板实现
.produceType(EngineTemplateType.freemarker).build();

// 忽略表名
List<String> ignoreTableName = Arrays.asList("test");
// 忽略表前缀
List<String> ignorePrefix = Arrays.asList("test_", "test");
// 忽略表后缀
List<String> ignoreSuffix = Arrays.asList("_bak", "_tmp");

// 2、配置想要忽略的表
ProcessConfig processConfig = ProcessConfig.builder().ignoreTableName(ignoreTableName)
.ignoreTablePrefix(ignorePrefix).ignoreTableSuffix(ignoreSuffix).build();

// 3、生成文档配置
Configuration config = Configuration.builder().version("1.0.0").description("数据库文档").dataSource(dataSource)
.engineConfig(engineConfig).produceConfig(processConfig).build();

// 4、执行生成
new DocumentationExecute(config).execute();

执行后生成html文档部分如下 :

表名:sys_log

说明:日志表

数据列:

序号 名称 数据类型 长度 小数位 允许空值 主键 默认值 说明
1 id bigint 19 0 N Y ID
2 log_type varchar 50 0 N N 日志类型
3 create_user_code varchar 64 0 N N 创建用户编码
4 create_user_name varchar 100 0 N N 创建用户名称
5 create_date datetime 19 0 N N 创建时间
6 request_uri varchar 500 0 Y N 请求URI
7 request_method varchar 10 0 Y N 请求方式
8 request_params text 65535 0 Y N 请求参数
9 request_ip varchar 20 0 N N 请求IP
10 server_address varchar 50 0 N N 请求服务器地址
11 is_exception char 1 0 Y N 是否异常
12 exception_info text 65535 0 Y N 异常信息
13 start_time datetime 19 0 N N 开始时间
14 end_time datetime 19 0 N N 结束时间
15 execute_time int 10 0 Y N 执行时间
16 user_agent varchar 500 0 Y N 用户代理
17 device_name varchar 100 0 Y N 操作系统
18 browser_name varchar 100 0 Y N 浏览器名称