框架
https://github.com/yanggit2019/screw
数据库支持
- MySQL
- MariaDB
- TIDB
- Oracle
- SqlServer
- PostgreSQL
- Cache DB
文档生成支持
- html
- word
- markdwon
截图示例
开箱使用
pom
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.zhangy</groupId>
<artifactId>GenerateDbDoc</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>8</maven.compiler.source>
<maven.compiler.target>8</maven.compiler.target>
</properties>
<dependencies>
<!--screw-->
<dependency>
<groupId>cn.smallbun.screw</groupId>
<artifactId>screw-core</artifactId>
<version>1.0.5</version>
</dependency>
<!-- HikariCP -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>3.4.5</version>
</dependency>
<!--MySQL-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.20</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-core</artifactId>
<version>5.7.18</version>
</dependency>
</dependencies>
</project>
主类
public class GenerateDoc {
/**
* 生成文件的结果路径
*/
public static final String RESULT_PATH = "/Users/zhang/IdeaProjects/GenerateDbDoc/src/main/resources/doc/default";
/**
* 要生成的表名称
*/
public static final String TABLE_NAMES_TXT = "tableNames.txt";
public static void main(String[] args) {
generateDoc(EngineFileType.WORD);
generateDoc(EngineFileType.MD);
generateDoc(EngineFileType.HTML);
}
private static void generateDoc(EngineFileType type) {
// 1.获取数据源
DataSource dataSource = getDataSource();
// 2.获取数据库文档生成配置(文件路径、文件类型)
EngineConfig engineConfig = getEngineConfig(type, RESULT_PATH);
// 3.获取数据库表的处理配置,可忽略
ProcessConfig processConfig = getProcessConfig();
// 4.Screw 完整配置
Configuration config = getScrewConfig(dataSource, engineConfig, processConfig);
// 5.执行生成数据库文档
new DocumentationExecute(config).execute();
}
/**
* 获取数据库源
*/
private static DataSource getDataSource() {
//数据源
HikariConfig hikariConfig = new HikariConfig();
hikariConfig.setDriverClassName("com.mysql.cj.jdbc.Driver");
hikariConfig.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/db?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=Asia/Shanghai");
hikariConfig.setUsername("root");
hikariConfig.setPassword("root");
//设置可以获取tables remarks信息
hikariConfig.addDataSourceProperty("useInformationSchema", "true");
hikariConfig.setMinimumIdle(1);
hikariConfig.setMaximumPoolSize(2);
return new HikariDataSource(hikariConfig);
}
/**
* 获取文件生成配置
*
* @param type 生成文件类型
* @param path 生成文件路径
* @return EngineConfig
*/
private static EngineConfig getEngineConfig(EngineFileType type, String path) {
return EngineConfig.builder()
//生成文件路径
.fileOutputDir(path)
//打开目录
.openOutputDir(true)
//文件类型
.fileType(type)
//生成模板实现
.produceType(EngineTemplateType.freemarker)
//自定义文件名称
.fileName("数据库结构文档").build();
}
/**
* 获取数据库表的处理配置,可忽略,可以配置表前缀,尾缀
*/
private static ProcessConfig getProcessConfig() {
String filePath = GenerateDoc.class.getClassLoader().getResource(TABLE_NAMES_TXT).getFile();
List<String> tableList = FileUtil.readUtf8Lines(filePath);
return ProcessConfig.builder()
// 指定只生成的表集合
.designatedTableName(tableList)
//忽略的表集合
.ignoreTableName(new ArrayList<>())
.build();
}
private static Configuration getScrewConfig(DataSource dataSource, EngineConfig engineConfig, ProcessConfig processConfig) {
return Configuration.builder()
//版本
.version("1.0.0")
//描述
.description("数据库设计文档生成")
//数据源
.dataSource(dataSource)
//生成配置
.engineConfig(engineConfig)
//生成配置
.produceConfig(processConfig).build();
}
}
自定义模板
模板修改
两种类型,freemarker和velocity, 将这两种模板拷贝后修改为自己的样式
比如Markdown
/**
* 获取文件生成配置
* @param type 生成文件类型
* @param customTemplatePath 自定义模板文件路径
* @param path 生成文件路径
* @return
*/
private static EngineConfig getEngineConfig(EngineFileType type, String customTemplatePath, String path) {
return EngineConfig.builder()
//生成文件路径
.fileOutputDir(path)
//打开目录,生成接收后会自动打开结果目录
.openOutputDir(true)
//文件类型
.fileType(type)
//生成模板实现
.produceType(EngineTemplateType.freemarker)
//自定义模板文件路径
.customTemplate(customTemplatePath)
//自定义文件名称
.fileName("数据库结构文档").build();
}