当 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)

✨ 二、核心功能全景
🔥 十二大核心特性
Mybatis-Flex 提供了强大的开箱即用能力,以下是与竞品的完整对比:
🔑 重点标注:MyBatis-Plus 的数据脱敏、字段权限、字段加密、字典回写四项功能均为企业版收费功能,而 Mybatis-Flex 全部免费开源。
🚀 性能对比(TPC-H 基准测试)
根据 Mybatis-Flex 官方公开的基准测试数据:
性能差距的核心原因: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,支持自定义模板。
🏢 四、主要使用场景
⚔️ 五、竞品优劣势深度分析
🆚 vs MyBatis-Plus(最大竞品)
🆚 vs Fluent MyBatis
🆚 vs JPA / Hibernate
🔮 六、局限性与未来方向
⚠️ 当前不足
社区规模差距:Stars 8.2k vs MyBatis-Plus 25k,教程和问答资源较少
IDE 工具链:缺少 MP 那样的 MyBatisX 等官方插件生态
英文文档:相对中文文档不够完善(核心用户是中文社区)
非 Spring 生态:Solon 已支持,但 Quarkus/Micronaut 等尚未覆盖
功能版本迭代快:从 0.x → 1.11.x 仅用 3 年,部分 API 还不够稳定
🚀 未来方向

📌 七、总结
Mybatis-Flex 是一个值得认真考虑的 MyBatis 增强框架。它用三年时间证明了自身的价值——更快的性能、更低的资源消耗、更全的免费功能,在替代 MyBatis-Plus 的赛道上构建了无可争议的产品力。
📋 快速决策指南
🔥 一句话评价:Mybatis-Flex 是 MyBatis 增强框架领域最好的「后发优势」范例——起步晚,但设计更先进、性能更优、功能更全,且持续高速进化。适合技术选型上追求先进性、性能和成本控制的团队。