在 Java 持久层框架领域,MyBatis 因其灵活性和对 SQL 的直接掌控而备受开发者喜爱。但在实际项目开发中,编写大量重复的 CRUD(增删改查)代码往往成为效率瓶颈。为此,一系列增强框架应运而生,而 MyBatis-Flex 以其优雅的设计、轻量的架构和卓越的性能,成为了一个值得关注的新选择。
MyBatis-Flex 的核心目标是提升开发效率与编码体验,让开发者能更专注于业务逻辑。它通过内置的 QueryWrapper 提供类型安全的查询构建方式,大幅减少了手写 SQL 的繁琐和潜在错误。同时,它完全兼容原生 MyBatis 的所有功能,真正做到了“只增强,不替代”。

MyBatis-Flex 的核心特点
- 极致轻量:框架本身除了 MyBatis 外无任何第三方依赖,其增强功能通过 SqlProvider 实现,运行时无需 SQL 解析,从依赖到运行都保持轻量化。
- 功能灵活:全面支持多主键、复杂多表查询、逻辑删除、乐观锁、数据脱敏与加密、多数据源与分库分表、字段权限、多租户、SQL审计等大量企业级特性,且这些功能均为免费提供。
- 性能卓越:得益于独特的技术架构,MyBatis-Flex 在增删改查等核心操作上的性能,据测试可比同类框架高出数倍。
- 纯粹增强:在提供便捷的 CRUD、分页、批量操作的同时,绝不阉割或限制 MyBatis 原有的任何能力。
MyBatis-Flex 与同类框架对比
此处主要对比 MyBatis-Plus 与 Fluent-MyBatis。
功能对比一览
| 功能或特点 |
MyBatis-Flex |
MyBatis-Plus |
Fluent-MyBatis |
| 基础增删改查 |
✅ |
✅ |
✅ |
| 分页查询 |
✅ |
✅ |
✅ |
| 分页查询无SQL解析 |
✅ |
❌ |
✅ |
| 多表查询(from多表) |
✅ |
❌ |
❌ |
| 多表查询(join操作) |
✅ |
❌ |
✅ |
| 支持多主键/复合主键 |
✅ |
❌ |
❌ |
| 无第三方依赖(仅MyBatis) |
✅ |
❌ |
❌ |
| QueryWrapper支持RPC传输 |
✅ |
❌ |
未知 |
| 逻辑删除、乐观锁 |
✅ |
✅ |
✅ |
| SQL审计 |
✅ |
❌ |
❌ |
| 数据脱敏、字段加密 |
✅ |
收费功能 |
❌ |
| 字段权限 |
✅ |
收费功能 |
❌ |
| 多数据源支持 |
✅ |
需借助其他框架 |
❌ |
| 多租户 |
✅ |
✅ |
❌ |
性能对比
根据官方提供的基准测试结果:
- 单条数据查询速度,MyBatis-Flex 约为 MyBatis-Plus 的 5~10+ 倍。
- 10条数据查询速度,约为 5~10 倍。
- 分页查询速度,约为 5~10 倍。
- 数据更新速度,约为 5~10+ 倍。
详细性能测试数据可参阅:MyBatis-Flex 性能基准测试报告
支持的数据库类型
MyBatis-Flex 支持广泛的数据库,并可通过自定义方言持续扩展。以下为部分支持的数据库列表:
- MySQL, MariaDB
- Oracle, PostgreSQL
- SQL Server, DB2
- 达梦(DM), 人大金仓(KingbaseES)
- ClickHouse, OceanBase
- 华为openGauss, TDengine
- ...(更多数据库详见官方文档)
快速开始指南
下面通过一个简单的例子,展示如何在 Spring Boot 项目中集成 MyBatis-Flex。
第 1 步:创建示例表
CREATE TABLE IF NOT EXISTS `tb_account` (
`id` INTEGER PRIMARY KEY auto_increment,
`user_name` VARCHAR(100),
`age` INTEGER,
`birthday` DATETIME
);
INSERT INTO tb_account(id, user_name, age, birthday)
VALUES (1, '张三', 18, '2020-01-11'),
(2, '李四', 19, '2021-03-21');
第 2 步:添加 Maven 依赖
<dependencies>
<dependency>
<groupId>com.mybatis-flex</groupId>
<artifactId>mybatis-flex-spring-boot-starter</artifactId>
<version>1.5.3</version>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
</dependency>
<!-- 测试依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
第 3 步:配置应用
在 application.yml 中配置数据源:
spring:
datasource:
url: jdbc:mysql://localhost:3306/flex_test
username: root
password: 12345678
在启动类上添加 @MapperScan 注解扫描 Mapper。
第 4 步:编写实体类与 Mapper 接口
@Data
@Table("tb_account")
public class Account {
@Id(keyType = KeyType.Auto)
private Long id;
private String userName;
private Integer age;
private Date birthday;
}
public interface AccountMapper extends BaseMapper<Account> {
}
第 5 步:进行查询测试
import static com.mybatisflex.test.entity.table.AccountTableDef.ACCOUNT;
@SpringBootTest
class MybatisFlexTestApplicationTests {
@Autowired
private AccountMapper accountMapper;
@Test
void testQuery() {
QueryWrapper queryWrapper = QueryWrapper.create()
.select()
.where(ACCOUNT.AGE.eq(18));
Account account = accountMapper.selectOneByQuery(queryWrapper);
System.out.println(account);
}
}
执行测试,控制台将输出查询到的实体信息。其中 ACCOUNT 为框架通过 APT 自动生成的表定义对象,无需手动编码。
总结
MyBatis-Flex 凭借其 轻量级设计、丰富的企业级功能、显著的性能优势 以及 “增强而非限制” 的理念,为 Java 持久层开发提供了新的高效选择。它免费提供了诸多其他框架需付费的高级特性,极大地简化了复杂场景下的开发工作。
如果你正在评估或寻找一个更现代、高性能的 MyBatis 增强方案,MyBatis-Flex 值得一试。
官方资源: