推薦一個數據庫文檔生成神器
點擊上方藍色字體,選擇“標星公眾號”
優(yōu)質文章,第一時間送達
gitee地址:https://gitee.com/leshalv/screw
Gitee項目地址,可以直接去開源項目查看(推薦)
簡介
在企業(yè)級開發(fā)中、我們經常會有編寫數據庫表結構文檔的時間付出,從業(yè)以來,待過幾家企業(yè),關于數據庫表結構文檔狀態(tài):要么沒有、要么有、但都是手寫、后期運維開發(fā),需要手動進行維護到文檔中,很是繁瑣、如果忘記一次維護、就會給以后工作造成很多困擾、無形中制造了很多坑留給自己和后人。
于是萌生了要自己寫一個插件工具的想法,但由于自己前期在程序設計上沒有很多造詣,且能力偏低,有想法并不能很好實現,隨著工作閱歷的增加,和知識的不斷儲備,終于在2020年的3月中旬開始進行編寫。
4月上旬完成初版,想完善差不多在開源,但由于工作太忙,業(yè)余時間不足,沒有在進行完善,到了6月份由于工作原因、頻繁設計和更改數據庫、經常使用自己寫的此插件、節(jié)省了很多時間,解決了很多問題 ,在僅有且不多的業(yè)余時間中、進行開源準備,于2020年6月22日,開源,歡迎大家使用、建議、并貢獻。
關于名字,想一個太難了,好在我這個聰明的小腦瓜靈感一現,怎么突出它的小,但重要呢?從小就學過雷鋒的螺絲釘精神,摘自雷鋒日記:雖然是細小的螺絲釘,是個細微的小齒輪,然而如果缺了它,那整個的機器就無法運轉了,慢說是缺了它,即使是一枚小螺絲釘沒擰緊,一個小齒輪略有破損,也要使機器的運轉發(fā)生故障的...,感覺自己寫的這個工具,很有這意味,雖然很小、但是開發(fā)中缺了它還不行,于是便起名為screw(螺絲釘)。
特點
簡潔、輕量、設計良好
多數據庫支持
多種格式文檔
靈活擴展
支持自定義模板
數據庫支持
MySQL MariaDB TIDB Oracle SqlServer PostgreSQL Cache DB(2016) H2 (開發(fā)中) DB2 (開發(fā)中) HSQL (開發(fā)中) SQLite(開發(fā)中) 瀚高(開發(fā)中) 達夢 (開發(fā)中) 虛谷 (開發(fā)中) 人大金倉(開發(fā)中)
文檔生成支持
html word markdown
文檔截圖
html


word

markdwon


使用方式
普通方式
引入依賴
<dependency>
<groupId>cn.smallbun.screw</groupId>
<artifactId>screw-core</artifactId>
<version>${lastVersion}</version>
</dependency>
編寫代碼
/**
* 文檔生成
*/
void documentGeneration() {
//數據源
HikariConfig hikariConfig = new HikariConfig();
hikariConfig.setDriverClassName("com.mysql.cj.jdbc.Driver");
hikariConfig.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/database");
hikariConfig.setUsername("root");
hikariConfig.setPassword("password");
//設置可以獲取tables remarks信息
hikariConfig.addDataSourceProperty("useInformationSchema", "true");
hikariConfig.setMinimumIdle(2);
hikariConfig.setMaximumPoolSize(5);
DataSource dataSource = new HikariDataSource(hikariConfig);
//生成配置
EngineConfig engineConfig = EngineConfig.builder()
//生成文件路徑
.fileOutputDir(fileOutputDir)
//打開目錄
.openOutputDir(true)
//文件類型
.fileType(EngineFileType.HTML)
//生成模板實現
.produceType(EngineTemplateType.freemarker)
//自定義文件名稱
.fileName("自定義文件名稱").build();
//忽略表
ArrayList<String> ignoreTableName = new ArrayList<>();
ignoreTableName.add("test_user");
ignoreTableName.add("test_group");
//忽略表前綴
ArrayList<String> ignorePrefix = new ArrayList<>();
ignorePrefix.add("test_");
//忽略表后綴
ArrayList<String> ignoreSuffix = new ArrayList<>();
ignoreSuffix.add("_test");
ProcessConfig processConfig = ProcessConfig.builder()
//指定生成邏輯、當存在指定表、指定表前綴、指定表后綴時,將生成指定表,其余表不生成、并跳過忽略表配置
//根據名稱指定表生成
.designatedTableName(new ArrayList<>())
//根據表前綴生成
.designatedTablePrefix(new ArrayList<>())
//根據表后綴生成
.designatedTableSuffix(new ArrayList<>())
//忽略表名
.ignoreTableName(ignoreTableName)
//忽略表前綴
.ignoreTablePrefix(ignorePrefix)
//忽略表后綴
.ignoreTableSuffix(ignoreSuffix).build();
//配置
Configuration config = Configuration.builder()
//版本
.version("1.0.0")
//描述
.description("數據庫設計文檔生成")
//數據源
.dataSource(dataSource)
//生成配置
.engineConfig(engineConfig)
//生成配置
.produceConfig(processConfig)
.build();
//執(zhí)行生成
new DocumentationExecute(config).execute();
}
Maven 插件
<build>
<plugins>
<plugin>
<groupId>cn.smallbun.screw</groupId>
<artifactId>screw-maven-plugin</artifactId>
<version>${lastVersion}</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>password</password>
<!--driver-->
<driverClassName>com.mysql.cj.jdbc.Driver</driverClassName>
<!--jdbc url-->
<jdbcUrl>jdbc:mysql://127.0.0.1:3306/xxxx</jdbcUrl>
<!--生成文件類型-->
<fileType>HTML</fileType>
<!--打開文件輸出目錄-->
<openOutputDir>false</openOutputDir>
<!--生成模板-->
<produceType>freemarker</produceType>
<!--文檔名稱 為空時:將采用[數據庫名稱-描述-版本號]作為文檔名稱-->
<fileName>測試文檔名稱</fileName>
<!--描述-->
<description>數據庫文檔生成</description>
<!--版本-->
<version>${project.version}</version>
<!--標題-->
<title>數據庫文檔</title>
</configuration>
<executions>
<execution>
<phase>compile</phase>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
擴展模塊
pojo生成功能
功能簡介
pojo生成功能是基于screw延伸出的擴展模塊,目前處于初步開發(fā)的狀態(tài)。在日常的開發(fā)中,經過需求分析、建模之后,往往會先在數據庫中建表,其次在進行代碼的開發(fā)。那么pojo生成功能在這個階段就可以幫助大家節(jié)省一些重復勞動了。
使用pojo生成功能可以直接根據數據庫生成對應的java pojo對象。這樣后續(xù)的修改,開發(fā)都會很方便。
數據庫支持
MySQL
使用方式
引入依賴
<dependency>
<groupId>cn.smallbun.screw</groupId>
<artifactId>screw-extension</artifactId>
<version>${lastVersion}</version>
</dependency>
編寫代碼
/**
* pojo生成
*/
void pojoGeneration() {
//數據源
HikariConfig hikariConfig = new HikariConfig();
hikariConfig.setDriverClassName("com.mysql.cj.jdbc.Driver");
hikariConfig.setJdbcUrl("jdbc:mysql://127.0.0.1:3306/screw");
hikariConfig.setUsername("screw");
hikariConfig.setPassword("screw");
//設置可以獲取tables remarks信息
hikariConfig.addDataSourceProperty("useInformationSchema", "true");
hikariConfig.setMinimumIdle(2);
hikariConfig.setMaximumPoolSize(5);
DataSource dataSource = new HikariDataSource(hikariConfig);
ProcessConfig processConfig = ProcessConfig.builder()
//指定生成邏輯、當存在指定表、指定表前綴、指定表后綴時,將生成指定表,其余表不生成、并跳過忽略表配置
//根據名稱指定表生成
.designatedTableName(new ArrayList<>())
//根據表前綴生成
.designatedTablePrefix(new ArrayList<>())
//根據表后綴生成
.designatedTableSuffix(new ArrayList<>()).build();
//設置生成pojo相關配置
PojoConfiguration config = new PojoConfiguration();
//設置文件存放路徑
config.setPath("/cn/smallbun/screw/");
//設置包名
config.setPackageName("cn.smallbun.screw");
//設置是否使用lombok
config.setUseLombok(false);
//設置數據源
config.setDataSource(dataSource);
//設置命名策略
config.setNameStrategy(new HumpNameStrategy());
//設置表過濾邏輯
config.setProcessConfig(processConfig);
//執(zhí)行生成
new PojoExecute(config).execute();
}
常見問題
生成后文檔亂碼?
MySQL:URL加入
?characterEncoding=UTF-8。Caused by: java.lang.NoSuchFieldError: VERSION_2_3_30?
檢查項目
freemarker依賴,這是由于版本過低造成的,升級版本為2.3.30即可。java.lang.AbstractMethodError: oracle.jdbc.driver.T4CConnection.getSchema()Ljava/lang/String;
這是因為oracle驅動版本過低造成的,刪除或屏蔽目前驅動版本,驅動添加升級為以下版本:
<dependency>
<groupId>com.oracle.ojdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.3.0.0</version>
</dependency>
<dependency>
<groupId>cn.easyproject</groupId>
<artifactId>orai18n</artifactId>
<version>12.1.0.2.0</version>
</dependency>
MySQL數據庫表和列字段有說明、生成文檔沒有說明?
URL鏈接加入
useInformationSchema=true即可。java.lang.AbstractMethodError: com.mysql.jdbc.JDBC4Connection.getSchema()Ljava/lang/String;
這是因為mysql驅動版本過低造成的,升級mysql驅動版本為最新即可
—————END————— 推薦閱讀:
IDEA 永久注冊碼來了!!! Nginx 這個功能就厲害了! 強烈推薦:一個比 Nginx 功能更強大的 Web 服務器 基于SpringBoot 的CMS系統,拿去開發(fā)企業(yè)官網真香 33 個 IDEA 最牛配置,寫代碼太爽了! 不要再封裝各種Util工具類了,這個神級框架值得擁有!
最近面試BAT,整理一份面試資料《Java面試BAT通關手冊》,覆蓋了Java核心技術、JVM、Java并發(fā)、SSM、微服務、數據庫、數據結構等等。 獲取方式:關注公眾號并回復 java 領取,更多內容陸續(xù)奉上。 明天見(??ω??)??
