一、前言:
以前我们还需要手写数据库设计文档、现在可以通过引入screw核心包 来实现Java 数据库文档一键生成。
企业级开发过程中,一颗永不生锈的螺丝钉!
1、支持的数据库列表:
- MySQL (本篇博客内容)
- MariaDB
- TIDB
- Oracle
- SqlServer
- PostgreSQL
- Cache DB(2016)
这些主流的数据库都支持的。
2、文档生成支持
- html
- word
- markdown
3、screw 开源地址:
🚀 screw (螺丝钉) 英:[skruː] ~ 简洁好用的数据库表结构文档生成工具
螺丝钉(screw)的开源地址:螺丝钉(screw)的开源地址
二、实现步骤:
题目:将mysql数据库中db1数据库里面的表自动生成数据库设计文档
(1)引入 pom.xml核心配置screw包
<!--mysql连接--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.16</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <!--screw [skruː]:螺丝钉--> <dependency> <groupId>cn.smallbun.screw</groupId> <artifactId>screw-core</artifactId> <version>1.0.5</version> </dependency> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.30</version> </dependency> <!-- HikariCP:数据库连接池组件 --> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>3.4.5</version> </dependency> </dependencies>
HikariCP简介
HikariCP是由日本程序员开源的一个数据库连接池组件,代码非常轻量,并且速度非常的快。 根据官方提供的数据,在i7,开启32个线程32个连接的情况下,进行随机数据库读写操作, HikariCP的速度是现在常用的C3P0数据库连接池的数百倍。 Springboot2.0默认连接池,官方也是推荐使用HikariCP。
(2)mysql中db1数据库里面的表
(3) 用screw自动生成数据库文档:
/** * @author 王恒杰 * @version 1.0 * @date 2021/11/14 15:32 * @email 1078993387@qq.com * @Address 天津 * @Description: */ public class Test { /** * 路径 */ private static final String MYSQL_URL = "jdbc:mysql://localhost:3306"; /** * 数据库名 */ private static final String MYSQL_NAME = "db1?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai"; /** * mysql用户名 */ private static final String MYSQL_USERNAME = "root"; /** * mysql密码 */ private static final String MYSQL_PASSWORD = "root"; /** * 文件输出目录 */ private static final String FILE_OUTPUT_DIR = "E:\\"; /** * 可以设置 Word 或者 Markdown 格式 */ private static final EngineFileType FILE_OUTPUT_TYPE = EngineFileType.WORD; private static final String DOC_FILE_NAME = "java实现数据库表设计文档"; private static final String DOC_VERSION = "V1.0.0"; private static final String DOC_DESCRIPTION = "数据库表设计描述"; public static void main(String[] args) { // 创建 screw 的配置 Configuration config = Configuration.builder() // 版本 .version(DOC_VERSION) // 描述 .description(DOC_DESCRIPTION) // 数据源 .dataSource( buildDataSource()) // 引擎配置 .engineConfig(buildEngineConfig()) // 处理配置 .produceConfig(buildProcessConfig()) .build(); // 执行 screw,生成数据库文档 new DocumentationExecute(config).execute(); } /** * 创建数据源 */ private static HikariDataSource buildDataSource() { // 创建 HikariConfig 配置类 HikariConfig hikariConfig = new HikariConfig(); hikariConfig.setDriverClassName("com.mysql.cj.jdbc.Driver"); hikariConfig.setJdbcUrl(MYSQL_URL + "/" + MYSQL_NAME); hikariConfig.setUsername(MYSQL_USERNAME); hikariConfig.setPassword(MYSQL_PASSWORD); // 设置可以获取 tables remarks 信息 hikariConfig.addDataSourceProperty("useInformationSchema", "true"); hikariConfig.setMinimumIdle(2); hikariConfig.setMaximumPoolSize(5); // 创建数据源 HikariDataSource hikariDataSource = new HikariDataSource(hikariConfig); return hikariDataSource; } /** * 创建 screw 的引擎配置 */ private static EngineConfig buildEngineConfig() { return EngineConfig.builder() // 生成文件路径 .fileOutputDir(FILE_OUTPUT_DIR) // 打开目录 .openOutputDir(false) // 文件类型 .fileType(FILE_OUTPUT_TYPE) // 文件类型 .produceType(EngineTemplateType.freemarker) // 自定义文件名称 .fileName(DOC_FILE_NAME) .build(); } /** * 创建 screw 的处理配置,一般可忽略 * 指定生成逻辑、当存在指定表、指定表前缀、指定表后缀时,将生成指定表,其余表不生成、并跳过忽略表配置 */ private static ProcessConfig buildProcessConfig() { return ProcessConfig.builder() // 根据名称指定表生成 .designatedTableName(Collections.<String>emptyList()) // 根据表前缀生成 .designatedTablePrefix(Collections.<String>emptyList()) // 根据表后缀生成 .designatedTableSuffix(Collections.<String>emptyList()) // 忽略数据库中address这个表名 .ignoreTableName(Arrays.asList("address")) // 忽略表前缀,就是db1数据库中表名是t_开头的都不生产数据库文档(t_student,t_user这两张表) .ignoreTablePrefix(Collections.singletonList("t_")) // 忽略表后缀(就是db1数据库中表名是_teacher结尾的都不生产数据库文档:stu_teacher) .ignoreTableSuffix(Collections.singletonList("_teacher")) .build(); }
控制台打印部分信息
三:java自动生成的《数据库文档》
数据库设计文档
数据库名: db1
文档版本: V1.0.0
文档描述: 数据库表设计描述
表名: admin
说明:
数据列:
表名: card
说明:
数据列:
表名: dep
说明:
数据列:
表名: emp
说明:
数据列:
表名: person
说明:
数据列:
表名: student
说明:
数据列:
表名: teacher
说明:
数据列:
表名: user
说明:
数据列: