Skip to content

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、selectPage
java
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、分页、主键策略、逻辑删除、代码生成
主要插件?分页、乐观锁、防全表更新、多租户