<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>

          推薦一個數據庫文檔生成神器

          共 16101字,需瀏覽 33分鐘

           ·

          2021-03-31 13:54

          點擊上方藍色字體,選擇“標星公眾號”

          優(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—————

          推薦閱讀:


          最近面試BAT,整理一份面試資料Java面試BAT通關手冊,覆蓋了Java核心技術、JVM、Java并發(fā)、SSM、微服務、數據庫、數據結構等等。
          獲取方式:關注公眾號并回復 java 領取,更多內容陸續(xù)奉上。
          明天見(??ω??)??
          瀏覽 43
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <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>
                  国产精品美女久久久久久 | 超碰在线免费97 | 激情色五月婷婷 | 一级黄色片网站 | 色婷婷五月天在线观看 |