實用!一鍵生成數(shù)據(jù)庫文檔,堪稱數(shù)據(jù)庫界的Swagger
最近部門訂單業(yè)務調(diào)整,收攏其他業(yè)務線的下單入口,做個統(tǒng)一大訂單平臺。需要梳理各業(yè)務線的數(shù)據(jù)表,但每個業(yè)務線庫都有近百張和訂單相關的表,挨個表一個一個字段的弄腦瓜子嗡嗡的。
為了不重復 CV 操作,抱著一絲希望開始在GitHub里找,看看有沒有什么工具可以用,結果就真的發(fā)現(xiàn)了寶藏,screw(螺絲釘),居然可以生成數(shù)據(jù)庫文檔,優(yōu)秀啊~。
數(shù)據(jù)庫文檔圖一、數(shù)據(jù)庫支持
MySQL
MariaDB
TIDB
Oracle
SqlServer
PostgreSQL
Cache DB
二、配置
1、pom文件
引入screw核心包,HikariCP數(shù)據(jù)庫連接池,HikariCP號稱性能最出色的數(shù)據(jù)庫連接池。
<dependency>
????<groupId>cn.smallbun.screwgroupId>
????<artifactId>screw-coreartifactId>
????<version>1.0.3version>
dependency>
<dependency>
????<groupId>com.zaxxergroupId>
????<artifactId>HikariCPartifactId>
????<version>3.4.5version>
dependency>
<dependency>
????<groupId>mysqlgroupId>
????<artifactId>mysql-connector-javaartifactId>
????<version>8.0.20version>
dependency>
2、配置數(shù)據(jù)源
配置數(shù)據(jù)源,設置?useInformationSchema?可以獲取tables注釋信息。
spring.datasource.url=jdbc:mysql://45.93.1.5:3306/fire?useUnicode=true&characterEncoding=UTF-8&useSSL=false
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.xa.properties.useInformationSchema=true?
3、screw 核心配置
screw有兩種執(zhí)行方式,第一種是pom文件配置,另一種是代碼執(zhí)行。
?
????<plugins>
????????<plugin>
????????????<groupId>org.springframework.bootgroupId>
????????????<artifactId>spring-boot-maven-pluginartifactId>
????????plugin>
????????<plugin>
????????????<groupId>cn.smallbun.screwgroupId>
????????????<artifactId>screw-maven-pluginartifactId>
????????????<version>1.0.3version>
????????????<dependencies>
????????????????
????????????????<dependency>
????????????????????<groupId>com.zaxxergroupId>
????????????????????<artifactId>HikariCPartifactId>
????????????????????<version>3.4.5version>
????????????????dependency>
????????????????
????????????????<dependency>
????????????????????<groupId>mysqlgroupId>
????????????????????<artifactId>mysql-connector-javaartifactId>
????????????????????<version>8.0.20version>
????????????????dependency>
????????????dependencies>
????????????<configuration>
????????????????
????????????????<username>rootusername>
????????????????
????????????????<password>123456password>
????????????????
????????????????<driverClassName>com.mysql.cj.jdbc.DriverdriverClassName>
????????????????
????????????????<jdbcUrl>jdbc:mysql://41.92.6.5:3306/firejdbcUrl>
????????????????
????????????????<fileType>HTMLfileType>
????????????????
????????????????<openOutputDir>falseopenOutputDir>
????????????????
????????????????<produceType>freemarkerproduceType>
????????????????
????????????????
????????????????
????????????????<description>數(shù)據(jù)庫文檔生成description>
????????????????
????????????????<version>${project.version}version>
????????????????
????????????????<title>fire數(shù)據(jù)庫文檔title>
????????????configuration>
????????????<executions>
????????????????<execution>
????????????????????<phase>compilephase>
????????????????????<goals>
????????????????????????<goal>rungoal>
????????????????????goals>
????????????????execution>
????????????executions>
????????plugin>
????plugins>
</build>
配置完以后在?maven project->screw?雙擊執(zhí)行ok。
運行方式代碼生成方式也非常簡單。
@SpringBootTest
public?class?ScrewApplicationTests?{
????@Autowired
????ApplicationContext?applicationContext;
????@Test
????void?contextLoads()?{
????????DataSource?dataSourceMysql?=?applicationContext.getBean(DataSource.class);
????????//?生成文件配置
????????EngineConfig?engineConfig?=?EngineConfig.builder()
????????????????//?生成文件路徑,自己mac本地的地址,這里需要自己更換下路徑
????????????????.fileOutputDir("D:/")
????????????????//?打開目錄
????????????????.openOutputDir(false)
????????????????//?文件類型
????????????????.fileType(EngineFileType.HTML)
????????????????//?生成模板實現(xiàn)
????????????????.produceType(EngineTemplateType.freemarker).build();
????????//?生成文檔配置(包含以下自定義版本號、描述等配置連接)
????????Configuration?config?=?Configuration.builder()
????????????????.version("1.0.3")
????????????????.description("生成文檔信息描述")
????????????????.dataSource(dataSourceMysql)
????????????????.engineConfig(engineConfig)
????????????????.produceConfig(getProcessConfig())
????????????????.build();
????????//?執(zhí)行生成
????????new?DocumentationExecute(config).execute();
????}
????/**
?????*?配置想要生成的表+?配置想要忽略的表
?????*
?????*?@return?生成表配置
?????*/
????public?static?ProcessConfig?getProcessConfig()?{
????????//?忽略表名
????????List<String>?ignoreTableName?=?Arrays.asList("a",?"test_group");
????????//?忽略表前綴,如忽略a開頭的數(shù)據(jù)庫表
????????List<String>?ignorePrefix?=?Arrays.asList("a",?"t");
????????//?忽略表后綴
????????List<String>?ignoreSuffix?=?Arrays.asList("_test",?"czb_");
????????return?ProcessConfig.builder()
????????????????//根據(jù)名稱指定表生成
????????????????.designatedTableName(Arrays.asList("fire_user"))
????????????????//根據(jù)表前綴生成
????????????????.designatedTablePrefix(new?ArrayList<>())
????????????????//根據(jù)表后綴生成
????????????????.designatedTableSuffix(new?ArrayList<>())
????????????????//忽略表名
????????????????.ignoreTableName(ignoreTableName)
????????????????//忽略表前綴
????????????????.ignoreTablePrefix(ignorePrefix)
????????????????//忽略表后綴
????????????????.ignoreTableSuffix(ignoreSuffix).build();
????}
}
4、文檔格式
screw?有?HTML、DOC、MD?三種格式的文檔。
代碼中的修改
.fileType(EngineFileType.HTML)
或者pom文件
MD</fileType>
DOC文檔樣式
DOC文檔HTML文檔樣式
HTML文檔MD文檔樣式
MD文檔不得不說這個工具是真TM好用,提前完成任務,有點傲嬌有木有!
傲嬌demo 的 GitHub 地址:
https://github.com/chengxy-nds/Springboot-Notebook/tree/master/springboot-database-doc

原創(chuàng)不易,燃燒秀發(fā)輸出內(nèi)容,如果有一丟丟收獲,點個贊鼓勵一下吧!
整理了幾百本各類技術電子書,送給小伙伴們。關注公號回復【666】自行領取。和一些小伙伴們建了一個技術交流群,一起探討技術、分享技術資料,旨在共同學習進步,如果感興趣就加入我們吧!

關注,邁開成長的第一步