MyBatis-Plus 可視化代碼生成器來啦,讓你的開發效率大大提速!!

来源:https://www.cnblogs.com/javastack/archive/2023/05/22/17420589.html
-Advertisement-
Play Games

## **前言** 在基於Mybatis的開發模式中,很多開發者還會選擇Mybatis-Plus來輔助功能開發,以此提高開發的效率。雖然Mybatis也有代碼生成的工具,但Mybatis-Plus由於在Mybatis基礎上做了一些調整,因此,常規的生成工具生成的代碼還有一些不太符合預期。而且對於多數 ...


前言

在基於Mybatis的開發模式中,很多開發者還會選擇Mybatis-Plus來輔助功能開發,以此提高開發的效率。雖然Mybatis也有代碼生成的工具,但Mybatis-Plus由於在Mybatis基礎上做了一些調整,因此,常規的生成工具生成的代碼還有一些不太符合預期。而且對於多資料庫的支持不是很好。

因此,我們需要一款支持高度定製化,帶圖形UI頁面,能適配多數資料庫的基礎程式生成框架。本文就介紹這款基於Mybatis-Plus的代碼自助生成器,github地址:mybatis-plus-generator-ui。

文章通過實例集成的方式來詳細講解mybatis-plus-generator-ui,感興趣的朋友可以自己clone下來,也可以自己進行擴展自定義。

一、mybatis-plus-generator-ui是什麼?

它是對mybatis-plus-generator進行封裝,通過Web UI快速生成相容Spring boot,mybatis-plus框架的各類業務代碼。提供互動式的Web UI用於生成相容mybatis-plus框架的相關功能代碼,包括Entity、Mapper、Mapper.xml、Service、Controller等,可以自定義模板以及各類輸出參數,也可通過SQL查詢語句直接生成代碼。

功能列表:

  • Table查詢: 查詢配置的關係型資料庫表的列表查詢。
  • 輸出配置: 對需要生成的相關代碼,比如Entity、Mapper、Servcie、Controller等代碼模板信息進行配置,用於在轉換時調用。
  • 項目導入: 可以導入其它項目配置好的信息給本項目使用。
  • 下載模板: 支持本項目配置的模板信息下載後共用。
  • 策略配置: 直接定義各種文件的生成策略。
  • 模板上傳: 支持從別的項目中下載模板,同上傳供本項目使用。
  • SQL輸入上傳: 支持將查詢語句直接上傳或者複製到輸入框中。
  • SQL代碼生成: 基於SQL腳本生成相應的代碼。

二、 mybatis-plus-generator-ui怎麼用?

mybatis-plus-generator-ui提供以jar包的形式為外部項目提供服務,通過配置的資料庫配置去讀取資料庫的配置信息,並通過Web UI的方式提供給開發者使用。mybatis-plus-generator-ui支持POSTGRE_SQL、ORACLE、DB2、MySQL、SQLSERVER等常見的關係型資料庫。

推薦一個開源免費的 Spring Boot 最全教程:

https://github.com/javastacks/spring-boot-best-practice

1、maven pom引入

<project xmlns="http://maven.apache.org/POM/4.0.0"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 <modelVersion>4.0.0</modelVersion>
 <groupId>com.yelang</groupId>
 <artifactId>mybatis-plus-generator-ui-case</artifactId>
 <version>0.0.1-SNAPSHOT</version>

 <dependencies>
  <dependency>
   <groupId>com.github.davidfantasy</groupId>
   <artifactId>mybatis-plus-generator-ui</artifactId>
   <version>1.4.5</version>
  </dependency>

  <dependency>
   <groupId>org.postgresql</groupId>
   <artifactId>postgresql</artifactId>
   <version>42.2.25</version>
  </dependency>
 </dependencies>
</project>

2、新建程式入口,以main函數的方式運行

mybatis-plus-generator-ui在1.4.0版本之後,可支持將GeberatorUIServer獨立部署為一個單獨的spring boot項目,通過頁面指定目標項目根目錄的方式為多個項目提供源碼生成服務。這種方式適用於有多個項目庫需要獨立進行開發的模式。實例關鍵代碼如下:

package com.yelang;

import com.github.davidfantasy.mybatisplus.generatorui.GeneratorConfig;
import com.github.davidfantasy.mybatisplus.generatorui.MybatisPlusToolsApplication;
import com.github.davidfantasy.mybatisplus.generatorui.mbp.NameConverter;

public class GeneratorMain {

 public static void main(String[] args) {
  GeneratorConfig config = GeneratorConfig.builder().jdbcUrl("jdbc:postgresql://127.0.0.1:5432/ghyapp")
    .userName("ghy01").password("ghy01").driverClassName("org.postgresql.Driver")
    // 資料庫schema,POSTGRE_SQL,ORACLE,DB2類型的資料庫需要指定
    // .schemaName("myBusiness")
    // 如果需要修改各類生成文件的預設命名規則,可自定義一個NameConverter實例,覆蓋相應的名稱轉換方法:
    .nameConverter(new NameConverter() {
     /**
      * 自定義Service類文件的名稱規則
      */
     public String serviceNameConvert(String tableName) {
      return this.entityNameConvert(tableName) + "Service";
     }

     /**
      * 自定義Controller類文件的名稱規則
      */
     public String controllerNameConvert(String tableName) {
      return this.entityNameConvert(tableName) + "Action";
     }
    }).basePackage("com.github.davidfantasy.mybatisplustools.example").port(8068).build();

  MybatisPlusToolsApplication.run(config);

 }

}

在上面的配置中,我們連接的示例資料庫是PostgerSQL,需要在Maven中定義相應的驅動程式,並且在上述代碼中正確配置相應的類。最後指定了程式的運行埠為8086,這種運行方式跟SpringBoot非常相似。

3、實例運行

運行以上的main方法,在控制台可以看到以下輸出即為成功部署。

在輸出的日誌中,可以看到程式的運行埠,以及預設的模板目錄地址。在瀏覽器中輸入訪問地址http://localhost:8068/,即可進行配置生成。

三、mybatis-plus-generator-ui代碼生成

1、Table的查詢和瀏覽

可以直接瀏覽和查詢配置的數據源的數據表信息,可選擇一個或多個生成模板代碼。

2、輸出配置

內置Entity、Mapper、Service、Controller等6種類型代碼的模板配置,可以上傳模板進行替換,並修改各類參數,配置參數已經按照影響的文件類型重新進行了分類,並加入了部分文本說明;也可以自行添加其它類型的自定義輸出文件。所有的配置項都會按照項目包名進行保存,只需一次性設置就可以了。

3、策略配置

將每次生成代碼時可能變動的內容加入到代碼生成選項中,方便調整每次的生成策略,比如:是否覆蓋原文件,生成文件的種類等等:

4、SQL配置生成

通過輸入查詢SQL,可自動在Mapper(Xml及Java)中生成對應的查詢方法,DTO對象和ResultMap(結果集映射配置)

5、代碼生成

四、自定義擴展

1、相關模板調整

在相關的頁面中,可以進行相應的調整,在對應的btl模板中下載對應文件的具體模板,使用文本工具打開,直接修改源代碼,文中取一種方式示例,其它方式一樣。

2、代碼層級的配置

在一些團隊中,肯定對Mapper的定義為Dao,Controller層需要定義為Action,通過修改代碼模板btl的方式是可以的,還有一種方式是通過調整內部映射的方式來進行修改。主要使用的類是NameConverter。

/**
* 自定義Service類文件的名稱規則
*/
public String serviceNameConvert(String tableName) {
 return this.entityNameConvert(tableName) + "Service";
}

/**
* 自定義Controller類文件的名稱規則
*/
public String controllerNameConvert(String tableName) {
  return this.entityNameConvert(tableName) + "Action";
}

除了Service、Controller、Entity、FieldName都可以實現自定義的擴展。下麵是NameConverter類的核心代碼,這裡有詳細的定義。

package com.github.davidfantasy.mybatisplus.generatorui.mbp;

import cn.hutool.core.util.StrUtil;
import com.github.davidfantasy.mybatisplus.generatorui.dto.Constant;
import com.google.common.base.Strings;

import static com.github.davidfantasy.mybatisplus.generatorui.dto.Constant.DOT_JAVA;
import static com.github.davidfantasy.mybatisplus.generatorui.dto.Constant.DOT_XML;

/**
 * 自定義各類名稱轉換的規則
 */
public interface NameConverter {

    /**
     * 自定義Entity.java的類名稱
     *
     * @param tableName 表名稱
     * @return
     */
    default String entityNameConvert(String tableName) {
        if (Strings.isNullOrEmpty(tableName)) {
            return "";
        }
        tableName = tableName.substring(tableName.indexOf(StrUtil.UNDERLINE) + 1, tableName.length());
        return StrUtil.upperFirst(StrUtil.toCamelCase(tableName.toLowerCase()));
    }

    /**
     * 自定義表欄位名到實體類屬性名的轉換規則
     *
     * @param fieldName 表欄位名稱
     * @return
     */
    default String propertyNameConvert(String fieldName) {
        if (Strings.isNullOrEmpty(fieldName)) {
            return "";
        }
        if (fieldName.contains("_")) {
            return StrUtil.toCamelCase(fieldName.toLowerCase());
        }
        return fieldName;
    }

    /**
     * 自定義Mapper.java的類名稱
     */
    default String mapperNameConvert(String tableName) {
        return entityNameConvert(tableName) + "Mapper";
    }

    /**
     * 自定義Mapper.xml的文件名稱
     */
    default String mapperXmlNameConvert(String tableName) {
        return entityNameConvert(tableName) + "Mapper";
    }

    /**
     * 自定義Service.java的類名稱
     */
    default String serviceNameConvert(String tableName) {
        return "I" + entityNameConvert(tableName) + "Service";
    }

    /**
     * 自定義ServiceImpl.java的類名稱
     */
    default String serviceImplNameConvert(String tableName) {
        return entityNameConvert(tableName) + "ServiceImpl";
    }

    /**
     * 自定義Controller.java的類名稱
     */
    default String controllerNameConvert(String tableName) {
        return entityNameConvert(tableName) + "Controller";
    }

    /**
     * 自定義其它生成文件的文件名(不包括entity,mapper.java,mapper.xml,service,serviceImpl,controller這6種)
     *
     * @param fileType  在頁面上輸入的輸出文件標識
     * @param tableName 關聯的數據表名稱名稱
     * @return 生成文件的名稱,帶尾碼
     */
    default String outputFileNameConvert(String fileType, String tableName) {
        if (fileType.equals(Constant.FILE_TYPE_ENTITY)) {
            return this.entityNameConvert(tableName) + DOT_JAVA;
        } else if (fileType.equals(Constant.FILE_TYPE_MAPPER)) {
            return this.mapperNameConvert(tableName) + DOT_JAVA;
        } else if (fileType.equals(Constant.FILE_TYPE_MAPPER_XML)) {
            return this.mapperXmlNameConvert(tableName) + DOT_XML;
        } else if (fileType.equals(Constant.FILE_TYPE_SERVICE)) {
            return this.serviceNameConvert(tableName) + DOT_JAVA;
        } else if (fileType.equals(Constant.FILE_TYPE_SERVICEIMPL)) {
            return this.serviceImplNameConvert(tableName) + DOT_JAVA;
        } else if (fileType.equals(Constant.FILE_TYPE_CONTROLLER)) {
            return this.controllerNameConvert(tableName) + DOT_JAVA;
        }
        return this.entityNameConvert(tableName) + fileType;
    }

}

mybatis-plus-generator-ui的功能非常豐富,甚至針對ui都是可以自定義修改的。如果需要定製UI的話,將代碼clone下來後,進入到frontend目錄下,進行相應的擴展開發。

修改完成後,需要另行編譯src\frontend中的靜態資源(源碼中不包含已編譯的頁面),在src\frontend文件夾中執行:

yarn install
yarn run build

五、總結

以上就是今天要講的內容,本文簡要介紹一款基於Mybatis-Plus的代碼自助生成器,地址:

https://github.com/davidfantasy/mybatis-plus-generator-ui

文章通過實例集成的方式來詳細講解mybatis-plus-generator-ui,從相關概念到實際集成案例,以及具體的擴展開發介紹。如果在工作中有這種需要,不妨採用這種方式。希望本文對您有所幫助,歡迎指導交流。

原文鏈接:https://blog.csdn.net/yelangkingwuzuhu/article/details/128077533

版權聲明:本文為CSDN博主「夜郎king」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。

近期熱文推薦:

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

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

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

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

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

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


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

-Advertisement-
Play Games
更多相關文章
  • 話說兄弟們,女朋友生氣了都是怎麼哄的? 不會吧不會吧,不會有人還是單身狗吧! 算了,還是回到正題吧,再說我要挨打了~ 今天咱們來交流一下程式員是怎麼哄女朋友的,話不多說直接開始! 準備工作 1、環境 首先我們準備好環境和編輯器,我使用的是: Python 3.8 解釋器 Pycharm 編輯器 2、 ...
  • 雖然PDF文件適合用於列印和發佈,但不適合所有類型的文檔。例如,包含複雜圖表和圖形的文檔可能無法在PDF中呈現得很好。但是HTML文件可以在任何可運行瀏覽器的電腦上進行閱讀並顯示。並且HTML還具有占用伺服器資源較小,便於搜索引擎收錄的特點。那麼今天這篇文章就將展示如何通過Java應用程式將PDF ...
  • 你好!我是[@馬哥python說](https://www.zhihu.com/people/13273183132),一枚10年程式猿👨🏻‍💻,正在試錯用pyecharts開發可視化大屏的非常規排版。 以下,我用8種ThemeType展示的同一個可視化數據大屏。 **1、SHINE主題** ...
  • 前文我們說過了BIO,今天我們聊聊NIO。NIO 是什麼?NIO官方解釋它為New lO,由於其特性我們也稱之為,Non-Blocking IO。這是jdk1.4之後新增的一套IO標準。為什麼要用NIO呢?我們再簡單回顧下BIO:阻塞式IO,原理很簡單,其實就是多個端點與服務端進行通信時,每個客戶端 ...
  • # 前置需求 一臺電腦(我用的是Windows),有網 # 第一步:下載並安裝 去java官網下載開發版java(考慮到可能有小白,我暫且這麼說) java官網下載鏈接:https://www.oracle.com/java/technologies/downloads/ 寫隨筆時間為2023、05 ...
  • ## 初步瞭解 ### 總體架構設計 Mybatis 整體框架如下: ![img](https://zhangjiahao-blog.oss-cn-beijing.aliyuncs.com/picgo/202305161021323.png) ##### 介面層 MyBatis 和資料庫的交互有兩種 ...
  • ### 1. Customer.java ``` package chapter07.pinExer; // 客戶類 public class Customer { private String name; private char gender; //性別 private int age; pri ...
  • #freemodbus移植 >基於freemodbus1.6 >使用HAL庫 >軟體:stm32cubemx stm32cubeide >>後續會更新標準庫的移植。以及rtos下的移植(儘量) ##下載freemodbus1.6 這個獲取方法網上到處都是,不細說了。 ##cubemx新建工程 新建工 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...