Skip to content

mybatis-plus使用文档

参考地址:简介 | MyBatis-Plus (baomidou.com)

MyBatis-Plus 解决什么问题

MyBatis-Plus 是 MyBatis 的增强工具,它不改变 MyBatis 的基本使用方式,主要减少通用 CRUD、分页、条件构造、代码生成等重复工作。

要系统理解它的底层过程,建议先看 MyBatis-Plus 核心全过程原理,里面会把 BaseMapperWrapper、分页插件、逻辑删除、自动填充、乐观锁、多租户和排查流程串起来。

它适合:

  1. 单表 CRUD 较多的后台管理系统。
  2. 需要快速开发基础增删改查接口。
  3. 希望保留 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
自动填充创建时间、更新时间、创建人等字段自动写入
逻辑删除使用字段标记删除状态,而不是物理删除

深入学习路线

学习顺序内容目标
1MyBatis-Plus 核心全过程原理理解增强 MyBatis 的完整链路
2Wrapper 条件构造器理解链式条件如何生成 SQL
3新版代码生成器理解代码生成器只是模板,不等于架构设计
4MyBatis 核心全过程原理回到 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 的关系

场景推荐方式
简单单表 CRUDMyBatis-Plus 通用方法
动态条件查询MyBatis-Plus Wrapper
复杂多表查询MyBatis XML
性能敏感 SQL手写 SQL 并分析执行计划
批量导入导出结合批处理或专门的导入方案

MyBatis-Plus 不是替代 MyBatis,而是把常见单表操作自动化。复杂 SQL 仍然应该回到 MyBatis 原生能力。

使用注意事项

  1. 不要把很复杂的业务查询全部硬塞到 Wrapper 链式调用里,可读性会变差。
  2. 逻辑删除字段要和唯一索引、历史数据查询一起设计。
  3. 分页插件要配置数据库类型,避免方言生成错误。
  4. 更新操作要避免空条件,必要时开启防全表更新配置。
  5. 自动填充字段要放在统一处理器里,避免业务代码到处手写。