MyBatis、MyBatis-Plus

MyBatis 与 MyBatis-Plus 核心区别总结

一、核心定位与底层关系

技术 核心定位 底层关系
MyBatis 半自动化 ORM 框架,主打"SQL 优先",专注于 SQL 执行与结果映射,无内置通用 CRUD 能力 独立的持久层框架,是 MyBatis-Plus 的基础(MyBatis-Plus 完全基于 MyBatis 扩展)
MyBatis-Plus(MP) MyBatis 的增强工具,在保留 MyBatis 原有特性的基础上,增加"无代码 CRUD""条件构造器"等能力 不是替代 MyBatis,而是兼容并增强 MyBatis,底层仍依赖 MyBatis 执行 SQL

二、核心特性对比

1. 基础 CRUD 能力

维度 MyBatis MyBatis-Plus
实现方式 需手动编写:Mapper 接口 + XML/注解 SQL(如 select * from user where id = ?) 零 SQL 实现:继承 BaseMapper<T> 接口,直接调用内置方法(如 selectById(id)、insert(entity))
代码量 大(每个 CRUD 操作都需编写 SQL 语句) 极少(通用 CRUD 无需写 SQL,仅需定义实体类和 Mapper 接口)
扩展方式 完全自定义 SQL,无通用模板 内置通用方法覆盖 90% 场景,特殊需求仍可自定义 SQL(兼容 MyBatis 方式)

2. 查询能力

维度 MyBatis MyBatis-Plus
条件查询 需手动编写动态 SQL(<if>/<where> 等标签) 提供 QueryWrapper/LambdaQueryWrapper 条件构造器,通过链式调用拼接条件(如 eq("age", 20).like("name", "张"))
分页查询 需手动配置分页插件 + 编写分页 SQL(如 limit #{offset}, #{size}) 内置分页插件,仅需调用 page(new Page<>(1, 10), wrapper) 即可自动分页,无需手写分页 SQL
复杂查询 完全依赖手动编写 SQL(联表、子查询等) 支持条件构造器结合自定义 SQL,也可通过 @SqlParser 等注解适配复杂场景,仍保留 MyBatis 原生 SQL 能力

3. 功能扩展

维度 MyBatis MyBatis-Plus
代码生成 无内置生成工具,需依赖第三方(如 MyBatis Generator) 内置 AutoGenerator 工具,可一键生成实体类、Mapper、Service、Controller 全套代码
主键生成 需手动指定主键策略(如自增、UUID),无内置封装 内置多种主键策略(@TableId(type = IdType.AUTO)/ASSIGN_ID 等),支持雪花算法自动生成分布式 ID
逻辑删除 需手动编写 SQL 控制(如 update user set deleted = 1 where id = ?) 配置后自动实现逻辑删除(查询时自动加 deleted = 0 条件,删除时执行更新操作)
乐观锁 需手动编写版本号控制 SQL 注解 @Version 即可自动实现乐观锁(更新时加 version = version + 1 条件)
批量操作 需手动编写批量 SQL 或循环调用 内置 saveBatch()/updateBatchById() 等批量方法,优化批量操作性能

4. 开发效率与学习成本

维度 MyBatis MyBatis-Plus
上手成本 中(需学习 XML/注解 SQL、动态 SQL 语法) 低(会 MyBatis 即可快速上手,通用功能无需学新语法)
开发效率 中等(重复编写 CRUD SQL 耗时) 极高(通用操作零代码,复杂操作兼容 MyBatis 原生方式)
维护成本 高(SQL 分散在 XML/注解中,实体变更需同步修改 SQL) 低(通用 CRUD 无需维护 SQL,仅需维护实体类)
兼容性 纯原生,无额外封装,适配所有自定义 SQL 场景 完全兼容 MyBatis 所有特性,自定义 SQL 不受任何限制

三、核心选择建议

  1. 选 MyBatis :
    • 项目需极致定制 SQL(如复杂联表、分库分表、SQL 优化要求极高);
    • 团队希望完全掌控 SQL 编写,避免框架封装带来的黑盒;
    • 遗留系统仅使用 MyBatis,无需额外扩展能力。
  2. 选 MyBatis-Plus :
    • 追求开发效率,想减少重复的 CRUD SQL 编写;
    • 项目以简单查询为主,复杂查询占比低;
    • 需要快速生成代码、实现逻辑删除/乐观锁/分页等通用功能;
    • 希望在保留 MyBatis 原生 SQL 能力的同时,获得类似 JPA 的便捷性。
  3. 核心原则 :
    MyBatis-Plus 是 MyBatis 的"超集",选择 MP 不会丢失 MyBatis 的任何能力,仅需引入依赖即可无缝升级,是绝大多数基于 MyBatis 项目的最优解。

四、关键补充

  • 依赖关系:使用 MyBatis-Plus 需先引入 MyBatis 核心依赖(Spring Boot 项目中,MP 提供 mybatis-plus-boot-starter,已内置 MyBatis 依赖,无需重复引入);
  • 配置兼容:MP 完全兼容 MyBatis 的配置(如 mybatis.mapper-locations),仅需新增少量 MP 专属配置(如分页插件、主键策略);
  • 核心接口:MP 核心是 BaseMapper<T> 和 IService<T>,前者提供单表 CRUD,后者提供更丰富的业务层方法(如批量操作、逻辑删除);
  • 生态适配:MP 支持主流数据源(MySQL/Oracle 等)、分库分表框架(Sharding-JDBC),与 Spring Boot 无缝集成。
相关推荐
这个DBA有点耶4 天前
MVCC深入:Read View、版本链与快照读——InnoDB并发控制的内核
数据库·mysql·架构
DBA_G4 天前
从地面到云霄:GBase数据库在民航三大场景的落地实践
数据库
自由能燃气设备4 天前
商用全预混低氮冷凝锅炉免费方案vs付费方案对比+选型避坑指南
大数据·数据库·人工智能
科创致远4 天前
科创致远 ESOP 系统核心效能与实战价值展示
大数据·数据库·人工智能·精益工程
2601_962218614 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法
张洛闻Eren4 天前
k8s云原生【第十课】:水平 Pod 自动扩缩容
运维·数据库·云原生·kubernetes·github
于平安4 天前
MySQL-触发器
数据库·mysql
白远山4 天前
上海24小时自助健身房解决方案实战指南与经验分享
java·数据库·架构·需求分析
Omics Pro4 天前
斯坦福Nature+Science|广义虚拟细胞基础大模型
数据库·人工智能·算法·机器学习·自然语言处理
2603_965148114 天前
AI+API选品:下一代智能商务助手雏形已现
java·大数据·数据库·人工智能·数据挖掘