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

2、 mybatis-flex代碼生成器
在 mybatis-flex 中,有了一個(gè)名稱(chēng)為 mybatis-flex-codegen 的模塊,提供了可以通過(guò)數(shù)據(jù)庫(kù)表,生成代碼的功能。
當(dāng)我們把數(shù)據(jù)庫(kù)表設(shè)計(jì)完成后, 就可以使用其快速生成 Entity、 Mapper、 Service、 Controller 等產(chǎn)物。
除此之外,我們還可以通過(guò)擴(kuò)展生成更多的產(chǎn)物,文檔參考 #添加其他產(chǎn)物的生成。
2.1、引入依賴(lài)
注意使用的是Springboot3的
<dependency>
<groupId>com.mybatis-flex</groupId>
<artifactId>mybatis-flex-spring-boot3-starter</artifactId>
<version>1.11.0</version>
</dependency>
還需要引入相關(guān)依賴(lài)
<!-- 代碼生成模塊 -->
<dependency>
<groupId>com.mybatis-flex</groupId>
<artifactId>mybatis-flex-codegen</artifactId>
<version>1.11.0</version>
</dependency>
<!-- 數(shù)據(jù)庫(kù)連接池 -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</dependency>
2.2、開(kāi)發(fā)生成器
在根包下新建 generator 包,新建 MyBatisCodeGenerator 類(lèi),編寫(xiě)代碼生成器。先從官方復(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();
// 通過(guò) datasource 和 globalConfig 創(chuàng)建代碼生成器
Generator generator = new Generator(dataSource, globalConfig);
// 生成代碼
generator.generate();
}
// 詳細(xì)配置見(jiàn):https://mybatis-flex.com/zh/others/codegen.html
public static GlobalConfig createGlobalConfig() {
// 創(chuàng)建配置內(nèi)容
GlobalConfig globalConfig = new GlobalConfig();
// 設(shè)置根包,建議先生成到一個(gè)臨時(shí)目錄下,生成代碼后,再移動(dòng)到項(xiàng)目目錄下
globalConfig.getPackageConfig()
.setBasePackage("com.yupi.yuaicodemother.genresult");
// 設(shè)置表前綴和只生成哪些表,setGenerateTable 未配置時(shí),生成所有表
globalConfig.getStrategyConfig()
.setGenerateTable(TABLE_NAMES)
// 設(shè)置邏輯刪除的默認(rèn)字段名稱(chēng)
.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è)置生成時(shí)間和字符串為空,避免多余的代碼改動(dòng)
globalConfig.getJavadocConfig()
.setAuthor("<a href=\"https://github.com/liyupi\">程序員魚(yú)皮</a>")
.setSince("");
return globalConfig;
}
}
上述代碼中,我們從配置文件中獲取數(shù)據(jù)庫(kù)連接信息,用來(lái)初始化數(shù)據(jù)源。然后自定義了一些生成配置,包括:
- 指定邏輯刪除字段中
- 使用的 JDK 版本
- 生成的代碼放到哪個(gè)包(建議選擇一個(gè)獨(dú)立的包,不要跟老代碼混一起)
- 要生成哪些文件
- 生成什么代碼注釋
2.3、執(zhí)行代碼生成器
查看結(jié)果

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

