MyBatis Flex入选原因解析(与 MyBatis Plus 的差异)

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

  1. 依赖轻:评测平台 ORM 场景就是评测记录的增删改查和分页,用不到 Plus 的大量附加功能,Flex 引入少、包体小;
  2. Spring Boot 3 友好:项目是 Spring Boot 3 + JDK 17,Flex 原生兼容,Plus 在版本适配上有过坑(3.5.x 之前对 Spring Boot 3 支持不完整);
  3. QueryWrapper 语义清晰:链式写法贴近 SQL,复杂查询好读,团队上手快;
  4. 和 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,没有适配坑。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 qiqicto@qq.com 举报,一经查实,本站将立刻删除。
赞 (0)
小码农的头像小码农认证作者

相关推荐

返回顶部