一鍵生成數(shù)據(jù)庫文檔大利器!安利 ~
點擊關(guān)注公眾號,Java干貨及時送達??

簡介
在企業(yè)級開發(fā)中、我們經(jīng)常會有編寫數(shù)據(jù)庫表結(jié)構(gòu)文檔的時間付出,從業(yè)以來,待過幾家企業(yè),關(guān)于數(shù)據(jù)庫表結(jié)構(gòu)文檔狀態(tài):要么沒有、要么有、但都是手寫、后期運維開發(fā),需要手動進行維護到文檔中,很是繁瑣、如果忘記一次維護、就會給以后工作造成很多困擾、無形中制造了很多坑留給自己和后人,于是萌生了要自己寫一個插件工具的想法。
但由于自己前期在程序設(shè)計上沒有很多造詣,且能力偏低,有想法并不能很好實現(xiàn),隨著工作閱歷的增加,和知識的不斷儲備,終于在2020年的3月中旬開始進行編寫,4月上旬完成初版,想完善差不多在開源,但由于工作太忙,業(yè)余時間不足,沒有在進行完善,到了6月份由于工作原因、頻繁設(shè)計和更改數(shù)據(jù)庫、經(jīng)常使用自己寫的此插件、節(jié)省了很多時間,解決了很多問題 ,在僅有且不多的業(yè)余時間中、進行開源準備,于2020年6月22日,開源,歡迎大家使用、建議、并貢獻。
關(guān)于名字,想一個太難了,好在我這個聰明的小腦瓜靈感一現(xiàn),怎么突出它的小,但重要呢?從小就學(xué)過雷鋒的螺絲釘精神,摘自雷鋒日記:雖然是細小的螺絲釘,是個細微的小齒輪,然而如果缺了它,那整個的機器就無法運轉(zhuǎn)了,慢說是缺了它,即使是一枚小螺絲釘沒擰緊,一個小齒輪略有破損,也要使機器的運轉(zhuǎn)發(fā)生故障的...
感覺自己寫的這個工具,很有這意味,雖然很小、但是開發(fā)中缺了它還不行,于是便起名為screw(螺絲釘)。
特點
簡潔、輕量、設(shè)計良好 多數(shù)據(jù)庫支持 多種格式文檔 靈活擴展 支持自定義模板
文檔生成支持
html word markdown
文檔截圖
html
圖片
圖片
word
圖片
markdwon
圖片
圖片
使用方式
普通方式
引入依賴
????
????cn.smallbun.screw ????
????screw-core ????
????${lastVersion} ????
? ????
編寫代碼
/**????
?*?文檔生成????
?*/????
void?documentGeneration()?{????
???//數(shù)據(jù)源????
???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");????
???//設(shè)置可以獲取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)????
?????????//生成模板實現(xiàn)????
?????????.produceType(EngineTemplateType.freemarker)????
?????????//自定義文件名稱????
?????????.fileName("自定義文件名稱").build();????
????
???//忽略表????
???ArrayList?ignoreTableName?=?new?ArrayList<>();????
???ignoreTableName.add("test_user");????
???ignoreTableName.add("test_group");????
???//忽略表前綴????
???ArrayList?ignorePrefix?=?new?ArrayList<>();????
???ignorePrefix.add("test_");????
???//忽略表后綴????????
???ArrayList?ignoreSuffix?=?new?ArrayList<>();????
???ignoreSuffix.add("_test");????
???ProcessConfig?processConfig?=?ProcessConfig.builder()????
?????????//指定生成邏輯、當(dāng)存在指定表、指定表前綴、指定表后綴時,將生成指定表,其余表不生成、并跳過忽略表配置?????
???//根據(jù)名稱指定表生成????
???.designatedTableName(new?ArrayList<>())????
???//根據(jù)表前綴生成????
???.designatedTablePrefix(new?ArrayList<>())????
???//根據(jù)表后綴生成?????
???.designatedTableSuffix(new?ArrayList<>())????
?????????//忽略表名????
?????????.ignoreTableName(ignoreTableName)????
?????????//忽略表前綴????
?????????.ignoreTablePrefix(ignorePrefix)????
?????????//忽略表后綴????
?????????.ignoreTableSuffix(ignoreSuffix).build();????
???//配置????
???Configuration?config?=?Configuration.builder()????
?????????//版本????
?????????.version("1.0.0")????
?????????//描述????
?????????.description("數(shù)據(jù)庫設(shè)計文檔生成")????
?????????//數(shù)據(jù)源????
?????????.dataSource(dataSource)????
?????????//生成配置????
?????????.engineConfig(engineConfig)????
?????????//生成配置????
?????????.produceConfig(processConfig)????
?????????.build();????
???//執(zhí)行生成????
???new?DocumentationExecute(config).execute();????
}????
Maven 插件
????
????????
????????????
????????????cn.smallbun.screw ????
????????????screw-maven-plugin ????
????????????${lastVersion} ????
????????????????
????????????????????
????????????????????
????????????????????com.zaxxer ????
????????????????????HikariCP ????
????????????????????3.4.5 ????
???????????????? ????
????????????????????
????????????????????
????????????????????mysql ????
????????????????????mysql-connector-java ????
????????????????????8.0.20 ????
???????????????? ????
???????????? ????
????????????????
????????????????????
????????????????root ????
????????????????????
????????????????password ????
????????????????????
????????????????com.mysql.cj.jdbc.Driver ????
????????????????????
????????????????jdbc:mysql://127.0.0.1:3306/xxxx ????
????????????????????
????????????????HTML ????
????????????????????
????????????????false ????
????????????????????
????????????????freemarker ????
????????????????????
????????????????測試文檔名稱 ????
????????????????????
????????????????數(shù)據(jù)庫文檔生成 ????
????????????????????
????????????????${project.version} ????
????????????????????
????????????????數(shù)據(jù)庫文檔 ????
???????????? ????
????????????????
????????????????????
????????????????????compile ????
????????????????????????
????????????????????????run ????
???????????????????? ????
???????????????? ????
???????????? ????
???????? ????
???? ????
????
擴展模塊
pojo生成功能
功能簡介
pojo生成功能是基于screw延伸出的擴展模塊,目前處于初步開發(fā)的狀態(tài)。在日常的開發(fā)中,經(jīng)過需求分析、建模之后,往往會先在數(shù)據(jù)庫中建表,其次在進行代碼的開發(fā)。
那么pojo生成功能在這個階段就可以幫助大家節(jié)省一些重復(fù)勞動了。使用pojo生成功能可以直接根據(jù)數(shù)據(jù)庫生成對應(yīng)的java pojo對象。這樣后續(xù)的修改,開發(fā)都會很方便。
數(shù)據(jù)庫支持
MySQL
使用方式
引入依賴
????
????cn.smallbun.screw ????
????screw-extension ????
????${lastVersion} ????
? ????
編寫代碼
/**????
?*?pojo生成????
?*/????
void?pojoGeneration()?{????
????//數(shù)據(jù)源????
????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");????
????//設(shè)置可以獲取tables?remarks信息????
????hikariConfig.addDataSourceProperty("useInformationSchema",?"true");????
????hikariConfig.setMinimumIdle(2);????
????hikariConfig.setMaximumPoolSize(5);????
????DataSource?dataSource?=?new?HikariDataSource(hikariConfig);????
????
????ProcessConfig?processConfig?=?ProcessConfig.builder()????
????????//指定生成邏輯、當(dāng)存在指定表、指定表前綴、指定表后綴時,將生成指定表,其余表不生成、并跳過忽略表配置????
????????//根據(jù)名稱指定表生成????
????????.designatedTableName(new?ArrayList<>())????
????????//根據(jù)表前綴生成????
????????.designatedTablePrefix(new?ArrayList<>())????
????????//根據(jù)表后綴生成????
????????.designatedTableSuffix(new?ArrayList<>()).build();????
????
????//設(shè)置生成pojo相關(guān)配置????
????PojoConfiguration?config?=?new?PojoConfiguration();????
????//設(shè)置文件存放路徑????
????config.setPath("/cn/smallbun/screw/");????
????//設(shè)置包名????
????config.setPackageName("cn.smallbun.screw");????
????//設(shè)置是否使用lombok????
????config.setUseLombok(false);????
????//設(shè)置數(shù)據(jù)源????
????config.setDataSource(dataSource);????
????//設(shè)置命名策略????
????config.setNameStrategy(new?HumpNameStrategy());????
????//設(shè)置表過濾邏輯????
????config.setProcessConfig(processConfig);????
????//執(zhí)行生成????
????new?PojoExecute(config).execute();????
}????
常見問題
1.生成后文檔亂碼?
MySQL:URL加入?characterEncoding=UTF-8。
2.Caused by: java.lang.NoSuchFieldError: VERSION_2_3_30?
檢查項目freemarker依賴,這是由于版本過低造成的,升級版本為2.3.30即可。
3.java.lang.AbstractMethodError: oracle.jdbc.driver.T4CConnection.getSchema()Ljava/lang/String;
這是因為oracle驅(qū)動版本過低造成的,刪除或屏蔽目前驅(qū)動版本,驅(qū)動添加升級為以下版本:
????
???com.oracle.ojdbc ????
???ojdbc8 ????
???19.3.0.0 ????
????
????
???cn.easyproject ????
???orai18n ????
???12.1.0.2.0 ????
????
4.MySQL數(shù)據(jù)庫表和列字段有說明、生成文檔沒有說明?
URL鏈接加入useInformationSchema=true即可。
5.java.lang.AbstractMethodError: com.mysql.jdbc.JDBC4Connection.getSchema()Ljava/lang/String;
這是因為mysql驅(qū)動版本過低造成的,升級mysql驅(qū)動版本為最新即可。
項目地址
https://gitee.com/leshalv/screw
最近面試BAT,整理一份面試資料《Java面試BATJ通關(guān)手冊》,覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫、數(shù)據(jù)結(jié)構(gòu)等等。
獲取方式:點“在看”,關(guān)注公眾號并回復(fù)?Java?領(lǐng)取,更多內(nèi)容陸續(xù)奉上。
PS:因公眾號平臺更改了推送規(guī)則,如果不想錯過內(nèi)容,記得讀完點一下“在看”,加個“星標”,這樣每次新文章推送才會第一時間出現(xiàn)在你的訂閱列表里。
點“在看”支持小哈呀,謝謝啦??

