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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: java一键生成《数据库设计文档》

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

一、前言:

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


image.png


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


1、支持的数据库列表:

MySQL (本篇博客内容)


MariaDB


TIDB


Oracle


SqlServer


PostgreSQL


Cache DB(2016)


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


2、文档生成支持

html


word


markdown


3、screw 开源地址:

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


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


二、实现步骤:

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



image.png

(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数据库里面的表


image.png

(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();
    }

控制台打印部分信息


image.png

三:java自动生成的《数据库文档》

数据库设计文档

数据库名: db1


文档版本: V1.0.0


文档描述: 数据库表设计描述



image.png

表名: admin


说明:


数据列:



image.png

表名: card


说明:


数据列:



image.png

表名: dep


说明:


数据列:



image.png

表名: emp


说明:


数据列:



image.png

表名: person


说明:


数据列:



image.png

表名: student


说明:


数据列:


image.png

表名: teacher


说明:


数据列:



image.png

表名: user


说明:


数据列:

image.png

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
21天前
|
XML 数据采集 存储
使用Java和XPath在XML文档中精准定位数据
在数据驱动的时代,从复杂结构中精确提取信息至关重要。XML被广泛用于数据存储与传输,而XPath则能高效地在这些文档中导航和提取数据。本文深入探讨如何使用Java和XPath精准定位XML文档中的数据,并通过小红书的实际案例进行分析。首先介绍了XML及其挑战,接着阐述了XPath的优势。然后,提出从大型XML文档中自动提取特定产品信息的需求,并通过代理IP技术、设置Cookie和User-Agent以及多线程技术来解决实际网络环境下的数据抓取问题。最后,提供了一个Java示例代码,演示如何集成这些技术以高效地从XML源中抓取数据。
使用Java和XPath在XML文档中精准定位数据
|
12天前
|
Java 关系型数据库 数据库连接
JDBC:Java与数据库的“黄金搭档”,为何它如此重要?
JDBC:Java与数据库的“黄金搭档”,为何它如此重要?
30 8
|
12天前
|
Java 数据库连接 API
JDBC:Java数据库连接的“黑科技”大揭秘
JDBC:Java数据库连接的“黑科技”大揭秘
27 7
|
24天前
|
Java 关系型数据库 MySQL
"解锁Java Web传奇之旅:从JDK1.8到Tomcat,再到MariaDB,一场跨越数据库的冒险安装盛宴,挑战你的技术极限!"
【8月更文挑战第19天】在Linux上搭建Java Web应用环境,需安装JDK 1.8、Tomcat及MariaDB。本指南详述了使用apt-get安装OpenJDK 1.8的方法,并验证其版本。接着下载与解压Tomcat至`/usr/local/`目录,并启动服务。最后,通过apt-get安装MariaDB,设置基本安全配置。完成这些步骤后,即可验证各组件的状态,为部署Java Web应用打下基础。
36 1
|
27天前
|
前端开发 关系型数据库 MySQL
【前端学java】MySQL数据库的本地安装
【8月更文挑战第12天】MySQL数据库的本地安装
35 3
|
12天前
|
SQL Java 关系型数据库
探索Java数据库连接的奥秘:JDBC技术全攻略
探索Java数据库连接的奥秘:JDBC技术全攻略
37 8
|
12天前
|
SQL Java 数据库连接
JDBC之旅:从陌生到熟悉的Java数据库连接之路
JDBC之旅:从陌生到熟悉的Java数据库连接之路
19 8
|
12天前
|
SQL Java 数据库连接
Java开发者必知:JDBC连接数据库的“三大法宝”
Java开发者必知:JDBC连接数据库的“三大法宝”
15 7
|
28天前
|
Java 数据库连接 网络安全
JDBC数据库编程(java实训报告)
这篇文章是关于JDBC数据库编程的实训报告,涵盖了实验要求、实验环境、实验内容和总结。文中详细介绍了如何使用Java JDBC技术连接数据库,并进行增删改查等基本操作。实验内容包括建立数据库连接、查询、添加、删除和修改数据,每个部分都提供了相应的Java代码示例和操作测试结果截图。作者在总结中分享了在实验过程中遇到的问题和解决方案,以及对Java与数据库连接操作的掌握情况。
JDBC数据库编程(java实训报告)
|
12天前
|
SQL 安全 Java
JDBC:Java与数据库的“月老红线”,你真的了解它吗?
JDBC:Java与数据库的“月老红线”,你真的了解它吗?
10 1