MyBatis-Plus 完整讲解(搭配 SpringBoot3 + MySQL + Redis 场景)
一、MyBatis-Plus 是什么
MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,只做增强不做改变,完全兼容原生 MyBatis,简化 MySQL 数据库 CRUD 开发,大幅减少重复 SQL 代码。
核心定位
- 底层依旧是 MyBatis,MyBatis 所有特性(XML、注解、动态 SQL)全部保留可用;
- 封装通用增删改查,不用写 XML/注解 SQL 就能完成单表操作;
- 配套大量实用插件:分页、逻辑删除、乐观锁、多租户、性能分析等。
二、解决什么痛点(传统 MyBatis 的麻烦)
原生 MyBatis 开发单表时,必须重复写:
- insert、deleteById、updateById、selectById、list、page 等大量重复 XML SQL;
- 分页需要手动写 limit、统计总数,代码冗余;
MP 直接内置通用能力,基础单表操作一行代码搞定。
三、核心内置能力(最常用)
1. 通用 Mapper(BaseMapper)
所有实体 Mapper 继承 BaseMapper<T>,自带 10+ 现成方法:
// 插入insert(entity)// 根据主键删deleteById(id)// 批量删除deleteBatchIds(ids)// 根据主键更新updateById(entity)// 根据主键查询selectById(id)// 批量查询selectBatchIds(ids)// 条件查询selectList(queryWrapper)// 分页查询selectPage(page, queryWrapper)
2. 通用 Service(ServiceImpl + IService)
封装业务层通用方法,比 Mapper 功能更强,自带批量操作、链式查询:
// 批量新增saveBatch(list)// 链式条件查询list(lambdaQuery().eq(User::getName,"张三").getWrapper())
3. Lambda 条件构造器(推荐,杜绝硬编码字段名)
不用写字符串字段,用实体类方法引用,编译报错提前发现:
// 查询 name = "张三" 且 age > 18LambdaQueryWrapper<User> wrapper = Wrappers.lambdaQuery();wrapper.eq(User::getName, "张三").gt(User::getAge, 18);List<User> users = userMapper.selectList(wrapper);
4. 内置常用插件
- 分页插件:自动处理分页 count 查询,不用手动写分页 SQL;
- 逻辑删除:删除不真实 delete,更新
is_deleted=1,查询自动过滤已删数据; - 乐观锁插件:版本号控制并发更新,防止超卖;
- 字段自动填充:创建时间、更新时间自动赋值(create_time、update_time);
- 性能分析插件、多租户插件等。
5. 代码生成器
一键生成:Entity、Mapper、MapperXML、Service、Controller,基础 CRUD 全套代码,新建表零开发。
四、和你技术栈的搭配关系
技术栈:SpringBoot 3.5.9 + MyBatis-Plus + Redis + MySQL
- MySQL:底层持久化数据库,存储业务真实数据;
- MyBatis-Plus:中间层 ORM 框架,负责 Java 对象 ↔ MySQL 数据映射,简化数据库操作;
- Redis:缓存中间件,配合 MP 做查询缓存,减轻 MySQL 压力(比如根据 id 查询用户先查 Redis,无数据再用 MP 查库,写入缓存);
- SpringBoot3:容器,统一管理 MP、Redis、MySQL 数据源配置、事务。
简单数据流示例
查询用户详情: 前端请求 → Controller → Service
- Service 先通过 Redis Template 查询缓存;
- 缓存无数据 → 使用 MyBatis-Plus
userMapper.selectById(id)查询 MySQL; - 将查询结果写入 Redis 缓存,返回数据。
五、SpringBoot3 引入 MP 核心依赖(Maven)
SpringBoot3 要求 MP 版本 3.x(适配 Spring6、Jakarta 包)
<!-- MyBatis-Plus SpringBoot3 启动器 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.7</version></dependency><!-- MySQL 驱动 --><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><scope>runtime</scope></dependency>
六、简单入门示例
1. 实体类 User
@TableName("t_user") // 对应数据库表public class User {private Long id;private String name;private Integer age;// getter/setter}
2. Mapper 接口
public interface UserMapper extends BaseMapper<User> {// 无需写任何代码,自带全部单表CRUD}
3. 使用(无需任何XML文件)
@Autowiredprivate UserMapper userMapper;// 根据id查用户User user = userMapper.selectById(1L);// 新增用户User newUser = new User();newUser.setName("李四");newUser.setAge(22);userMapper.insert(newUser);
七、总结一句话
MyBatis-Plus 是 MyBatis 的增强工具,在不改变 MyBatis 原有功能的前提下,封装了所有单表基础增删改查,提供 Lambda 查询、分页、逻辑删除等实用能力,极大简化 SpringBoot 操作 MySQL 的开发代码,常搭配 Redis 做缓存使用。
