java一键生成《数据库设计文档》

java一键生成《数据库设计文档》

前言:该知识点参考了Screw开源文档:
?screw开源文档

? 程序员小王的博客:程序员小王的博客
? 欢迎点赞 ? 收藏 ⭐留言 ?
? 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕
?java自学的学习路线:java自学的学习路线

一、前言:

以前我们还需要手写数据库设计文档、现在可以通过引入screw核心包 来实现Java 数据库文档一键生成。

在这里插入图片描述

企业级开发过程中,一颗永不生锈的螺丝钉!

1、支持的数据库列表:

  • MySQL (本篇博客内容)

  • MariaDB

  • TIDB

  • Oracle

  • SqlServer

  • PostgreSQL

  • Cache DB(2016)

这些主流的数据库都支持的。

2、文档生成支持

  • html

  • word

  • markdown

3、screw 开源地址:

? screw (螺丝钉) 英:[skruː] ~ 简洁好用的数据库表结构文档生成工具

螺丝钉(screw)的开源地址:螺丝钉(screw)的开源地址

二、实现步骤:

题目:将mysql数据库中db1数据库里面的表自动生成数据库设计文档

技术实现 版本 备注
idea IntelliJ IDEA 2021.1.1 开发工具版本不做要求
mysql MySQL Server 8.0
screw(螺丝钉) 1.0.5版本

(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 [email protected]
 * @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

表名: admin

说明:

数据列:

序号 名称 数据类型 长度 小数位 允许空值 主键 默认值 说明
1 id int 10 0 N Y
2 name varchar 20 0 N N
3 password varchar 20 0 N N

表名: card

说明:

数据列:

序号 名称 数据类型 长度 小数位 允许空值 主键 默认值 说明
1 id int 10 0 N Y
2 number varchar 30 0 Y N
3 pid int 10 0 Y N

表名: dep

说明:

数据列:

序号 名称 数据类型 长度 小数位 允许空值 主键 默认值 说明
1 id int 10 0 N Y
2 name varchar 20 0 N N
3 address varchar 50 0 N N

表名: emp

说明:

数据列:

序号 名称 数据类型 长度 小数位 允许空值 主键 默认值 说明
1 id int 10 0 N Y
2 username varchar 20 0 N N
3 age int 10 0 N N
4 salary double 23 0 N N

表名: person

说明:

数据列:

序号 名称 数据类型 长度 小数位 允许空值 主键 默认值 说明
1 id int 10 0 N Y
2 NAME varchar 20 0 Y N
3 age int 10 0 Y N

表名: student

说明:

数据列:

序号 名称 数据类型 长度 小数位 允许空值 主键 默认值 说明
1 id int 10 0 N Y
2 name varchar 20 0 Y N
3 age int 10 0 Y N

表名: teacher

说明:

数据列:

序号 名称 数据类型 长度 小数位 允许空值 主键 默认值 说明
1 id int 10 0 N Y
2 name varchar 20 0 Y N

表名: user

说明:

数据列:

序号 名称 数据类型 长度 小数位 允许空值 主键 默认值 说明
1 id int 10 0 N Y
2 name varchar 20 0 N N
3 password varchar 255 0 Y N
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码
< <上一篇
下一篇>>