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数据库里面的表自动生成数据库设计文档

技术实现版本备注
ideaIntelliJ IDEA 2021.1.1开发工具版本不做要求
mysqlMySQL 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 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

表名: admin

说明:

数据列:

序号名称数据类型长度小数位允许空值主键默认值说明
1idint100NY
2namevarchar200NN
3passwordvarchar200NN

表名: card

说明:

数据列:

序号名称数据类型长度小数位允许空值主键默认值说明
1idint100NY
2numbervarchar300YN
3pidint100YN

表名: dep

说明:

数据列:

序号名称数据类型长度小数位允许空值主键默认值说明
1idint100NY
2namevarchar200NN
3addressvarchar500NN

表名: emp

说明:

数据列:

序号名称数据类型长度小数位允许空值主键默认值说明
1idint100NY
2usernamevarchar200NN
3ageint100NN
4salarydouble230NN

表名: person

说明:

数据列:

序号名称数据类型长度小数位允许空值主键默认值说明
1idint100NY
2NAMEvarchar200YN
3ageint100YN

表名: student

说明:

数据列:

序号名称数据类型长度小数位允许空值主键默认值说明
1idint100NY
2namevarchar200YN
3ageint100YN

表名: teacher

说明:

数据列:

序号名称数据类型长度小数位允许空值主键默认值说明
1idint100NY
2namevarchar200YN

表名: user

说明:

数据列:

序号名称数据类型长度小数位允许空值主键默认值说明
1idint100NY
2namevarchar200NN
3passwordvarchar2550YN
  • 13
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员小王java

学习java的路上,加油!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值