MyBatis-Plus 进阶实战:不用写 XML,CRUD + 复杂查询像 “点奶茶” 一样简单
上一篇咱们用 MyBatis 搞定了数据库 CRUD,但你有没有觉得还是有点麻烦?—— 写 XML 文件、手动拼条件 SQL、分页要装插件,像奶茶店的智能库存系统还需要手动输查询条件,不够省心。
今天咱们升级到 MyBatis-Plus(简称 MP)—— 它是 MyBatis 的 “增强版超级工具”,就像奶茶店的 “全自动库存机器人”:不用写 XML、不用手动拼 SQL,甚至不用写基础 CRUD 方法,用 API 就能搞定条件查询、分页、批量操作,开发效率直接翻倍,是企业级项目的 “效率神器”。
全程沿用图书管理系统案例,保持 “奶茶店类比 + 实战 + 避坑” 风格,新手也能直接复制代码跑通。
一、先搞懂:MyBatis-Plus 到底强在哪?(MyBatis vs MP 对比)
MyBatis-Plus 不是替换 MyBatis,而是在 MyBatis 基础上做了 “懒人增强”—— 保留 MyBatis 的灵活性,解决它的繁琐问题,核心优势用一张表说透:
| 对比维度 | MyBatis(智能库存系统) | MyBatis-Plus(全自动库存机器人) |
|---|---|---|
| 基础 CRUD | 要写 Mapper 接口 + XML SQL | 继承 BaseMapper,零 SQL 实现 CRUD |
| 条件查询 | 手动写 XML 拼 WHERE 条件(易出错) | 条件构造器(QueryWrapper),API 链式拼条件 |
| 分页功能 | 需装 PageHelper 插件,手动开启分页 | 内置分页插件,一行代码实现分页 |
| 批量操作 | 需手动写批量 SQL 或循环调用单条 | 内置批量新增 / 修改 / 删除,一行代码搞定 |
| 逻辑删除 | 需手动写 DELETE+UPDATE SQL | 配置后自动实现逻辑删除(改 status,不删数据) |
| 企业使用率 | 90% 企业在用 | 95% 以上企业首选(中小团队尤其偏爱) |
简单说:MyBatis-Plus 让你 “告别重复工作”,把精力放在业务逻辑上,而不是写重复的 SQL 和 XML。
二、实操 1:Spring Boot 整合 MyBatis-Plus(5 分钟搞定 “全自动机器人”)
咱们还是用图书管理系统的book表,手把手整合 MP,步骤比 MyBatis 更简单:
步骤 1:加 MP 依赖(装 “全自动库存机器人” 组件)
打开pom.xml,替换 MyBatis 依赖为 MP 依赖(MP 已包含 MyBatis,不用重复加):
xml
<!-- MyBatis-Plus核心依赖(替代MyBatis) -->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.3.1</version> <!-- 稳定版,兼容Spring Boot 2.7.x -->
</dependency><!-- MySQL驱动(沿用之前的,确认存在即可) -->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope>
</dependency><!-- Lombok(之前已加,用于实体类简化) -->
<dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional>
</dependency>
点 IDEA 右下角 “Import Changes”,依赖下载完成。
步骤 2:配 MP(给 “机器人” 设参数)
在application-dev.yml里添加 MP 配置,替换之前的 MyBatis 配置:
yaml
spring:datasource:url: jdbc:mysql://localhost:3306/dev_book_db?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8username: rootpassword: 123456driver-class-name: com.mysql.cj.jdbc.Driver# MyBatis-Plus配置(替代MyBatis配置)
mybatis-plus:mapper-locations: classpath:mapper/*.xml # 保留XML路径(如需自定义SQL仍可用)type-aliases-package: com.example.springbootdemo.entity # 实体类别名包configuration:map-underscore-to-camel-case: true # 驼峰命名转换(默认开启,可省略)log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 打印SQL日志(调试用)global-config:db-config:id-type: AUTO # 主键自增(和表的AUTO_INCREMENT对应)logic-delete-field: isDeleted # 逻辑删除字段名(后面讲逻辑删除用)