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

簡(jiǎn)介
在企業(yè)級(jí)開(kāi)發(fā)中、我們經(jīng)常會(huì)有編寫(xiě)數(shù)據(jù)庫(kù)表結(jié)構(gòu)文檔的時(shí)間付出,從業(yè)以來(lái),待過(guò)幾家企業(yè),關(guān)于數(shù)據(jù)庫(kù)表結(jié)構(gòu)文檔狀態(tài):要么沒(méi)有、要么有、但都是手寫(xiě)、后期運(yùn)維開(kāi)發(fā),需要手動(dòng)進(jìn)行維護(hù)到文檔中,很是繁瑣、如果忘記一次維護(hù)、就會(huì)給以后工作造成很多困擾、無(wú)形中制造了很多坑留給自己和后人,于是萌生了要自己寫(xiě)一個(gè)插件工具的想法。
但由于自己前期在程序設(shè)計(jì)上沒(méi)有很多造詣,且能力偏低,有想法并不能很好實(shí)現(xiàn),隨著工作閱歷的增加,和知識(shí)的不斷儲(chǔ)備,終于在2020年的3月中旬開(kāi)始進(jìn)行編寫(xiě),4月上旬完成初版,想完善差不多在開(kāi)源,但由于工作太忙,業(yè)余時(shí)間不足,沒(méi)有在進(jìn)行完善,到了6月份由于工作原因、頻繁設(shè)計(jì)和更改數(shù)據(jù)庫(kù)、經(jīng)常使用自己寫(xiě)的此插件、節(jié)省了很多時(shí)間,解決了很多問(wèn)題 ,在僅有且不多的業(yè)余時(shí)間中、進(jìn)行開(kāi)源準(zhǔn)備,于2020年6月22日,開(kāi)源,歡迎大家使用、建議、并貢獻(xiàn)。
關(guān)于名字,想一個(gè)太難了,好在我這個(gè)聰明的小腦瓜靈感一現(xiàn),怎么突出它的小,但重要呢?從小就學(xué)過(guò)雷鋒的螺絲釘精神,摘自雷鋒日記:雖然是細(xì)小的螺絲釘,是個(gè)細(xì)微的小齒輪,然而如果缺了它,那整個(gè)的機(jī)器就無(wú)法運(yùn)轉(zhuǎn)了,慢說(shuō)是缺了它,即使是一枚小螺絲釘沒(méi)擰緊,一個(gè)小齒輪略有破損,也要使機(jī)器的運(yùn)轉(zhuǎn)發(fā)生故障的...
感覺(jué)自己寫(xiě)的這個(gè)工具,很有這意味,雖然很小、但是開(kāi)發(fā)中缺了它還不行,于是便起名為screw(螺絲釘)。
特點(diǎn)
簡(jiǎn)潔、輕量、設(shè)計(jì)良好 多數(shù)據(jù)庫(kù)支持 多種格式文檔 靈活擴(kuò)展 支持自定義模板
文檔生成支持
html word markdown
文檔截圖
html
圖片
圖片
word
圖片
markdwon
圖片
圖片
使用方式
普通方式
引入依賴(lài)
????
????cn.smallbun.screw ????
????screw-core ????
????${lastVersion} ????
? ????
編寫(xiě)代碼
/**????
?*?文檔生成????
?*/????
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)????
?????????//打開(kāi)目錄????
?????????.openOutputDir(true)????
?????????//文件類(lèi)型????
?????????.fileType(EngineFileType.HTML)????
?????????//生成模板實(shí)現(xiàn)????
?????????.produceType(EngineTemplateType.freemarker)????
?????????//自定義文件名稱(chēng)????
?????????.fileName("自定義文件名稱(chēng)").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)存在指定表、指定表前綴、指定表后綴時(shí),將生成指定表,其余表不生成、并跳過(guò)忽略表配置?????
???//根據(jù)名稱(chēng)指定表生成????
???.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ù)庫(kù)設(shè)計(jì)文檔生成")????
?????????//數(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 ????
????????????????????
????????????????測(cè)試文檔名稱(chēng) ????
????????????????????
????????????????數(shù)據(jù)庫(kù)文檔生成 ????
????????????????????
????????????????${project.version} ????
????????????????????
????????????????數(shù)據(jù)庫(kù)文檔 ????
???????????? ????
????????????????
????????????????????
????????????????????compile ????
????????????????????????
????????????????????????run ????
???????????????????? ????
???????????????? ????
???????????? ????
???????? ????
???? ????
????
擴(kuò)展模塊
pojo生成功能
功能簡(jiǎn)介
pojo生成功能是基于screw延伸出的擴(kuò)展模塊,目前處于初步開(kāi)發(fā)的狀態(tài)。在日常的開(kāi)發(fā)中,經(jīng)過(guò)需求分析、建模之后,往往會(huì)先在數(shù)據(jù)庫(kù)中建表,其次在進(jìn)行代碼的開(kāi)發(fā)。
那么pojo生成功能在這個(gè)階段就可以幫助大家節(jié)省一些重復(fù)勞動(dòng)了。使用pojo生成功能可以直接根據(jù)數(shù)據(jù)庫(kù)生成對(duì)應(yīng)的java pojo對(duì)象。這樣后續(xù)的修改,開(kāi)發(fā)都會(huì)很方便。
數(shù)據(jù)庫(kù)支持
MySQL
使用方式
引入依賴(lài)
????
????cn.smallbun.screw ????
????screw-extension ????
????${lastVersion} ????
? ????
編寫(xiě)代碼
/**????
?*?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)存在指定表、指定表前綴、指定表后綴時(shí),將生成指定表,其余表不生成、并跳過(guò)忽略表配置????
????????//根據(jù)名稱(chēng)指定表生成????
????????.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è)置表過(guò)濾邏輯????
????config.setProcessConfig(processConfig);????
????//執(zhí)行生成????
????new?PojoExecute(config).execute();????
}????
常見(jiàn)問(wèn)題
1.生成后文檔亂碼?
MySQL:URL加入?characterEncoding=UTF-8。
2.Caused by: java.lang.NoSuchFieldError: VERSION_2_3_30?
檢查項(xiàng)目freemarker依賴(lài),這是由于版本過(guò)低造成的,升級(jí)版本為2.3.30即可。
3.java.lang.AbstractMethodError: oracle.jdbc.driver.T4CConnection.getSchema()Ljava/lang/String;
這是因?yàn)閛racle驅(qū)動(dòng)版本過(guò)低造成的,刪除或屏蔽目前驅(qū)動(dòng)版本,驅(qū)動(dòng)添加升級(jí)為以下版本:
????
???com.oracle.ojdbc ????
???ojdbc8 ????
???19.3.0.0 ????
????
????
???cn.easyproject ????
???orai18n ????
???12.1.0.2.0 ????
????
4.MySQL數(shù)據(jù)庫(kù)表和列字段有說(shuō)明、生成文檔沒(méi)有說(shuō)明?
URL鏈接加入useInformationSchema=true即可。
5.java.lang.AbstractMethodError: com.mysql.jdbc.JDBC4Connection.getSchema()Ljava/lang/String;
這是因?yàn)閙ysql驅(qū)動(dòng)版本過(guò)低造成的,升級(jí)mysql驅(qū)動(dòng)版本為最新即可。
項(xiàng)目地址
https://gitee.com/leshalv/screw
23 種設(shè)計(jì)模式的通俗解釋?zhuān)m然有點(diǎn)污,但是秒懂
最近面試BAT,整理一份面試資料《Java面試BATJ通關(guān)手冊(cè)》,覆蓋了Java核心技術(shù)、JVM、Java并發(fā)、SSM、微服務(wù)、數(shù)據(jù)庫(kù)、數(shù)據(jù)結(jié)構(gòu)等等。
獲取方式:點(diǎn)“在看”,關(guān)注公眾號(hào)并回復(fù)?Java?領(lǐng)取,更多內(nèi)容陸續(xù)奉上。
文章有幫助的話,在看,轉(zhuǎn)發(fā)吧。
謝謝支持喲 (*

