MyBatis、tk-MyBatis(通用Mapper)和MyBatisPlus都是Java持久层框架,但定位和适用场景有所不同。以下是它们的核心区别和选型建议:
一、核心区别
特性MyBatistk-MyBatisMyBatisPlus(MP)核心定位基础ORM框架MyBatis的CRUD扩展工具MyBatis的增强工具包SQL编写需手动编写所有SQL自动生成简单CRUD SQL自动生成CRUD SQL,支持复杂SQL扩展代码生成需第三方工具(如MyBatis Generator)无内置生成器内置代码生成器动态SQL需手写XML或注解依赖MyBatis原生能力提供更简洁的Wrapper条件构造器活跃度Apache顶级项目,更新稳定社区维护,更新较慢国内活跃,更新频繁
二、适用场景
1. 原生MyBatis
适用场景:需要高度定制复杂SQL(如多表关联查询、存储过程调用),或项目已有成熟MyBatis封装。典型案例:金融系统、历史遗留项目改造、对SQL优化有极致要求的场景。
2. tk-MyBatis(通用Mapper)
适用场景:快速实现单表CRUD,希望保持MyBatis原生特性,避免过度封装。典型案例:小型项目、快速原型开发,或团队熟悉MyBatis但想减少重复代码。
3. MyBatisPlus
适用场景:需要快速开发标准业务(如管理后台),且希望内置分页、逻辑删除、字段自动填充等特性。典型案例:中后台管理系统、微服务架构中的标准化数据操作模块。
三、选型建议
优先MyBatisPlus:90%的中小型项目选MP可显著提升开发效率,其Wrapper条件构造器能覆盖大部分查询场景。选原生MyBatis:当项目涉及复杂动态SQL(如报表系统)或需要直接控制JDBC底层行为时。过渡方案tk-MyBatis:适合从原生MyBatis向MP迁移的过渡期,或团队暂时不愿改变MyBatis使用习惯的情况。
📌 提示:三者并非完全互斥,MP完全兼容MyBatis原生模式,复杂SQL仍可手写XML,兼顾灵活性和效率。