MyBatis 与 MyBatis-Plus 完整对比讲解

MyBatis 与 MyBatis-Plus 完整对比讲解
一、MyBatis 原生框架1. 定位轻量级持久层 ORM 框架半自动 ORM底层封装 JDBC解决原生 JDBC 繁琐的代码连接、预编译、结果集手动封装。2. 核心特点SQL 与代码分离 SQL 写在 XML / 注解中业务 SQL 集中管理方便 DBA 优化、打印慢 SQL。灵活可控 多表联查、复杂统计、存储过程、自定义函数都能手写原生 SQL无限制。半自动 基础增删改查需要自己写 XML SQL只做映射不提供内置通用方法。层级结构Mapper 接口定义抽象方法Mapper.xml绑定接口编写对应 SQLPO 实体和数据库表映射3. 基础使用示例实体 Orderjava运行public class Order { private Long id; private String orderNo; }Mapper 接口java运行public interface OrderMapper { Order selectById(Long id); int insert(Order order); }Mapper.xml必须手写 SQLxmlselect idselectById resultTypeOrder select id,order_no from order_info where id #{id} /select insert idinsert insert into order_info(id,order_no) values(#{id},#{orderNo}) /insert4. MyBatis 优缺点优点SQL 完全自主可控复杂查询无压力轻量、无过多封装学习成本低支持动态 SQLif where foreach兼容性强所有数据库通用。缺点单表 CRUD 重复工作量大每张表都要写 insert/select/update/delete分页、条件查询需要自己写 limit、拼接 where没有内置主键生成、逻辑删除、自动填充、分页工具。二、MyBatis-Plus简称 MP1. 定位MyBatis 的增强工具只增强不修改完全兼容原生 MyBatis。 目标简化单表操作消除重复 CRUD 代码复杂多表查询依然复用原生 MyBatis XML。2. 核心设计思想单表通用操作内置封装一行代码搞定复杂多表、统计、自定义 SQL仍然写 XML不限制原有能力大量内置实用功能开箱即用。3. 内置核心能力1通用 Mapper自带 CRUD无需写 XMLBaseMapperT内置方法insert、deleteById、updateById、selectById、selectList、selectCount等java运行// 继承BaseMapper不用写任何xml就能使用 public interface OrderMapper extends BaseMapperOrder { }业务层直接调用java运行// 根据id查询不用写SQL Order order orderMapper.selectById(1L); // 新增 orderMapper.insert(order);2条件构造器 QueryWrapper / LambdaQueryWrapper不用拼接 SQLJava 代码组装查询条件杜绝字符串硬编码、防止字段名写错。java运行// 普通 QueryWrapperOrder wrapper new QueryWrapper(); wrapper.eq(order_no,OD20260710) .gt(total_amount,100); // Lambda 推荐编译期校验字段无字符串写错风险 LambdaQueryWrapperOrder lambda new LambdaQueryWrapper(); lambda.eq(Order::getOrderNo,OD20260710); ListOrder list orderMapper.selectList(lambda);3分页插件引入插件后一行分页不用手写 limitjava运行PageOrder page new Page(1,10); PageOrder result orderMapper.selectPage(page, wrapper);4自动填充创建时间、更新时间通过注解TableField(fill FieldFill.INSERT) 元对象处理器自动赋值不用每次业务手动 set createTime。5逻辑删除全局配置后调用deleteById执行 UPDATE 软删除而非物理 DELETE适配电商业务。6主键策略自动管理支持自增、雪花算法、UUID全局统一配置。7代码生成器一键生成 Controller、Service、Mapper、XML、实体类大幅提升开发速度。4. MP 兼容原生 MyBatis如果遇到多表联查、复杂统计、自定义 SQL完全可以继续写 Mapper.xml互不冲突java运行public interface OrderMapper extends BaseMapperOrder { // 自定义多表联查自己写xml ListOrderVO selectOrderWithProduct(); }5. MP 优缺点优点单表零 SQL 开发极大减少重复工作量Lambda 构造器避免字段字符串写错分页、逻辑删除、自动填充、主键策略一站式解决方案代码生成器快速搭建 CRUD完全兼容原生 MyBatis无侵入随时混用 XML。缺点复杂多表、嵌套统计场景封装优势失效还是要手写 SQL过度依赖封装会弱化手写 SQL 能力排查底层 SQL 时需要了解 MP 执行逻辑版本升级偶尔会出现配置类变动。三、MyBatis vs MyBatis-Plus 核心对比表格对比项MyBatis 原生MyBatis-Plus关系基础持久层框架MyBatis 增强工具基于 MyBatis单表 CRUD每张表手写 XML重复代码多BaseMapper 内置零 XML条件查询手动拼接 XML 动态 SQLWrapper 构造器Java 代码链式调用分页手动写 limit封装工具类内置分页插件开箱即用自动填充时间自己封装工具赋值TableField 自动填充逻辑删除自己加标记、修改 SQL全局配置delete 自动软删Lambda 查询不支持只能写字段字符串LambdaQueryWrapper编译校验多表联查原生支持自由写 XML兼容原生 XML复杂查询仍手写代码生成需要自己写模板内置生成器一键全套代码学习门槛低只掌握 XML、动态 SQL略高需要额外掌握 Wrapper、插件配置四、项目选型建议1. 中小型电商、管理系统推荐 MyBatis-Plus表多、单表操作频繁、简单查询占 80%MP 节省大量开发时间复杂订单 / 支付多表查询保留 XML 手写 SQL两者结合。2. 大数据、复杂报表、多关联复杂 SQL 项目纯 MyBatis 更合适减少中间封装层SQL 完全自主可控便于 DBA 深度优化。五、开发最佳实践电商项目通用单表简单增删改查直接使用 MP BaseMapper LambdaWrapper多表联查、复杂统计、自定义复杂 SQL新建 XML 手写原生 MyBatis统一开启逻辑删除、自动填充创建 / 更新时间分页统一使用 MP Page 对象不手动拼接 limit禁止硬编码字段字符串一律使用 LambdaQueryWrapper代码生成器生成基础模板减少重复创建文件工作。六、常见误区澄清❌ MyBatis-Plus 替代 MyBatis ✅ MP 只是增强底层依旧运行 MyBatis必须引入 mybatis 依赖。❌ 使用 MP 后不能写 XML ✅ 完全可以混用复杂业务强烈建议手写 XML。❌ MP 只能做单表查询 ✅ 多表场景交给原生 XMLMP 不限制任何 MyBatis 原生能力。