易君召
易君召
发布于 2026-06-10 / 1 阅读
0
0

⚡ Mybatis-Flex 完全解读:新一代 MyBatis 增强框架的崛起

当 MyBatis-Plus 不再是唯一选择,一个更轻量、更快、功能更全的国产框架悄然崛起。 Mybatis-Flex 以「性能提升 3-10 倍」、「零第三方依赖」等硬核指标杀入战场,本文带你深度拆解它的核心能力与差异化优势。

📦 一、Mybatis-Flex 是什么?

Mybatis-Flex 是一个优雅、轻量、功能强大的 MyBatis 增强 ORM 框架。由国产开源开发者 Michael Yang(王帅) 发起,开源于 2023 年初,短短三年 GitHub Star 已突破 8,200+,是近年来 Java 生态中增长最迅猛的国产 ORM 框架。

🏗️ 项目定位

┌─────────────────────────────┐
│      Mybatis-Flex          │  ← 增强层(ORM/QueryWrapper)
├─────────────────────────────┤
│        MyBatis             │  ← SQL 映射引擎(核心)
├─────────────────────────────┤
│         JDBC               │  ← 数据库连接层
└─────────────────────────────┘

💡 一句话定位:不替换 MyBatis,而是让 MyBatis 更好用——提供 Fluent 查询 API、自动 CRUD、代码生成器等特性,同时 零侵入、零依赖

📊 社区数据一览(2026.06)

指标

数据

GitHub 仓库

mybatis-flex/mybatis-flex

⭐ Stars

8,200+

🍴 Forks

~1,100

📦 最新版本

v1.11.7(2026.05 发布)

👤 主要贡献者

50+

📝 开源协议

Apache 2.0

🎯 社区活跃度

🔥🔥🔥🔥(月均 40+ commits)

✨ 二、核心功能全景

🔥 十二大核心特性

Mybatis-Flex 提供了强大的开箱即用能力,以下是与竞品的完整对比:

功能特性

🏆 Mybatis-Flex

MyBatis-Plus

Fluent MyBatis

基础 CRUD

分页查询

分页无 SQL 解析

✅ 原生支持

❌ 需解析

多表 FROM

JOIN 查询

❌(需手写)

UNION / UNION ALL

复合主键 / 多主键

零第三方依赖

只有 MyBatis

❌ 依赖 JSqlParser

QueryWrapper RPC 传输

支持序列化

未知

SQL 审计

内置

数据脱敏

免费

收费模块

字段权限

免费

收费模块

字段加密

免费

收费模块

字典回写

免费

收费模块

多数据源 + 事务

原生支持

⚠️ 需借第三方

Db + Row 模式

Entity 监听器

动态 Schema

🔑 重点标注:MyBatis-Plus 的数据脱敏、字段权限、字段加密、字典回写四项功能均为企业版收费功能,而 Mybatis-Flex 全部免费开源

🚀 性能对比(TPC-H 基准测试)

根据 Mybatis-Flex 官方公开的基准测试数据:

框架

查询耗时

启动时间

内存占用

Mybatis-Flex

1x(基准)

极快(<1s)

MyBatis-Plus

3-10x 更慢

慢(需代理分析)

较高

原生 MyBatis

~1x(相近)

最低

Fluent MyBatis

接近 1x

性能差距的核心原因:Mybatis-Plus 在启动时需要对所有 Entity 进行代理分析,并在分页时对 SQL 进行 JSqlParser 解析,而 Mybatis-Flex 完全避免了这些开销

🚀 三、安装与快速上手

📥 Maven 坐标

最新版本:1.11.7

xml

<!-- Spring Boot Starter(推荐) -->
<dependency>
    <groupId>com.mybatis-flex</groupId>
    <artifactId>mybatis-flex-spring-boot-starter</artifactId>
    <version>1.11.7</version>
</dependency>

<!-- 核心包(非 Spring 项目) -->
<dependency>
    <groupId>com.mybatis-flex</groupId>
    <artifactId>mybatis-flex-core</artifactId>
    <version>1.11.7</version>
</dependency>

<!-- 代码生成器 -->
<dependency>
    <groupId>com.mybatis-flex</groupId>
    <artifactId>mybatis-flex-codegen</artifactId>
    <version>1.11.7</version>
</dependency>

📥 Gradle 方式

groovy

implementation 'com.mybatis-flex:mybatis-flex-spring-boot-starter:1.11.7'

🎯 实体定义

java

import com.mybatisflex.annotation.*;

@Table(value = "tb_account")
public class Account {

    @Id(keyType = KeyType.Auto)    // 自增主键
    private Long id;

    private String userName;
    private Integer age;
    private Date birthday;

    @Column(isLogicDelete = true)  // 逻辑删除字段
    private Boolean isDeleted;

    @Version                      // 乐观锁
    private Integer version;

    // 省略 getter/setter ...
}

💡 注解体系与 JPA 风格高度一致,学习成本几乎为零。@Table@Id@Column 一目了然,还额外支持 @Version@Column(isLogicDelete=true)

🎯 Mapper 层——零 XML

java

import com.mybatisflex.core.BaseMapper;

public interface AccountMapper extends BaseMapper<Account> {
    // 继承的方法无需实现:
    // insert, insertOrUpdate, deleteById, updateById
    // selectById, selectList, selectOne, selectCount, paginate ...
}

🔥 对比 MyBatis-Plus:写法几乎一致,但 Flex 的 BaseMapper 全部方法直接可用,无需额外 @MapperScan 配置(Spring Boot 自动配置)。

🎯 Service 层

java

import com.mybatisflex.spring.service.ServiceImpl;

@Service
public class AccountServiceImpl
    extends ServiceImpl<AccountMapper, Account>
    implements AccountService {
    // 继承 save、update、remove、list、page 等方法
}

🎯 核心亮点:QueryWrapper 查询

这是 Mybatis-Flex 最亮眼的设计——链式调用 + 类型安全 + 高度可读:

java

// 基本查询
Account account = accountMapper.selectOneByQuery(
    QueryWrapper.create()
        .where(ACCOUNT.USER_NAME.eq("张三"))
        .and(ACCOUNT.AGE.ge(18))
);

// 范围 + 模糊查询
List<Account> list = accountMapper.selectListByQuery(
    QueryWrapper.create()
        .where(ACCOUNT.AGE.between(20, 30))
        .or(ACCOUNT.USER_NAME.like("%test%"))
        .orderBy(ACCOUNT.ID, false)  // true=ASC, false=DESC
        .limit(10)
);

// 多表 JOIN 查询
List<Map> results = accountMapper.selectMapsByQuery(
    QueryWrapper.create()
        .select(ACCOUNT.ALL, ORDER.AMOUNT)
        .from(ORDER)
        .leftJoin(ACCOUNT)
            .on(ACCOUNT.ID.eq(ORDER.ACCOUNT_ID))
        .where(ACCOUNT.ID.eq(100))
);

🔥 类型安全ACCOUNT.USER_NAME 是编译期生成的静态字段,不会因拼写错误导致运行时异常。IDE 有代码提示,杜绝「字符串魔法值」。

🎯 分页查询

java

Page<Account> page = accountMapper.paginate(
    1,                          // 当前页码
    10,                         // 每页条数
    QueryWrapper.create()
        .where(ACCOUNT.CREATE_TIME.ge("2025-01-01"))
        .orderBy(ACCOUNT.ID, false)
);

System.out.println("总条数: " + page.getTotalRow());
System.out.println("总页数: " + page.getTotalPage());
System.out.println("数据列表: " + page.getRecords());

分页性能优势:Mybatis-Plus 的分页底层依赖 JSqlParser 解析 SQL 再包装 COUNT 查询,而 Mybatis-Flex 直接生成优化后的 COUNT SQL,避免了 SQL 解析的开销

🎯 Db + Row 模式

这是 Mybatis-Flex 独有特性——不需要定义 Mapper 和 Entity 也能操作数据库

java

// 插入
Db.insert("tb_account", Row.of("user_name", "张三").set("age", 25));

// 查询
List<Row> rows = Db.selectListByQuery(
    QueryWrapper.create()
        .select().from("tb_account")
        .where(ACCOUNT.AGE.ge(18))
);

💡 适合报表查询、数据迁移、快速原型等不需要实体映射简洁场景。

🎯 代码生成器

java

public class Codegen {
    public static void main(String[] args) {
        // 数据源配置
        DataSource dataSource = getDataSource();

        // 全局配置
        GlobalConfig config = new GlobalConfig();
        config.setBasePackage("com.example.demo");
        config.setEntityPackage("entity");
        config.setMapperPackage("mapper");

        // 生成代码
        FlexGenerator generator = new FlexGenerator(dataSource, config);
        generator.generate();
    }
}

一键生成 Entity、Mapper、Service、Controller,支持自定义模板。

🏢 四、主要使用场景

场景

推荐理由

关键特性

🆕 新建 Spring Boot 项目

零配置上手,无缝替代 MP

Spring Boot Starter

🏭 替换 MyBatis-Plus

性能提升 + 免费字段脱敏/加密

迁移成本低

🔬 微服务架构

启动快、内存低

无代理分析

📊 数据中台 / 报表系统

Db+Row 模式不需要 Entity

灵活的数据操作

🔐 高安全需求系统

免费字段加密/脱敏/权限

无需企业授权

🔄 多数据源系统

原生支持 @Transactional 事务

无需额外中间件

🏗️ 快速原型 / 脚手架

代码生成器一键产出

全链路生成

⚔️ 五、竞品优劣势深度分析

🆚 vs MyBatis-Plus(最大竞品)

维度

Mybatis-Flex

MyBatis-Plus

性能

🏆 3-10x 更快

基准

💾 内存

🏆 更低

较高

🚀 启动速度

🏆 毫秒级

秒级(代理扫描)

💰 高级功能

全部免费

⚠️ 脱敏/加密等需企业版

👥 社区规模

⭐ 8.2k

⭐ 25k

📚 教程资源

较少(增长中)

丰富

🧩 第三方集成

较少

丰富

🆚 vs Fluent MyBatis

维度

Mybatis-Flex

Fluent MyBatis

功能丰富度

🏆 更全面

基础功能

逻辑删除

乐观锁

多数据源

代码生成器

基础支持

社区活跃度

🏆 更活跃

增速缓慢

GitHub Stars

⭐ 8.2k

~1.5k

🆚 vs JPA / Hibernate

维度

Mybatis-Flex

JPA (Hibernate)

SQL 控制力

🏆 完全掌控

黑盒生成

性能

🏆 轻量高效

开销大(Lazy/N+1)

复杂查询

🏆 Fluent API 灵活

JPQL/Criteria 繁琐

自动建表

❌ 需手动建

✅ DDL 自动生成

学习曲线

低(会 MyBatis 即可)

中高

🔮 六、局限性与未来方向

⚠️ 当前不足

  1. 社区规模差距:Stars 8.2k vs MyBatis-Plus 25k,教程和问答资源较少

  2. IDE 工具链:缺少 MP 那样的 MyBatisX 等官方插件生态

  3. 英文文档:相对中文文档不够完善(核心用户是中文社区)

  4. 非 Spring 生态:Solon 已支持,但 Quarkus/Micronaut 等尚未覆盖

  5. 功能版本迭代快:从 0.x → 1.11.x 仅用 3 年,部分 API 还不够稳定

🚀 未来方向

方向

状态

预计

🔧 Kotlin 原生 DSL

⏳ 开发中

✅ 已有部分支持

R2DBC 响应式

📋 规划中

社区呼声最高

🗺️ 更丰富的方言支持

✅ 持续完善

持续迭代

🧩 Plugin 生态

⏳ 建设中

开放 SPI 机制

🤖 AI 辅助查询生成

🚧 探索中

接入 LLM

🌐 国际化文档

⏳ 提升中

社区翻译计划

📌 七、总结

Mybatis-Flex 是一个值得认真考虑的 MyBatis 增强框架。它用三年时间证明了自身的价值——更快的性能、更低的资源消耗、更全的免费功能,在替代 MyBatis-Plus 的赛道上构建了无可争议的产品力。

📋 快速决策指南

你的项目情况

推荐框架

追求极致性能,对启动时间敏感

Mybatis-Flex 🏆

需要字段加密/脱敏但不想付费

Mybatis-Flex 🏆

多数据源 + 强事务一致性要求

Mybatis-Flex 🏆

团队熟悉 MyBatis-Plus 且无性能痛点

可保留 MP

追求最大社区生态和插件支持

MP 更稳妥


🔥 一句话评价:Mybatis-Flex 是 MyBatis 增强框架领域最好的「后发优势」范例——起步晚,但设计更先进、性能更优、功能更全,且持续高速进化。适合技术选型上追求先进性、性能和成本控制的团队。

📌 快速参考

项目

信息

Maven

com.mybatis-flex:mybatis-flex-spring-boot-starter:1.11.7

GitHub

mybatis-flex/mybatis-flex

官网

https://mybatis-flex.com

最新版

v1.11.7(2026.05)

兼容性

MyBatis 3.5+ / Spring Boot 2.x~3.x

入门

定义 Entity → 继承 BaseMapper → 使用 QueryWrapper


评论