
这次给大家介绍一个新的数据访问层框架 MyBatis Flex,它的作用和 MyBatis Plus 一样,都是对传统操作数据库的 MyBatis 框架进行增强。它的 3 大优势:
更轻量:MyBatis-Flex 除了 MyBatis 本身,再无任何第三方依赖,因此会带来更高的自主性、把控性和稳定性。在任何一个系统中,依赖越多,稳定性越差。 更灵活:MyBatis-Flex 提供了非常灵活的 QueryWrapper,支持关联查询、多表查询、多主键、逻辑删除、乐观锁更新、数据填充、数据脱敏等等。 更高的性能:MyBatis-Flex 通过独特的架构,没有任何 MyBatis 拦截器、在 SQL 执行的过程中,没有任何的 SQL Parse,因此会带来指数级的性能增长。 官方文档 中提到了和 MyBatis Plus 的功能对比,我认为比较有竞争力的是它 支持多表查询:
功能或特点 | MyBatis-Flex | MyBatis-Plus | Fluent-MyBatis |
|---|---|---|---|
对 entity 的基本增删改查 | ✅ | ✅ | ✅ |
分页查询 | ✅ | ✅ | ✅ |
分页查询之总量缓存 | ✅ | ✅ | ❌ |
分页查询无 SQL 解析设计(更轻量,及更高性能) | ✅ | ❌ | ✅ |
多表查询: from 多张表 | ✅ | ❌ | ❌ |
多表查询: left join、inner join 等等 | ✅ | ❌ | ✅ |
多表查询: union,union all | ✅ | ❌ | ✅ |
单主键配置 | ✅ | ✅ | ✅ |
多种 id 生成策略 | ✅ | ✅ | ✅ |
支持多主键、复合主键 | ✅ | ❌ | ❌ |
字段的 typeHandler 配置 | ✅ | ✅ | ✅ |
除了 MyBatis,无其他第三方依赖(更轻量) | ✅ | ❌ | ❌ |
QueryWrapper 是否支持在微服务项目下进行 RPC 传输 | ✅ | ❌ | 未知 |
逻辑删除 | ✅ | ✅ | ✅ |
乐观锁 | ✅ | ✅ | ✅ |
SQL 审计 | ✅ | ❌ | ❌ |
数据填充 | ✅ | ✅ | ✅ |
数据脱敏 | ✅ | ✔️ (收费) | ❌ |
字段权限 | ✅ | ✔️ (收费) | ❌ |
字段加密 | ✅ | ✔️ (收费) | ❌ |
字典回写 | ✅ | ✔️ (收费) | ❌ |
Db + Row | ✅ | ❌ | ❌ |
Entity 监听 | ✅ | ❌ | ❌ |
多数据源支持 | ✅ | 借助其他框架或收费 | ❌ |
多数据源是否支持 Spring 的事务管理,比如 @Transactional 和 TransactionTemplate 等 | ✅ | ❌ | ❌ |
多数据源是否支持 "非Spring" 项目 | ✅ | ❌ | ❌ |
多租户 | ✅ | ✅ | ❌ |
动态表名 | ✅ | ✅ | ❌ |
动态 Schema | ✅ | ❌ | ❌ |
以上内容来自第三方相关产品的官方文档或第三方平台,若有错误,欢迎纠正。
此外,在 Mybatis Flex 中,有了一个名称为 mybatis-flex-codegen 的模块,提供了可以通过数据库表,生成代码的功能。当我们把数据库表设计完成后, 就可以使用其快速生成 Entity、Mapper、Service、Controller 代码,能大幅提高我们的开发效率。
下面让我们参考 官方文档[2] 使用代码生成器。
1)引入 MyBatis Flex 依赖,注意是 Spring Boot3 的:
<dependency>
<groupId>com.mybatis-flex</groupId>
<artifactId>mybatis-flex-spring-boot3-starter</artifactId>
<version>1.11.0</version>
</dependency>还需要引入代码生成相关依赖:
<!-- 代码生成模块 -->
<dependency>
<groupId>com.mybatis-flex</groupId>
<artifactId>mybatis-flex-codegen</artifactId>
<version>1.11.0</version>
</dependency>
<!-- 数据库连接池 -->
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</dependency>2)编写数据库连接配置:
spring:
# mysql
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/ai_code_mother
username: root
password: 123456
3)开发生成器
在根包下新建 generator 包,新建 MyBatisCodeGenerator 类,编写代码生成器。先从官方复制示例代码,然后按需修改即可。
在 Mybatis Flex 的代码生成器中,支持如下 8 种类型的产物生成,只需要关注前 6 个就好:
代码如下:
package com.it666.demo.generator;
import cn.hutool.core.lang.Dict;
import cn.hutool.setting.yaml.YamlUtil;
import com.mybatisflex.codegen.Generator;
import com.mybatisflex.codegen.config.GlobalConfig;
import com.zaxxer.hikari.HikariDataSource;
import java.util.Map;
/**
* @author BNTang
* @version 1.0
* @description MyBatis代码生成器
* @since 2025/10/3 星期五
**/
public class MyBatisCodeGenerator {
// 需要生成的表名
private static final String[] TABLE_NAMES = {"user"};
public static void main(String[] args) {
// 获取数据源信息
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"));
// 配置数据源
HikariDataSource dataSource = new HikariDataSource();
dataSource.setJdbcUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
// 创建配置内容
GlobalConfig globalConfig = createGlobalConfig();
// 通过 datasource 和 globalConfig 创建代码生成器
Generator generator = new Generator(dataSource, globalConfig);
// 生成代码
generator.generate();
}
// 详细配置见:https://mybatis-flex.com/zh/others/codegen.html
public static GlobalConfig createGlobalConfig() {
// 创建配置内容
GlobalConfig globalConfig = new GlobalConfig();
// 设置根包,建议先生成到一个临时目录下,生成代码后,再移动到项目目录下
globalConfig
.getPackageConfig()
.setBasePackage("com.it666.demo.genresult");
// 设置表前缀和只生成哪些表,setGenerateTable 未配置时,生成所有表
globalConfig
.getStrategyConfig()
.setGenerateTable(TABLE_NAMES)
// 设置逻辑删除的默认字段名称
.setLogicDeleteColumn("isDelete");
// 设置生成 entity 并启用 Lombok
globalConfig
.enableEntity()
.setWithLombok(true)
.setJdkVersion(21);
// 设置生成 mapper
globalConfig.enableMapper();
globalConfig.enableMapperXml();
// 设置生成 service
globalConfig.enableService();
globalConfig.enableServiceImpl();
// 设置生成 controller
globalConfig.enableController();
// 设置生成时间和字符串为空,避免多余的代码改动
globalConfig
.getJavadocConfig()
.setAuthor("<a href=\"https://github.com/BNTang\">程序员NEO</a>")
.setSince("");
return globalConfig;
}
}上述代码中,从配置文件中获取数据库连接信息,用来初始化数据源。然后自定义了一些生成配置,包括:
4)执行代码生成器,查看生成的结果。如图:

将生成的代码文件移动到对应的包下,移动后:

5)主类添加扫描 Mapper 文件的注解:
@MapperScan("com.it666.demo.mapper")
然后就可以启动项目,验证生成代码的效果了。
[1] MyBatis Plus: https://baomidou.com
[2] 官方文档: https://mybatis-flex.com/zh/others/codegen.html
如果这篇文章帮到了你,不妨点个分享给同样需要的朋友吧! 你的每一次支持,都是我持续创作的动力!💪
往期推荐:
序号 | 文章标题 | 链接 |
|---|---|---|
1 | MCP协议爆火揭秘 | 查看详情 |
2 | 轻松配置Cursor玩转MCP | 查看详情 |
3 | Browser-Tool 前端开发神器 | 查看详情 |
4 | AI编码焕新:用Context7 | 查看详情 |
5 | NotebookLM:靠谱知识库 | 查看详情 |
6 | Spring AI 玩转多轮对话 | 查看详情 |
7 | Cursor生成UI,加一步封神 | 查看详情 |
8 | 神器!免费替代Postman | 查看详情 |