Mybatis Flex代碼生成器詳解
1、什么是Mybatis Flex
MyBatis-Flex是一個優(yōu)雅的 MyBatis增強框架
MyBatis-Flex 是一個優(yōu)雅的 MyBatis 增強框架,它非常輕量、同時擁有極高的性能與靈活性。
我們可以輕松的使用 Mybaits-Flex 鏈接任何數(shù)據(jù)庫,其內(nèi)置的 QueryWrapper^亮點 幫助我們極大的減少了 SQL 編寫的工作的同時,減少出錯的可能性。
總而言之,MyBatis-Flex 能夠極大地提高我們的開發(fā)效率和開發(fā)體驗,讓我們有更多的時間專注于自己的事情。
MyBatis-Flex特征
他的作用和Mybatis Flex一樣,都是對傳統(tǒng)操作數(shù)據(jù)庫的Mybatis框架進行增加。
他的三大優(yōu)勢:
1、輕量
除了 MyBatis,沒有任何第三方依賴輕依賴、沒有任何攔截器,其原理是通過 SqlProvider 的方式實現(xiàn)的輕實現(xiàn)。同時,在執(zhí)行的過程中,沒有任何的 Sql 解析(Parse)輕運行。
這帶來了幾個好處:
- 1、極高的性能;
- 2、極易對代碼進行跟蹤和調(diào)試;
- 3、更高的把控性。
2、靈活
支持 Entity 的增刪改查、以及分頁查詢的同時,MyBatis-Flex 提供了 Db + Row^靈活 工具,可以無需實體類對數(shù)據(jù)庫進行增刪改查以及分頁查詢。 與此同時,MyBatis-Flex 內(nèi)置的 QueryWrapper^靈活 可以輕易的幫助我們實現(xiàn) 多表查詢、鏈接查詢、子查詢 等等常見的 SQL 場景。
3、強大
支持任意關(guān)系型數(shù)據(jù)庫,還可以通過方言持續(xù)擴展,同時支持 多(復(fù)合)主鍵、邏輯刪除、樂觀鎖配置、數(shù)據(jù)脫敏、數(shù)據(jù)審計、 數(shù)據(jù)填充 等等功能。

2、 mybatis-flex代碼生成器
在 mybatis-flex 中,有了一個名稱為 mybatis-flex-codegen 的模塊,提供了可以通過數(shù)據(jù)庫表,生成代碼的功能。
當(dāng)我們把數(shù)據(jù)庫表設(shè)計完成后, 就可以使用其快速生成 Entity、 Mapper、 Service、 Controller 等產(chǎn)物。
除此之外,我們還可以通過擴展生成更多的產(chǎn)物,文檔參考 #添加其他產(chǎn)物的生成。
2.1、引入依賴
注意使用的是Springboot3的
<dependency>
<groupId>com.mybatis-flex</groupId>
<artifactId>mybatis-flex-spring-boot3-starter</artifactId>
<version>1.11.0</version>
</dependency>
還需要引入相關(guān)依賴
<!-- 代碼生成模塊 -->
<dependency>
<groupId>com.mybatis-flex</groupId>
<artifactId>mybatis-flex-codegen</artifactId>
<version>1.11.0</version>
</dependency>
<!-- 數(shù)據(jù)庫連接池 -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</dependency>
2.2、開發(fā)生成器
在根包下新建 generator 包,新建 MyBatisCodeGenerator 類,編寫代碼生成器。先從官方復(fù)制示例代碼,然后按需修改即可。
public class MyBatisCodeGenerator {
// 需要生成的表名
private static final String[] TABLE_NAMES = {"user"};
public static void main(String[] args) {
// 獲取數(shù)據(jù)源信息
Dict dict = YamlUtil.loadByPath("application.yml");
Map<String, Object> dataSourceConfig = dict.getByPath("spring.datasource");
String url = String.valueOf(dataSourceConfig.get("url"));
String username = String.valueOf(dataSourceConfig.get("username"));
String password = String.valueOf(dataSourceConfig.get("password"));
// 配置數(shù)據(jù)源
HikariDataSource dataSource = new HikariDataSource();
dataSource.setJdbcUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
// 創(chuàng)建配置內(nèi)容
GlobalConfig globalConfig = createGlobalConfig();
// 通過 datasource 和 globalConfig 創(chuàng)建代碼生成器
Generator generator = new Generator(dataSource, globalConfig);
// 生成代碼
generator.generate();
}
// 詳細配置見:https://mybatis-flex.com/zh/others/codegen.html
public static GlobalConfig createGlobalConfig() {
// 創(chuàng)建配置內(nèi)容
GlobalConfig globalConfig = new GlobalConfig();
// 設(shè)置根包,建議先生成到一個臨時目錄下,生成代碼后,再移動到項目目錄下
globalConfig.getPackageConfig()
.setBasePackage("com.yupi.yuaicodemother.genresult");
// 設(shè)置表前綴和只生成哪些表,setGenerateTable 未配置時,生成所有表
globalConfig.getStrategyConfig()
.setGenerateTable(TABLE_NAMES)
// 設(shè)置邏輯刪除的默認字段名稱
.setLogicDeleteColumn("isDelete");
// 設(shè)置生成 entity 并啟用 Lombok
globalConfig.enableEntity()
.setWithLombok(true)
.setJdkVersion(21);
// 設(shè)置生成 mapper
globalConfig.enableMapper();
globalConfig.enableMapperXml();
// 設(shè)置生成 service
globalConfig.enableService();
globalConfig.enableServiceImpl();
// 設(shè)置生成 controller
globalConfig.enableController();
// 設(shè)置生成時間和字符串為空,避免多余的代碼改動
globalConfig.getJavadocConfig()
.setAuthor("<a href=\"https://github.com/liyupi\">程序員魚皮</a>")
.setSince("");
return globalConfig;
}
}
上述代碼中,我們從配置文件中獲取數(shù)據(jù)庫連接信息,用來初始化數(shù)據(jù)源。然后自定義了一些生成配置,包括:
- 指定邏輯刪除字段中
- 使用的 JDK 版本
- 生成的代碼放到哪個包(建議選擇一個獨立的包,不要跟老代碼混一起)
- 要生成哪些文件
- 生成什么代碼注釋
2.3、執(zhí)行代碼生成器
查看結(jié)果

擴展思路-自定義代碼生成:
可以參考 官方文檔,通過自定義模板的方式更靈活地控制代碼生成的內(nèi)容,比如設(shè)置主鍵自增策略、增加 Controller 層生成的接口等等。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring Security OAuth2認證授權(quán)示例詳解
這篇文章主要介紹了Spring Security OAuth2認證授權(quán)示例詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-09-09
Java8函數(shù)式接口Predicate用法示例詳解
這篇文章主要為大家介紹了Java8函數(shù)式接口Predicate用法示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-07-07
SpringCloud Eureka服務(wù)的基本配置和操作方法
Eureka是Netflix開源的一個基于REST的服務(wù)治理框架,主要用于實現(xiàn)微服務(wù)架構(gòu)中的服務(wù)注冊與發(fā)現(xiàn),Eureka是Netflix開源的服務(wù)發(fā)現(xiàn)框架,用于在分布式系統(tǒng)中實現(xiàn)服務(wù)的自動注冊與發(fā)現(xiàn),本文介紹SpringCloud Eureka服務(wù)的基本配置和操作方法,感興趣的朋友一起看看吧2023-12-12
SpringMVC的處理器攔截器HandlerInterceptor詳解
這篇文章主要介紹了SpringMVC的處理器攔截器HandlerInterceptor詳解,SpringWebMVC的處理器攔截器,類似于Servlet開發(fā)中的過濾器Filter,用于處理器進行預(yù)處理和后處理,需要的朋友可以參考下2024-01-01
Spring Cloud Gateway內(nèi)置的斷言和過濾器作用說明
這篇文章主要介紹了Spring Cloud Gateway內(nèi)置的斷言和過濾器作用說明,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06
Spring工程中集成多個redis數(shù)據(jù)源的思路詳解
Spring項目集成雙Redis數(shù)據(jù)源需配置兩個連接工廠與RedisTemplate,通過@Primary指定默認Bean,@Qualifier注入特定Bean,支持集群環(huán)境,本文給大家介紹Spring工程中集成多個redis數(shù)據(jù)源的相關(guān)知識,感興趣的朋友一起看看吧2025-07-07
關(guān)于SpingMVC的<context:component-scan>包掃描踩坑記錄
這篇文章主要介紹了關(guān)于SpingMVC的<context:component-scan>包掃描踩坑記錄,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-03-03

