Java代码一键生成数据库文档(案例详解)

简介: Screw是一个自动化数据库文档生成工具,能根据数据库表结构快速生成简洁、多格式(HTML、Word、Markdown)的文档,支持MySQL、MariaDB等多数据库。它使用Freemarker模板,允许用户自定义样式。依赖包括HikariCP数据库连接池和对应JDBC驱动。通过在Java代码或Maven插件中配置,可方便生成文档。示例代码展示了如何在测试用例中使用Screw。文档效果依赖于数据库中的表和字段注释。

数据库文档是我们在企业项目开发中需要交付的文档,通常需要开发人员去手工编写。编写完成后,数据库发生变更又需要手动的进行修改,从而浪费了大量的人力。并且这种文档并没有什么技术含量,被安排做这个工作的程序员往往自己心里会有抵触情绪,悲观的预期自己在团队的位置,造成离职也是可能的。如下面的这种文档的内容:

笔者最近在github上面发现一个数据库文档生成工具:screw(螺丝钉)。该工具能够通过简单地配置,快速的根据数据库表结构进行逆向工程,将数据库表结构及字段逆向生成为文档。

二、特点

   简洁、轻量、设计良好

   多数据库支持:MySQL、MariaDB、TIDB、Oracle、 SqlServer、PostgreSQL、Cache DB

   多种格式文档: html、word、 markdwon

   灵活扩展:支持用户自定义模板和展示样式修改(freemarker模板)

三、依赖库探究

mvn中央仓库查看最新版本,将如下的maven坐标引入到Spring Boot项目中去:

<code class="language-plaintext hljs"><dependency><groupId>cn.smallbun.screw</groupId><artifactId>screw-core</artifactId><version>1.0.3</version></dependency></code>

从maven仓库的编译依赖中可以看到,screw-core其实现依赖了如下的内容。重点关注freemarker,因为该项目是使用freemarker作为模板生成文档。

除此之外,screw使用了HikariCP作为数据库连接池,所以:

   你的Spring Boot项目需要引入HikariCP数据库连接池。

   根据你的数据库类型及版本,引入正确的JDBC驱动

四、开始造作吧

以上的工作都做好之后,我们就可以来配置文档生成参数了。实现文档生成有两种方式,一种是写代码,一种是使用maven 插件。

   我个人还是比较喜欢使用代码的当时,写一个单元测试用例就可以了,相对独立,使用方式也灵活。

   如果放在pom.xml的插件配置里面,让本就很冗长的pom.xml变的更加的冗长,不喜欢。

所以maven插件的这种方式我就不给大家演示了,直接把下面的代码Ctrl + C/V到你的src/test/java目录下。简单的修改配置,运行就可以了

<code class="language-plaintext hljs">import cn.smallbun.screw.core.Configuration;

import cn.smallbun.screw.core.engine.EngineConfig;

import cn.smallbun.screw.core.engine.EngineFileType;

import cn.smallbun.screw.core.engine.EngineTemplateType;

import cn.smallbun.screw.core.execute.DocumentationExecute;

import cn.smallbun.screw.core.process.ProcessConfig;

import com.zaxxer.hikari.HikariConfig;

import com.zaxxer.hikari.HikariDataSource;

import org.junit.jupiter.api.Test;

import javax.sql.DataSource;

import java.util.ArrayList;

public class ScrewTest{

 

 @Test

 void testScrew(){//数据源

   HikariConfig hikariConfig =newHikariConfig();

   hikariConfig.setDriverClassName("com.mysql.cj.jdbc.Driver");

   hikariConfig.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/database");

   hikariConfig.setUsername("db-username");

   hikariConfig.setPassword("db-password");//设置可以获取tables remarks信息

   hikariConfig.addDataSourceProperty("useInformationSchema","true");

   hikariConfig.setMinimumIdle(2);

   hikariConfig.setMaximumPoolSize(5);

   DataSource dataSource =newHikariDataSource(hikariConfig);//生成配置

   EngineConfig engineConfig = EngineConfig.builder()//生成文件路径.fileOutputDir("d://")//打开目录.openOutputDir(true)//生成文件类型:HTML.fileType(EngineFileType.HTML)//生成模板实现.produceType(EngineTemplateType.freemarker).build();//忽略表

   ArrayList<String> ignoreTableName =newArrayList<>();

   ignoreTableName.add("test_user");

   ignoreTableName.add("test_group");//忽略表前缀

   ArrayList<String> ignorePrefix =newArrayList<>();

   ignorePrefix.add("test_");//忽略表后缀

   ArrayList<String> ignoreSuffix =newArrayList<>();

   ignoreSuffix.add("_test");

   ProcessConfig processConfig = ProcessConfig.builder()//指定生成逻辑、当存在指定表、指定表前缀、指定表后缀时,将生成指定表,其余表不生成、并跳过忽略表配置//根据名称指定表生成.designatedTableName(newArrayList<>())//根据表前缀生成.designatedTablePrefix(newArrayList<>())//根据表后缀生成.designatedTableSuffix(newArrayList<>())//忽略表名.ignoreTableName(ignoreTableName)//忽略表前缀.ignoreTablePrefix(ignorePrefix)//忽略表后缀.ignoreTableSuffix(ignoreSuffix).build();//配置

   Configuration config = Configuration.builder()//版本.version("1.0.0")//描述,文档名称.description("数据库设计文档生成")//数据源.dataSource(dataSource)//生成配置.engineConfig(engineConfig)//生成配置.produceConfig(processConfig).build();//执行生成newDocumentationExecute(config).execute();}}</code>

在测试用例里面运行上面的代码,就会自动生成数据库文档到fileOutputDir配置目录下。

五、效果

在数据库中为每张数据表添加comment,才会有表说明字段。

在数据库中为字段添加comment,才会有字段说明。


相关文章
|
7天前
|
安全 Java API
Java 17新特性让你的代码起飞!
【10月更文挑战第4天】自Java 8发布以来,Java语言经历了多次重大更新,每一次都引入了令人兴奋的新特性,极大地提升了开发效率和代码质量。本文将带你从Java 8一路走到Java 17,探索那些能让你的代码起飞的关键特性。
31 1
|
6天前
|
Java 程序员 API
Java中的Lambda表达式:简化代码的秘密武器
【10月更文挑战第11天】 在Java编程中,Lambda表达式是一种简洁而强大的工具,它允许我们将函数作为参数传递给其他方法。本文将介绍Lambda表达式的基本概念、使用方法以及在实际项目中的应用案例,帮助你更好地理解和利用这一特性来简化代码。
20 8
|
4天前
|
Java 开发者
在Java编程中,正确的命名规范不仅能提升代码的可读性和可维护性,还能有效避免命名冲突。
【10月更文挑战第13天】在Java编程中,正确的命名规范不仅能提升代码的可读性和可维护性,还能有效避免命名冲突。本文将带你深入了解Java命名规则,包括标识符的基本规则、变量和方法的命名方式、常量的命名习惯以及如何避免关键字冲突,通过实例解析,助你写出更规范、优雅的代码。
23 3
|
4天前
|
Java 程序员
在Java编程中,关键字不仅是简单的词汇,更是赋予代码强大功能的“魔法咒语”。
【10月更文挑战第13天】在Java编程中,关键字不仅是简单的词汇,更是赋予代码强大功能的“魔法咒语”。本文介绍了Java关键字的基本概念及其重要性,并通过定义类和对象、控制流程、访问修饰符等示例,展示了关键字的实际应用。掌握这些关键字,是成为优秀Java程序员的基础。
11 3
|
7天前
|
Java 编译器 API
从Java 8到Java 17,这些新特性让你的代码起飞!
【10月更文挑战第10天】在软件开发领域,Java作为一种历史悠久且广泛使用的编程语言,不断进化以适应新的需求和挑战。从Java 8到Java 17,每一次版本更新都带来了诸多新特性和改进,极大地提升了开发效率和代码质量。今天,我们就来一起探讨这些新特性,看看它们是如何让我们的代码“起飞”的。
69 0
|
9天前
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
43 6
|
7天前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
37 3
Mysql(4)—数据库索引
|
9天前
|
SQL Ubuntu 关系型数据库
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
本文为MySQL学习笔记,介绍了数据库的基本概念,包括行、列、主键等,并解释了C/S和B/S架构以及SQL语言的分类。接着,指导如何在Windows和Ubuntu系统上安装MySQL,并提供了启动、停止和重启服务的命令。文章还涵盖了Navicat的使用,包括安装、登录和新建表格等步骤。最后,介绍了MySQL中的数据类型和字段约束,如主键、外键、非空和唯一等。
27 3
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
|
13天前
|
缓存 算法 关系型数据库
Mysql(3)—数据库相关概念及工作原理
数据库是一个以某种有组织的方式存储的数据集合。它通常包括一个或多个不同的主题领域或用途的数据表。
37 5
Mysql(3)—数据库相关概念及工作原理
|
4天前
|
SQL Oracle 关系型数据库
安装最新 MySQL 8.0 数据库(教学用)
安装最新 MySQL 8.0 数据库(教学用)
33 4