生态工具对比
MyBatis 作为一个半自动化的持久层框架,其强大的插件机制催生了一批优秀的生态工具。本文将对 MyBatis 生态中的主流工具进行全面对比,帮助开发者根据项目需求做出合理的技术选型。
生态全景图
text
MyBatis 核心
├── 代码生成
│ ├── MyBatis Generator(官方)
│ ├── mybatis-plus-generator
│ └── MyBatisX(IDEA 插件)
├── 分页
│ ├── PageHelper
│ └── MyBatis-Plus Pagination
├── 增强框架
│ ├── MyBatis-Plus
│ ├── MyBatis-Plus-Join(MPJ)
│ └── mybatis-dynamic-sql
├── 缓存
│ ├── mybatis-redis
│ ├── mybatis-ehcache
│ └── mybatis-caffeine
└── 集成
├── mybatis-spring
└── mybatis-spring-boot-starter
核心工具对比
代码生成工具
| 特性 | MyBatis Generator | MP Generator | MyBatisX 插件 |
|---|---|---|---|
| 维护方 | Apache MyBatis 官方 | MyBatis-Plus 团队 | 个人开发者 |
| 生成范围 | Entity + Mapper + XML | Entity + Mapper + XML + Service + Controller | Entity + Mapper + XML |
| 模板引擎 | 固定模板 | Freemarker / Velocity / 自定义 | IDEA 内置 |
| 自定义能力 | PluginAdapter 扩展 | 自定义模板 + 策略配置 | 有限 |
| 使用方式 | Maven 插件 / Java API | Java API | IDEA 右键菜单 |
| 学习成本 | 中(XML 配置) | 低(链式 Java 配置) | 极低 |
| 适用场景 | 需要精细控制生成逻辑 | 快速生成全套 CRUD 代码 | 轻量级、单文件生成 |
分页插件
| 特性 | PageHelper | MP 分页 | 手写拦截器 |
|---|---|---|---|
| 侵入性 | 低(ThreadLocal 传参) | 中(需 IPage 参数) | 高(需手写拦截器) |
| 多数据库 | 20+ 种方言 | 10+ 种方言 | 自行实现 |
| SQL 改写 | Executor 拦截改写 | Executor 拦截改写 | 自行实现 |
| COUNT 优化 | 自动生成 / 自定义 / 关闭 | 自动生成 | 自行实现 |
| 结果封装 | PageInfo | IPage | 自定义 |
| 适用场景 | 原生 MyBatis 项目 | MyBatis-Plus 项目 | 高度定制化需求 |
增强框架
| 特性 | MyBatis-Plus | MyBatis-Plus-Join(MPJ) | mybatis-dynamic-sql |
|---|---|---|---|
| 定位 | MyBatis 增强工具 | MP 的多表 Join 扩展 | 类型安全的动态 SQL |
| 单表 CRUD | BaseMapper 内置 17 个方法 | 继承 MP 能力 | DSL 链式构建 |
| 多表查询 | 不支持(需手写 XML) | 支持左连接、内连接等 | 不支持(侧重单表 DSL) |
| 条件构造器 | LambdaQueryWrapper | LambdaQueryWrapper + Join | SelectStatementProvider |
| 代码生成 | 内置 Generator | 复用 MP Generator | 无 |
| 分页 | 内置分页插件 | 复用 MP 分页 | 无 |
| 学习成本 | 低 | 中(需先掌握 MP) | 中高(需理解 DSL) |
| 适用场景 | 单表为主、追求效率 | 多表关联场景 | 类型安全优先 |
缓存工具
| 特性 | mybatis-redis | mybatis-ehcache | mybatis-caffeine |
|---|---|---|---|
| 类型 | 分布式缓存 | 本地缓存(支持集群) | 纯本地缓存 |
| 共享性 | 多节点共享 | Terracotta 集群共享 | 单节点 |
| 持久化 | RDB / AOF | 磁盘溢出 | 无 |
| 性能 | 中(网络 IO) | 高(内存) | 极高(本地内存) |
| 维护状态 | 官方维护 | 社区维护 | 社区维护 |
| 适用场景 | 分布式部署 | 单节点大容量 | 单节点高性能 |
集成工具
| 特性 | mybatis-spring | mybatis-spring-boot-starter | MP Boot Starter |
|---|---|---|---|
| 定位 | Spring 集成核心 | Spring Boot 自动配置 | Spring Boot + MP 自动配置 |
| 配置方式 | XML / Java Config | application.yml | application.yml |
| 自动扫描 | 需手动配置 @MapperScan | 自动扫描 | 自动扫描 |
| 依赖关系 | 基础依赖 | 依赖 mybatis-spring | 依赖 mybatis-spring-boot-starter |
| 适用场景 | 传统 Spring 项目 | Spring Boot + 原生 MyBatis | Spring Boot + MyBatis-Plus |
选型建议
场景一:传统 CRUD 项目
推荐组合:MyBatis + PageHelper + MyBatis Generator
text
适用:以单表为主、查询条件简单的后台管理系统
优势:生态成熟、文档丰富、学习成本低
场景二:追求开发效率
推荐组合:MyBatis-Plus + MP Generator + MP 分页
text
适用:互联网项目、快速迭代、单表操作为主
优势:内置通用 CRUD、代码生成器一键生成全套代码
场景三:复杂多表查询
推荐组合:MyBatis 原生 + 手写 XML + PageHelper
text
适用:数据仓库、报表系统、多表关联复杂
优势:SQL 完全可控、性能可精确优化
场景四:多表关联 + 开发效率
推荐组合:MyBatis-Plus + Plus-Join + MP 分页
text
适用:中等复杂度查询、希望减少手写 SQL
优势:在 MP 基础上支持左连接、内连接等多表操作
场景五:分布式高并发
推荐组合:MyBatis-Plus + Redis 缓存 + MP 分页
text
适用:高并发读写、多节点部署
优势:Redis 分布式缓存 + MP 增强 CRUD
版本兼容性
| 工具 | 最新稳定版本 | MyBatis 最低版本 | Spring Boot 兼容 |
|---|---|---|---|
| MyBatis Generator | 1.4.2 | 3.5+ | 全版本 |
| PageHelper | 5.3.3 / 2.0.0 (boot) | 3.4.6+ | 2.x / 3.x |
| MyBatis-Plus | 3.5.5 | 3.5+ | 2.x / 3.x |
| Plus-Join | 1.4.8 | 3.5+(依赖 MP) | 2.x / 3.x |
| mybatis-redis | 1.0.0 | 3.5+ | 全版本 |
| mybatis-spring-boot | 3.0.3 | 3.5+ | 3.x |
工具依赖关系图
text
mybatis-spring-boot-starter
└── mybatis-spring
└── mybatis
mybatis-plus-boot-starter
├── mybatis-plus
│ └── mybatis-plus-core
│ └── mybatis
└── mybatis-spring-boot-starter(间接依赖)
pagehelper-spring-boot-starter
├── pagehelper
│ ├── jsqlparser(SQL 解析)
│ └── mybatis(对等依赖)
└── pagehelper-spring-boot-autoconfigure
注意:MyBatis-Plus 已内置 mybatis-spring-boot-starter 能力,无需重复引入。PageHelper 与 MP 分页同时引入时会产生拦截器冲突,需二选一。
注意事项
- 避免重复引入:MyBatis-Plus 已包含 mybatis-spring-boot-starter,同时引入会导致 Bean 冲突
- 分页插件互斥:PageHelper 与 MP 分页拦截器会同时生效,导致 SQL 被双重改写
- 代码生成器冲突:MBG 与 MP Generator 可同时使用,但生成的文件名需避免覆盖
- 缓存选型:分布式项目优先选 Redis 缓存,单节点可选 Caffeine(性能最高)
- 版本对齐:MyBatis-Plus 3.5.x 要求 MyBatis 3.5+,Spring Boot 3.x 需选 MP 3.5.4+
要点总结
- MyBatis 生态围绕核心框架形成了代码生成、分页、增强、缓存、集成五大类工具
- 代码生成:MBG 适合精细控制,MP Generator 适合快速生成全套代码
- 分页:PageHelper 适合原生 MyBatis,MP 分页适合 MP 项目,两者不可混用
- 增强:MyBatis-Plus 是主流选择,Plus-Join 补充多表关联能力
- 缓存:Redis 适合分布式,Caffeine 适合单节点高性能,Ehcache 适合大容量本地缓存
- 集成:Spring Boot 项目直接选对应 starter,传统 Spring 项目用 mybatis-spring
- 选型核心原则:单表为主选 MP,复杂查询选原生,分布式加 Redis 缓存
存放路径:D:\git2\jwdev\articles\MYBATIS\专家\生态工具与扩展\生态工具对比.md
📝 发现内容有误?点击此处直接编辑