mybatis-plus使用文档
MyBatis-Plus 解决什么问题
MyBatis-Plus 是 MyBatis 的增强工具,它不改变 MyBatis 的基本使用方式,主要减少通用 CRUD、分页、条件构造、代码生成等重复工作。
要系统理解它的底层过程,建议先看 MyBatis-Plus 核心全过程原理,里面会把 BaseMapper、Wrapper、分页插件、逻辑删除、自动填充、乐观锁、多租户和排查流程串起来。
它适合:
- 单表 CRUD 较多的后台管理系统。
- 需要快速开发基础增删改查接口。
- 希望保留 MyBatis XML 能力,同时减少样板代码的项目。
基本调用流程
mermaid
flowchart TD
A[Controller 接收请求] --> B[Service 调用业务方法]
B --> C[BaseMapper 或自定义 Mapper]
C --> D[MyBatis-Plus 生成通用 SQL]
D --> E[MyBatis 执行 SQL]
E --> F[数据库返回结果]
F --> G[封装响应]核心能力
| 能力 | 说明 |
|---|---|
BaseMapper | 提供通用增删改查方法 |
IService | 提供 Service 层通用方法 |
| Wrapper | 链式构造查询条件 |
| 分页插件 | 自动处理分页查询 |
| 代码生成器 | 根据表结构生成实体、Mapper、Service |
| 自动填充 | 创建时间、更新时间、创建人等字段自动写入 |
| 逻辑删除 | 使用字段标记删除状态,而不是物理删除 |
深入学习路线
| 学习顺序 | 内容 | 目标 |
|---|---|---|
| 1 | MyBatis-Plus 核心全过程原理 | 理解增强 MyBatis 的完整链路 |
| 2 | Wrapper 条件构造器 | 理解链式条件如何生成 SQL |
| 3 | 新版代码生成器 | 理解代码生成器只是模板,不等于架构设计 |
| 4 | MyBatis 核心全过程原理 | 回到 MyBatis 执行链路理解最终 SQL |
Wrapper 示例
java
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getStatus, 1)
.like(User::getName, keyword)
.orderByDesc(User::getCreateTime);
List<User> users = userMapper.selectList(wrapper);使用 LambdaQueryWrapper 的好处是字段引用来自实体方法,重构字段名时更安全。
和 MyBatis 的关系
| 场景 | 推荐方式 |
|---|---|
| 简单单表 CRUD | MyBatis-Plus 通用方法 |
| 动态条件查询 | MyBatis-Plus Wrapper |
| 复杂多表查询 | MyBatis XML |
| 性能敏感 SQL | 手写 SQL 并分析执行计划 |
| 批量导入导出 | 结合批处理或专门的导入方案 |
MyBatis-Plus 不是替代 MyBatis,而是把常见单表操作自动化。复杂 SQL 仍然应该回到 MyBatis 原生能力。
使用注意事项
- 不要把很复杂的业务查询全部硬塞到 Wrapper 链式调用里,可读性会变差。
- 逻辑删除字段要和唯一索引、历史数据查询一起设计。
- 分页插件要配置数据库类型,避免方言生成错误。
- 更新操作要避免空条件,必要时开启防全表更新配置。
- 自动填充字段要放在统一处理器里,避免业务代码到处手写。
