对于 MyBatis Plus 和 MyBatis我们究竟该怎么选择?
简介:
MyBatis是轻量级半自动ORM框架,SQL自定义灵活,适合复杂查询;MyBatis Plus在其基础上封装通用CRUD,提升开发效率,支持Lambda与分页插件。两者可混合使用,兼顾效率与灵活性,适用于不同场景。
- 核心概念
MyBatis
本质:一款优秀的 半自动 ORM 框架,支持 SQL 语句自定义,灵活性高。
特点:
需要开发者编写 SQL 语句(XML 或注解)。
提供 SQL 映射功能,将结果集映射为 Java 对象。
轻量级,性能接近 JDBC。
适合复杂查询、多表关联等场景。
MyBatis Plus
本质:基于 MyBatis 的 增强工具,在 MyBatis 基础上封装了常用 CRUD 操作。
特点:
内置 通用 Mapper 和 通用 Service,无需编写 SQL 即可完成单表操作。
支持 Lambda 表达式、条件构造器,简化复杂查询。
分页插件、性能分析插件等开箱即用。
完全兼容 MyBatis,可混合使用自定义 SQL。
- 区别对比表
对比维度 MyBatis MyBatis Plus
SQL 编写 手动编写 SQL(XML / 注解) 内置 CRUD,无需编写 SQL;支持自定义 SQL
开发效率 较低,需关注 SQL 细节 较高,单表操作几乎零 SQL
学习成本 低,专注 SQL 编写 中,需了解 MP 的 API 和条件构造器
灵活性 高,可完全控制 SQL 较高,支持自定义 SQL,但单表操作被封装
性能 接近 JDBC,性能优秀 与 MyBatis 一致,无额外性能损耗
适用场景 复杂查询、多表关联、SQL 优化需求高 单表 CRUD 为主、快速开发、中小型项目
- 优缺点分析
MyBatis
优点:
高度灵活:SQL 完全自定义,优化空间大。
性能优秀:轻量级框架,无额外性能开销。
适合复杂场景:多表关联、动态 SQL、存储过程等。
学习曲线平缓:只需掌握 SQL 和映射规则。
缺点:
单表操作繁琐:重复编写 CRUD SQL。
开发效率低:需手动维护 SQL 和实体类字段映射。
分页、排序等功能需自行实现。
MyBatis Plus
优点:
开发效率高:单表 CRUD 零 SQL,大幅减少重复工作。
功能丰富:分页、条件查询、Lambda 表达式等开箱即用。
易于维护:实体类字段与数据库表字段自动映射。
兼容 MyBatis:可无缝切换,保留自定义 SQL 能力。
缺点:
复杂查询支持有限:多表关联仍需编写 SQL。
学习成本略高:需熟悉 MP 的 API 和条件构造器。
封装过深:某些场景下可能隐藏性能问题。
- 选择建议
选择 MyBatis:
项目中存在大量 复杂 SQL(多表关联、子查询、动态 SQL)。
需要对 SQL 进行 深度优化,追求极致性能。
团队习惯手写 SQL,希望完全控制数据访问层。
选择 MyBatis Plus:
项目以 单表操作 为主,CRUD 场景占比高。
追求 快速开发,减少重复代码。
需要 分页、排序、条件查询 等常用功能开箱即用。
团队对 MyBatis 有一定了解,愿意接受封装。
- 混合使用策略
在实际项目中,可以 MyBatis + MyBatis Plus 混合使用:
单表 CRUD 使用 MyBatis Plus 简化开发。
复杂查询使用 MyBatis 手写 SQL,保证灵活性和性能。
总结
MyBatis Plus 是 MyBatis 的 增强版,适合快速开发和单表操作;MyBatis 适合需要高度定制 SQL 的场景。两者可以结合使用,兼顾开发效率和灵活性。