![]()
Mybatis-Flex 是一个优雅的 Mybatis 增强框架,它非常轻量、同时拥有极高的性能与灵活性。我们可以轻松的使用 Mybaits-Flex 链接任何数据库,其内置的 QueryWrapper 帮助我们极大的减少了 SQL 编写的工作的同时,减少出错的可能性。
总而言之,Mybatis-Flex 能够极大地提高我们的开发效率和开发体验,让我们有更多的时间专注于自己的事情。
Mybatis-Flex 是一个和 Mybatis-Plus 类似的框架,但各有特点。v1.1.0 主要更新内容如下:
- 新增:Entity 的 onSet、onUpdate、onInsert 添加全局监听器的配置
- 优化:移除 QueryColumn.isNull 和 isNotNull 的参数
- 优化:重构 CustomKeyGenerator 的部分代码
- 修复:UpdateEntity 工具类在某些场景下出错的问题
- 修复:审计消息 AuditMessage 在 entity 配置 typeHandler 时,获取的参数不正确的问题
- 文档:添加 entity 全局监听器的相关文档
在上一个版本发布了,Mybatis-Flex 和 Mybatis-Plus 的功能对比后,应一些同学的要求,这个版本也放出了 Mybaits-Flex 和 Mybaits-Plus 性能对比的测试源码以及测试结果。
![]()
测试方法很简单
使用 h2 数据库,在初始化的时候分别为 flex 和 plus 创建两个不同的数据库, 但是完全一样的数据结构、数据内容和数据量(每个库 2w 条数据)。
直接进行预热,之后通过打印时间戳进行对比,消耗的时间越少,性能越高(每次测试 10 轮)。
测试步骤:
- 1、clone 代码。
- 2、直接运行
TestStarter 的 main 方法即可。
查询单条数据
Mybatis-Flex 的性能大概是 Mybatis-Plus 的 5 ~ 8 倍。
以下是日志,需要注意的是:每台机器的每次测试的数值肯定有所不同,但是应该会维持一个大概的比例。
---------------
>>>>>>>testFlexSelectOne:26
>>>>>>>testPlusSelectOneWithLambda:109
>>>>>>>testPlusSelectOne:119
---------------
>>>>>>>testFlexSelectOne:19
>>>>>>>testPlusSelectOneWithLambda:104
>>>>>>>testPlusSelectOne:98
---------------
>>>>>>>testFlexSelectOne:15
>>>>>>>testPlusSelectOneWithLambda:94
>>>>>>>testPlusSelectOne:95
---------------
>>>>>>>testFlexSelectOne:16
>>>>>>>testPlusSelectOneWithLambda:90
>>>>>>>testPlusSelectOne:87
---------------
>>>>>>>testFlexSelectOne:15
>>>>>>>testPlusSelectOneWithLambda:93
>>>>>>>testPlusSelectOne:55
---------------
>>>>>>>testFlexSelectOne:10
>>>>>>>testPlusSelectOneWithLambda:60
>>>>>>>testPlusSelectOne:48
---------------
>>>>>>>testFlexSelectOne:8
>>>>>>>testPlusSelectOneWithLambda:54
>>>>>>>testPlusSelectOne:51
---------------
>>>>>>>testFlexSelectOne:8
>>>>>>>testPlusSelectOneWithLambda:57
>>>>>>>testPlusSelectOne:56
---------------
>>>>>>>testFlexSelectOne:9
>>>>>>>testPlusSelectOneWithLambda:69
>>>>>>>testPlusSelectOne:55
---------------
>>>>>>>testFlexSelectOne:7
>>>>>>>testPlusSelectOneWithLambda:56
>>>>>>>testPlusSelectOne:55
查询 List 数据,限制 10 条
Mybatis-Flex 的性能大概是 Mybatis-Plus 的 5 倍左右
---------------
>>>>>>>testFlexSelectTop10:12
>>>>>>>testPlusSelectTop10WithLambda:56
>>>>>>>testPlusSelectTop10:53
---------------
>>>>>>>testFlexSelectTop10:10
>>>>>>>testPlusSelectTop10WithLambda:57
>>>>>>>testPlusSelectTop10:56
---------------
>>>>>>>testFlexSelectTop10:9
>>>>>>>testPlusSelectTop10WithLambda:51
>>>>>>>testPlusSelectTop10:47
---------------
>>>>>>>testFlexSelectTop10:9
>>>>>>>testPlusSelectTop10WithLambda:50
>>>>>>>testPlusSelectTop10:48
---------------
>>>>>>>testFlexSelectTop10:8
>>>>>>>testPlusSelectTop10WithLambda:51
>>>>>>>testPlusSelectTop10:47
---------------
>>>>>>>testFlexSelectTop10:9
>>>>>>>testPlusSelectTop10WithLambda:50
>>>>>>>testPlusSelectTop10:47
---------------
>>>>>>>testFlexSelectTop10:8
>>>>>>>testPlusSelectTop10WithLambda:50
>>>>>>>testPlusSelectTop10:49
---------------
>>>>>>>testFlexSelectTop10:7
>>>>>>>testPlusSelectTop10WithLambda:50
>>>>>>>testPlusSelectTop10:47
---------------
>>>>>>>testFlexSelectTop10:6
>>>>>>>testPlusSelectTop10WithLambda:46
>>>>>>>testPlusSelectTop10:49
---------------
>>>>>>>testFlexSelectTop10:8
>>>>>>>testPlusSelectTop10WithLambda:48
>>>>>>>testPlusSelectTop10:77
分页查询
Mybatis-Flex 的性能大概是 Mybatis-Plus 的 3~5 倍左右
---------------
>>>>>>>testFlexPaginate:63
>>>>>>>testPlusPaginate:181
---------------
>>>>>>>testFlexPaginate:47
>>>>>>>testPlusPaginate:197
---------------
>>>>>>>testFlexPaginate:37
>>>>>>>testPlusPaginate:115
---------------
>>>>>>>testFlexPaginate:31
>>>>>>>testPlusPaginate:113
---------------
>>>>>>>testFlexPaginate:29
>>>>>>>testPlusPaginate:103
---------------
>>>>>>>testFlexPaginate:27
>>>>>>>testPlusPaginate:111
---------------
>>>>>>>testFlexPaginate:24
>>>>>>>testPlusPaginate:102
---------------
>>>>>>>testFlexPaginate:23
>>>>>>>testPlusPaginate:102
---------------
>>>>>>>testFlexPaginate:23
>>>>>>>testPlusPaginate:104
---------------
>>>>>>>testFlexPaginate:21
>>>>>>>testPlusPaginate:101
数据更新
Mybatis-Flex 的性能大概是 Mybatis-Plus 的 5~10 倍左右。
---------------
>>>>>>>testFlexUpdate:11
>>>>>>>testPlusUpdate:61
---------------
>>>>>>>testFlexUpdate:10
>>>>>>>testPlusUpdate:49
---------------
>>>>>>>testFlexUpdate:6
>>>>>>>testPlusUpdate:39
---------------
>>>>>>>testFlexUpdate:5
>>>>>>>testPlusUpdate:40
---------------
>>>>>>>testFlexUpdate:5
>>>>>>>testPlusUpdate:36
---------------
>>>>>>>testFlexUpdate:5
>>>>>>>testPlusUpdate:34
---------------
>>>>>>>testFlexUpdate:6
>>>>>>>testPlusUpdate:33
---------------
>>>>>>>testFlexUpdate:4
>>>>>>>testPlusUpdate:32
---------------
>>>>>>>testFlexUpdate:4
>>>>>>>testPlusUpdate:34
---------------
>>>>>>>testFlexUpdate:5
>>>>>>>testPlusUpdate:32
相关测试源码放在 gitee 上:https://gitee.com/mybatis-flex/mybatis-benchmark ,大家可以自己运行测试源码查看自己的运行结果。
以下是 Mybaits-Flex 和 Mybaits-Plus 以及 阿里云云效团队的 Fluent-Mybatis 的一些功能对比:
| 功能或特点 |
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项目 |
❌ |
| 多租户 |
✅ |
✅ |
❌ |
更多对比细节请移步:https://mybatis-flex.com/zh/comparison.html
进一步了解 MyBatis-Flex 框架,请参考一下链接: