Appearance
MyBatis-Plus 概述与架构
MyBatis-Plus(简称 MP)是国人开发的一个 MyBatis 增强工具,在 MyBatis 的基础上只做增强不做改变,简化开发、提高效率。它是目前国内使用最广泛的 MyBatis 增强框架。
一、MyBatis-Plus 是什么?
一句话:
MyBatis-Plus = MyBatis + 通用 CRUD + 条件构造器 + 分页 + 代码生成
它不替代 MyBatis,而是在 MyBatis 之上做增强核心特性:
① 无侵入
只做增强不做改变,引入它不会影响现有 MyBatis 项目
② 通用 CRUD
BaseMapper 提供 17 种通用方法,单表操作零 SQL
③ 条件构造器
Lambda 表达式构建查询条件,类型安全,告别字符串硬编码
④ 分页插件
内置物理分页,一行代码搞定
⑤ 主键策略
支持雪花算法(分布式 ID)、自增、UUID 等多种策略
⑥ 逻辑删除
@TableLogic 注解,配置即生效
⑦ 自动填充
创建时间、更新时间自动填充
⑧ 乐观锁
@Version 注解,防止并发更新覆盖
⑨ 代码生成器
通过配置生成 Entity、Mapper、Service、Controller二、架构设计
MyBatis-Plus 架构(在 MyBatis 之上增强):
┌─────────────────────────────────────────────────┐
│ MyBatis-Plus 增强层 │
│ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │
│ │BaseMapper│ │Wrapper │ │ 分页插件 │ │
│ │通用 CRUD │ │条件构造器│ │PaginationInner│ │
│ └──────────┘ └──────────┘ └──────────────┘ │
│ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │
│ │主键策略 │ │逻辑删除 │ │ 自动填充 │ │
│ │IdType │ │@TableLogic│ │MetaObject │ │
│ └──────────┘ └──────────┘ └──────────────┘ │
│ ┌──────────┐ ┌──────────┐ ┌──────────────┐ │
│ │乐观锁 │ │代码生成器│ │ 多数据源 │ │
│ │@Version │ │Generator │ │@DS │ │
│ └──────────┘ └──────────┘ └──────────────┘ │
└──────────────────────┬──────────────────────────┘
│
┌──────────────────────▼──────────────────────────┐
│ MyBatis 原生层 │
│ SqlSession → Executor → StatementHandler → JDBC│
└─────────────────────────────────────────────────┘三、核心组件
3.1 BaseMapper
作用:通用 Mapper 接口,提供 17 种内置 CRUD 方法
核心方法:
插入:insert、insertBatch
删除:deleteById、deleteByMap、deleteBatchIds
修改:updateById、update
查询:selectById、selectBatchIds、selectByMap、selectOne、selectCount、selectList、selectPagejava
public interface UserMapper extends BaseMapper<User> {
// 继承了 17 种通用方法,不需要写任何代码
// 自定义方法仍然可以像 MyBatis 一样写
}3.2 IBaseService / IService
作用:通用 Service 接口,在 BaseMapper 基础上封装了批量操作和链式调用
核心方法:
save / saveBatch / saveOrUpdate / saveOrUpdateBatch
remove / removeById / removeByMap
update / updateById / updateBatchById
getById / list / listByIds / count / page
query() / lambdaQuery() → 链式调用
update() / lambdaUpdate() → 链式更新3.3 Wrapper(条件构造器)
作用:以 Lambda 表达式构建 SQL WHERE 条件,类型安全
四种 Wrapper:
QueryWrapper → 普通条件查询(字符串字段名)
UpdateWrapper → 普通条件更新
LambdaQueryWrapper → Lambda 条件查询(推荐)
LambdaUpdateWrapper → Lambda 条件更新(推荐)3.4 插件体系
MyBatis-Plus 内置插件:
PaginationInnerInterceptor → 分页插件
OptimisticLockerInnerInterceptor → 乐观锁
BlockAttackInnerInterceptor → 防全表更新/删除
IllegalSQLInnerInterceptor → 非法 SQL 拦截
DynamicTableNameInnerInterceptor → 动态表名
TenantLineInnerInterceptor → 多租户
DataPermissionInterceptor → 数据权限四、与 MyBatis 的关系
MyBatis-Plus 不是替代 MyBatis,而是增强:
① MyBatis-Plus 启动时自动注入 BaseMapper 的 SQL
→ 通过 MybatisSqlSessionFactoryBuilder 构建 SqlSessionFactory
② 自定义方法仍然使用 MyBatis 原生方式
→ XML 映射、注解、动态 SQL 完全兼容
③ 你可以在 MP 项目中同时使用:
- BaseMapper 通用方法(零 SQL)
- Mapper XML 自定义方法(原生 MyBatis)
- 注解方式(@Select 等)五、面试要点
| 问题 | 答案要点 |
|---|---|
| MyBatis-Plus 是什么? | MyBatis 增强工具,通用 CRUD + 条件构造器 + 分页 |
| 和 MyBatis 什么关系? | 只做增强不做改变,完全兼容 MyBatis |
| 核心特性? | BaseMapper、Wrapper、分页、主键策略、逻辑删除、代码生成 |
| 主要插件? | 分页、乐观锁、防全表更新、多租户 |
