堪稱資料庫界的 Swagger!一鍵生成資料庫文檔。。。

来源:https://www.cnblogs.com/javastack/archive/2022/04/18/16160607.html
-Advertisement-
Play Games

1、簡介 在企業級開發中、我們經常會有編寫資料庫表結構文檔的時間付出,從業以來,待過幾家企業,關於資料庫表結構文檔狀態:要麼沒有、要麼有、但都是手寫、後期運維開發,需要手動進行維護到文檔中,很是繁瑣、如果忘記一次維護、就會給以後工作造成很多困擾、無形中製造了很多坑留給自己和後人,於是萌生了要自己寫一 ...


1、簡介

在企業級開發中、我們經常會有編寫資料庫表結構文檔的時間付出,從業以來,待過幾家企業,關於資料庫表結構文檔狀態:要麼沒有、要麼有、但都是手寫、後期運維開發,需要手動進行維護到文檔中,很是繁瑣、如果忘記一次維護、就會給以後工作造成很多困擾、無形中製造了很多坑留給自己和後人,於是萌生了要自己寫一個插件工具的想法

2、特點

  • 簡潔、輕量、設計良好
  • 多資料庫支持
  • 多種格式文檔
  • 靈活擴展
  • 支持自定義模板

3、資料庫支持

4、文檔生成支持

5、文檔截圖

html

word

markdwon

6、使用方式

普通方式

  • 引入依賴
<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();
   //執行生成
   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>

7、擴展模塊

pojo生成功能

  • 功能簡介

pojo生成功能是基於screw延伸出的擴展模塊,目前處於初步開發的狀態。在日常的開發中,經過需求分析、建模之後,往往會先在資料庫中建表,其次在進行代碼的開發。

那麼pojo生成功能在這個階段就可以幫助大家節省一些重覆勞動了。使用pojo生成功能可以直接根據資料庫生成對應的java pojo對象。這樣後續的修改,開發都會很方便。

  • 資料庫支持

[x] 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);
    //執行生成
    new PojoExecute(config).execute();
}

8、常見問題

  • 生成後文檔亂碼?

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驅動版本為最新即可。

項目地址:https://gitee.com/leshalv/screw

近期熱文推薦:

1.1,000+ 道 Java面試題及答案整理(2022最新版)

2.勁爆!Java 協程要來了。。。

3.Spring Boot 2.x 教程,太全了!

4.別再寫滿屏的爆爆爆炸類了,試試裝飾器模式,這才是優雅的方式!!

5.《Java開發手冊(嵩山版)》最新發佈,速速下載!

覺得不錯,別忘了隨手點贊+轉發哦!


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 對於一些帶著固定標簽的欄位來說,我們通常把它們配置到欄位中,而在資料庫中存它們的字典code,或者是字典主鍵,不是一個整型的數字,而在前端顯示時,有時需要將它們翻譯成名稱,這時後端可以幫他們進行翻譯,或者前端通過code自己使用字典翻譯;下麵說一下第一種,後端在View model中將integer ...
  • 定義 是指在讀取一行數據時,記下它的版本號、最近修改的時間戳或校驗和。然後,你可以在修改記錄之前檢查版本有沒有發生變化。 適用場景 適用於讀多寫少的場景,樂觀鎖相信事務之間的數據競爭概率較小,因此儘可能地直接做下去,直到提交的時候才去鎖定。 實現方式 取出記錄時,獲取當前 version 執行更新時 ...
  • 怎麼會有人不喜歡花呢?今天我們也來鑒定一下網路熱門植物!最近春天很多花都開了,我正好趁著清明假期到戶外踏青並拍攝 了不少花卉的照片。 由於對很多花不是特別熟悉,所以我們需要藉助軟體來識別究竟是什麼花的種類。市面上的識花軟體有很多,比如花伴侶、形 色、百度等等,我測試後發現百度的識別效果最為優秀。於是 ...
  • BlockingQueue阻塞隊列 BlockingQueue的四組API /**BlockQueue的四組API * 1.拋出異常 * 2.有返回值,不拋出異常 * 3.阻塞等待 * 4.超時等待 */public class BlockQueueTest { public static void ...
  • 前言 大家之前用python編寫過飛機大戰的部分代碼,只能夠展示英雄飛機,背景,敵機和發射子彈,今天把背景音樂,擊毀敵機,爆 炸特效,得分等等相關功能一併加入進來,代碼有點長,三百多行,你們要的代碼來了哦? 編程思路 主要使用pygame庫,類的創建,函數的調用等等來實現,話不多說,上程式。 編程實 ...
  • 反射機制雖然說增加了代碼的複雜程度但是提高代碼的靈活性,在以後的框架的學習中,配置文件的修改大部分都是利用的反射機制。和利用反射機制去做Runtime類這下麵方法exec,進行命令執行,後面去學習一下 ...
  • 官方numpy1.16.3,scipy,onnx的whl包有問題,不要直接安裝,自己編譯。 1.1安裝Python3.7 sudo apt update #檢查可更新文件 sudo apt install software-properties-common #安裝可添加源的工具 sudo add- ...
  • fastposter v2.8.0 發佈 電商海報編輯器 fastposter海報生成器,電商海報編輯器,電商海報設計器,fast快速生成海報 海報製作 海報開發。二維碼海報,圖片海報,生成分享海報 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...