AI 大模型评测平台选 MyBatis Flex 而不是 MyBatis Plus,核心原因是 Flex 更轻、和 Spring Boot 3 兼容性好、QueryWrapper 风格更贴近原生 SQL,而 Plus 依赖较重、和 MyBatis 版本有耦合风险。评测平台 ORM 需求简单——评测记录的增删改查和分页,Flex 够用且引入负担小。选 Flex 不是因为它全面胜过 Plus,而是因为它刚好够用且负担小。
一、MyBatis Flex 和 MyBatis Plus 的核心差异
| 对比项 | MyBatis Flex | MyBatis Plus |
|---|---|---|
| 维护方 | MyBatis 官方生态延伸 | Baomidou 社区 |
| 依赖体量 | 轻量,引入少 | 较重,功能多 |
| QueryWrapper | 链式、贴近 SQL 语义 | Lambda 链式 + 条件构造 |
| MyBatis 版本耦合 | 独立,冲突少 | 有版本绑定风险 |
| 逻辑删除/乐观锁 | 内置 | 内置 |
| 代码生成 | 有,灵活 | 有,模板化 |
| 分页 | 内置 Page | 内置 Page |
| Spring Boot 3 | 原生兼容 | 需 3.5.x+ 适配 |
| 注解 | @Table / @Column | @TableName / @TableField |
两者的定位不同。Flex 走「轻量、贴近原生 MyBatis」路线,Plus 走「功能全面、开箱即用」路线。功能多不一定是好事——评测平台只需要增删改查和分页,Plus 那些多租户、数据权限、动态表名的功能完全用不上,引入了反而是负担。
二、评测平台为什么选 Flex
- 依赖轻:评测平台 ORM 场景就是评测记录的增删改查和分页,用不到 Plus 的大量附加功能,Flex 引入少、包体小;
- Spring Boot 3 友好:项目是 Spring Boot 3 + JDK 17,Flex 原生兼容,Plus 在版本适配上有过坑(3.5.x 之前对 Spring Boot 3 支持不完整);
- QueryWrapper 语义清晰:链式写法贴近 SQL,复杂查询好读,团队上手快;
- 和 MyBatis 无版本冲突:Flex 独立性强,不绑定特定 MyBatis 版本,依赖管理省心。
Flex 查询示例:
@Table("eval_record")
public class EvalRecord {
@Id
private Long id;
private String modelName;
private String prompt;
private String result;
private BigDecimal cost;
private LocalDateTime createdAt;
}
// 链式查询:按模型名查最近 20 条
List<EvalRecord> latest = QueryWrapper.create()
.where(EVAL_RECORD.MODEL_NAME.eq("gpt-4o"))
.orderBy(EVAL_RECORD.CREATED_AT.desc())
.limit(20)
.toEntityList(EvalRecord.class);
QueryWrapper 的链式写法几乎和 SQL 一一对应——where 是条件、orderBy 是排序、limit 是限制条数。相比 Plus 的 Lambda 链式,Flex 的写法对熟悉 SQL 的开发者更直觉,看代码就知道生成的 SQL 长什么样。
三、分页怎么用
评测平台需要分页展示评测记录列表。Flex 内置 Page 对象,配合 QueryWrapper 使用:
Page<EvalRecord> page = QueryWrapper.create()
.where(EVAL_RECORD.MODEL_NAME.eq(modelName))
.orderBy(EVAL_RECORD.CREATED_AT.desc())
.toEntityPage(EvalRecord.class, 1, 20); // 第1页,每页20条
返回的 Page 对象包含当前页数据和总条数,前端直接拿来做分页控件。Flex 的分页会自动生成 COUNT 语句,不需要手写。
四、什么时候该选 MyBatis Plus
- 团队已经深度用 Plus,迁移成本高于收益;
- 需要大量开箱即用的附加功能(数据权限、多租户、动态表名);
- 项目还在 Spring Boot 2.x,Plus 在那个生态更成熟。
评测平台是新项目、新栈、ORM 需求简单,Flex 是更省事的选择。如果评测平台后续要加多租户(按团队隔离评测记录),Plus 的数据权限功能可能更方便,到那时再评估迁移也不迟——技术选型不是一次定死的,是按需求演进调整的。
五、一个容易踩的点
Flex 的 @Table 注解和 Plus 的 @TableName 不一样,字段映射也用 @Column 不是 Plus 的 @TableField。如果从 Plus 迁移到 Flex,注解不能照搬,要逐个改。Flex 还支持用 @Id 标记主键,Plus 用 @TableId,混用会报映射失败。迁移时建议写个脚本批量替换注解,手动改容易漏。
常见问题
Q1:Flex 有分页插件吗?
有。内置 Page 分页,和 Spring Data Pageable 也能对接。
Q2:Flex 能做联表查询吗?
能。QueryWrapper 支持 join,复杂联表也可写 XML 映射。
Q3:Plus 项目能平滑换 Flex 吗?
不完全能。注解和 API 不同,需要逐表迁移,建议新项目用 Flex。
Q4:Flex 对 Spring Boot 3 支持好吗?
好。Flex 原生兼容 Spring Boot 3,没有适配坑。