<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          一鍵生成數(shù)據(jù)庫(kù)文檔大利器!安利 ~

          共 6970字,需瀏覽 14分鐘

           ·

          2022-04-09 06:25

          點(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)污,但是秒懂

          四月再不跳槽,真晚了

          一款 IDEA 代碼防沉迷插件刷爆,偷偷給同事裝一個(gè) !

          比 Xshell 還好用的 SSH 客戶端神器,MobaXterm 太愛(ài)了!

          最近面試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ā)吧。

          謝謝支持喲 (*

          瀏覽 78
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  99a级毛片 | 大白屁股日本女人视频 | 欧美成本人视频 | 亚洲精品午夜成人片DY888 | www.777av |