一、概述
在企业级开发中、我们经常会有编写数据库表结构文档的时间付出,从业以来,待过几家企业,关于数据库表结构文档状态:要么没有、要么有、但都是手写、后期运维开发,需要手动进行维护到文档中,很是繁琐、如果忘记一次维护、就会给以后工作造成很多困扰、无形中制造了很多坑留给自己和后面接手的人。之前有一段时间开发了一个项目,是那种开发完后后期补充文档的。写数据库文档的时候特别恶心,需要对着数据库中的表和表字段。当表特别多的时候,眼睛都会看花。不知道大家是否有过这种经历,我当时是采取笨方法一个表一个字段写的,恶心坏了。最近在github上发现了一个数据库文档插件,挺不错的,介绍给大家,住大家脱离数据库文档编写的苦海。
二、插件介绍
- screw自动生成数据库文档
- 支持多种格式文档:html、word和markdown
- 支持多种类型的数据库:MySQL、MariaDB、TIDB、Oracle、SqlServer、PostgreSQL和Cache DB
三、插件运用
- 在数据库中新建表格(没有具体含义,纯粹是为了演示)
SET FOREIGN_KEY_CHECKS=0; -- ---------------------------- -- Table structure for account_type -- ---------------------------- DROP TABLE IF EXISTS `account_type`; CREATE TABLE `account_type` ( `id` tinyint unsigned NOT NULL COMMENT '主账号 0, 附属账号 1', `type` varchar(50) DEFAULT '主账号', `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP, `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='账户类型字典表'; -- ---------------------------- -- Table structure for iap_order -- ---------------------------- DROP TABLE IF EXISTS `iap_order`; CREATE TABLE `iap_order` ( `transaction_id` varchar(200) NOT NULL COMMENT '交易方式', `principal_id` bigint unsigned DEFAULT NULL COMMENT 'userId可能为null', `product_id` bigint unsigned DEFAULT NULL COMMENT 'product id', `apple_id` bigint unsigned DEFAULT NULL COMMENT 'apple id', `receipt_data` longtext COMMENT '完整的receipt', `platform` varchar(20) DEFAULT NULL COMMENT '平台', `status` tinyint unsigned DEFAULT '0' COMMENT '订单状态 ', `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`transaction_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='IAP订单'; -- ---------------------------- -- Table structure for points_rule -- ---------------------------- DROP TABLE IF EXISTS `points_rule`; CREATE TABLE `points_rule` ( `id` int NOT NULL AUTO_INCREMENT COMMENT '规则id', `member_level` int DEFAULT NULL COMMENT '用户规则适用等级', `daily_video_view_points` int DEFAULT NULL COMMENT '每日观看视频积分', `daily_article_view_points` int DEFAULT NULL COMMENT '每日阅读文章积分', `daily_video_share_points` int DEFAULT NULL COMMENT '每日分享视频积分', `daily_article_share_points` int DEFAULT NULL COMMENT '每日分享文章积分', `daily_comment_post_points` int DEFAULT NULL COMMENT '每日评论积分', `daily_login_points` int DEFAULT NULL COMMENT '每日登陆积分', `created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='积分规则';
- 在项目中引入插件(可以直接复制过去,开箱即用)
<plugin> <groupId>cn.smallbun.screw</groupId> <artifactId>screw-maven-plugin</artifactId> <version>1.0.4</version> <dependencies> <!-- HikariCP --> <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>3.4.5</version> </dependency> <!--mysql driver--> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>8.0.20</version> </dependency> </dependencies> <configuration> <!--username--> <username>root</username> <!--password--> <password>123456</password> <!--driver--> <driverClassName>com.mysql.cj.jdbc.Driver</driverClassName> <!--jdbc url--> <jdbcUrl>jdbc:mysql://192.168.1.7:3306/db?useUnicode=true&zeroDateTimeBehavior=convertToNull&autoReconnect=true</jdbcUrl> <!--生成文件类型,支持HTML WORD MD 共3种文件格式--> <fileType>HTML</fileType> <!--打开文件输出目录--> <openOutputDir>false</openOutputDir> <!--生成模板--> <produceType>freemarker</produceType> <!--文档名称 为空时:将采用[数据库名称-描述-版本号]作为文档名称--> <fileName>db数据库表说明文档</fileName> <!--描述--> <description>表和字段说明</description> <!--版本--> <version>1.0.0.0</version> <!--标题--> <title>数据库文档</title> </configuration> <executions> <execution> <phase>compile</phase> <goals> <goal>run</goal> </goals> </execution> </executions> </plugin>
- 调用screw插件
- 结果演示
文档生成地址:根目录下doc文件下
html数据库文档演示:
怎么样,是不是眼前一亮,简直和我们日常写的数据库文档一样,你是不是也手痒痒了,来试一下吧!可以节省很多数据库文档编写和维护时间。
四、总结
这个插件使用起来特别方便,开箱即用。但是在创建表格的时候,需要对每个字段和表做好描述。不然输出的数据库文档可能就不能满足我们的使用了。