MyBatis-Plus 完整讲解(搭配 SpringBoot3 + MySQL + Redis 场景)

一、MyBatis-Plus 是什么

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,只做增强不做改变,完全兼容原生 MyBatis,简化 MySQL 数据库 CRUD 开发,大幅减少重复 SQL 代码。

核心定位

  1. 底层依旧是 MyBatis,MyBatis 所有特性(XML、注解、动态 SQL)全部保留可用;
  2. 封装通用增删改查,不用写 XML/注解 SQL 就能完成单表操作;
  3. 配套大量实用插件:分页、逻辑删除、乐观锁、多租户、性能分析等。

二、解决什么痛点(传统 MyBatis 的麻烦)

原生 MyBatis 开发单表时,必须重复写:

  • insert、deleteById、updateById、selectById、list、page 等大量重复 XML SQL;
  • 分页需要手动写 limit、统计总数,代码冗余;

MP 直接内置通用能力,基础单表操作一行代码搞定。

三、核心内置能力(最常用)

1. 通用 Mapper(BaseMapper)

所有实体 Mapper 继承 BaseMapper<T>,自带 10+ 现成方法:

  1. // 插入
  2. insert(entity)
  3. // 根据主键删
  4. deleteById(id)
  5. // 批量删除
  6. deleteBatchIds(ids)
  7. // 根据主键更新
  8. updateById(entity)
  9. // 根据主键查询
  10. selectById(id)
  11. // 批量查询
  12. selectBatchIds(ids)
  13. // 条件查询
  14. selectList(queryWrapper)
  15. // 分页查询
  16. selectPage(page, queryWrapper)

2. 通用 Service(ServiceImpl + IService)

封装业务层通用方法,比 Mapper 功能更强,自带批量操作、链式查询:

  1. // 批量新增
  2. saveBatch(list)
  3. // 链式条件查询
  4. list(lambdaQuery().eq(User::getName,"张三").getWrapper())

3. Lambda 条件构造器(推荐,杜绝硬编码字段名)

不用写字符串字段,用实体类方法引用,编译报错提前发现:

  1. // 查询 name = "张三" 且 age > 18
  2. LambdaQueryWrapper<User> wrapper = Wrappers.lambdaQuery();
  3. wrapper.eq(User::getName, "张三")
  4. .gt(User::getAge, 18);
  5. List<User> users = userMapper.selectList(wrapper);

4. 内置常用插件

  1. 分页插件:自动处理分页 count 查询,不用手动写分页 SQL;
  2. 逻辑删除:删除不真实 delete,更新 is_deleted=1,查询自动过滤已删数据;
  3. 乐观锁插件:版本号控制并发更新,防止超卖;
  4. 字段自动填充:创建时间、更新时间自动赋值(create_time、update_time);
  5. 性能分析插件、多租户插件等。

5. 代码生成器

一键生成:Entity、Mapper、MapperXML、Service、Controller,基础 CRUD 全套代码,新建表零开发。

四、和你技术栈的搭配关系

技术栈:SpringBoot 3.5.9 + MyBatis-Plus + Redis + MySQL

  1. MySQL:底层持久化数据库,存储业务真实数据;
  2. MyBatis-Plus:中间层 ORM 框架,负责 Java 对象 ↔ MySQL 数据映射,简化数据库操作;
  3. Redis:缓存中间件,配合 MP 做查询缓存,减轻 MySQL 压力(比如根据 id 查询用户先查 Redis,无数据再用 MP 查库,写入缓存);
  4. SpringBoot3:容器,统一管理 MP、Redis、MySQL 数据源配置、事务。

简单数据流示例

查询用户详情: 前端请求 → Controller → Service

  1. Service 先通过 Redis Template 查询缓存;
  2. 缓存无数据 → 使用 MyBatis-Plus userMapper.selectById(id) 查询 MySQL;
  3. 将查询结果写入 Redis 缓存,返回数据。

五、SpringBoot3 引入 MP 核心依赖(Maven)

SpringBoot3 要求 MP 版本 3.x(适配 Spring6、Jakarta 包)

  1. <!-- MyBatis-Plus SpringBoot3 启动器 -->
  2. <dependency>
  3. <groupId>com.baomidou</groupId>
  4. <artifactId>mybatis-plus-boot-starter</artifactId>
  5. <version>3.5.7</version>
  6. </dependency>
  7. <!-- MySQL 驱动 -->
  8. <dependency>
  9. <groupId>com.mysql</groupId>
  10. <artifactId>mysql-connector-j</artifactId>
  11. <scope>runtime</scope>
  12. </dependency>

六、简单入门示例

1. 实体类 User

  1. @TableName("t_user") // 对应数据库表
  2. public class User {
  3. private Long id;
  4. private String name;
  5. private Integer age;
  6. // getter/setter
  7. }

2. Mapper 接口

  1. public interface UserMapper extends BaseMapper<User> {
  2. // 无需写任何代码,自带全部单表CRUD
  3. }

3. 使用(无需任何XML文件)

  1. @Autowired
  2. private UserMapper userMapper;
  3. // 根据id查用户
  4. User user = userMapper.selectById(1L);
  5. // 新增用户
  6. User newUser = new User();
  7. newUser.setName("李四");
  8. newUser.setAge(22);
  9. userMapper.insert(newUser);

七、总结一句话

MyBatis-Plus 是 MyBatis 的增强工具,在不改变 MyBatis 原有功能的前提下,封装了所有单表基础增删改查,提供 Lambda 查询、分页、逻辑删除等实用能力,极大简化 SpringBoot 操作 MySQL 的开发代码,常搭配 Redis 做缓存使用。