一. 快速入门
1. 使用步骤

1. 添加依赖
XML
<!-- MyBatis-Plus 核心依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.1</version> <!-- 最新版本可到官网查询 -->
</dependency>
<!-- 数据库驱动(根据实际数据库选择) -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
2. 配置数据库连接
java
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/your_db?useSSL=false&serverTimezone=UTC
username: root
password: your_password
# MyBatis-Plus 配置(可选)
mybatis-plus:
mapper-locations: classpath:mapper/*.xml # Mapper XML 路径
type-aliases-package: com.example.entity # 实体类包路径
3. 启动类添加注解
java
@SpringBootApplication
@MapperScan("com.example.mapper") // 扫描 Mapper 接口包
public class MyApplication {
public static void main(String[] args) {
SpringApplication.run(MyApplication.class, args);
}
}
2. 常用注解


3. 常见配置

二. 核心功能
1. 条件构造器

案例:



2. 自定义SQL


3. Service接口




三. 扩展功能
1. 代码生成器
MyBatis-Plus 的代码生成器(Generator)是一个高效的代码自动生成工具,能根据数据库表结构快速生成 实体类(Entity)、Mapper 接口、Service 层、Controller 层 等代码,甚至包括基础的 CRUD 方法和 XML 映射文件,极大减少重复编码工作,尤其适合快速开发和标准化项目结构。
1.1 核心功能
- 多数据源支持:适配 MySQL、Oracle、SQL Server 等主流数据库。
- 自定义模板:支持 Freemarker、Velocity、Beetl 等模板引擎,可自定义代码生成规则(如类名格式、方法注释等)。
- 分层生成:自动生成 Entity、Mapper、Service(接口 + 实现类)、Controller 等分层代码。
- 关联生成 :根据表字段自动生成实体类的注解(如
@TableName、@TableId)、字段映射关系,以及 Mapper XML 中的基础 SQL。 - 配置灵活:可指定生成目录、过滤不需要的表、设置命名策略(如驼峰命名)等。
1.2 使用步骤(以 Spring Boot + MySQL 为例)
(1)添加依赖
在 pom.xml 中引入代码生成器和模板引擎(以 Freemarker 为例):
XML
<!-- MyBatis-Plus 代码生成器 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.3.1</version> <!-- 与 MyBatis-Plus 版本保持一致 -->
</dependency>
<!-- 模板引擎(必须引入,否则无法生成代码) -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.31</version>
</dependency>
(2)编写生成代码
创建一个 CodeGenerator 类,配置生成规则并执行:
java
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.OutputFile;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import java.util.Collections;
public class CodeGenerator {
public static void main(String[] args) {
// 1. 配置数据库连接
FastAutoGenerator.create("jdbc:mysql://localhost:3306/your_db?useSSL=false&serverTimezone=UTC", "root", "your_password")
// 2. 全局配置
.globalConfig(builder -> {
builder.author("your_name") // 设置作者
.outputDir(System.getProperty("user.dir") + "/src/main/java") // 生成文件输出目录(项目的 src/main/java)
.commentDate("yyyy-MM-dd") // 注释日期格式
.disableOpenDir(); // 生成后不自动打开文件夹
})
// 3. 包配置(指定各层代码的包路径)
.packageConfig(builder -> {
builder.parent("com.example.demo") // 父包名
.moduleName("user") // 模块名(可选,如多模块项目)
.entity("entity") // 实体类包名
.mapper("mapper") // Mapper 接口包名
.service("service") // Service 接口包名
.serviceImpl("service.impl") // Service 实现类包名
.controller("controller") // Controller 包名
.xml("mapper.xml") // Mapper XML 存放目录(默认 resources/mapper/xml)
.pathInfo(Collections.singletonMap(OutputFile.xml,
System.getProperty("user.dir") + "/src/main/resources/mapper")); // XML 输出路径
})
// 4. 策略配置(表和字段的生成规则)
.strategyConfig(builder -> {
builder.addInclude("user") // 指定要生成的表名(多表用逗号分隔)
.addTablePrefix("t_", "sys_") // 过滤表前缀(如 t_user 生成 User 实体)
// 实体类策略
.entityBuilder()
.enableLombok() // 开启 Lombok 注解(@Data 等)
.enableTableFieldAnnotation() // 为字段添加 @TableField 注解
.idType(com.baomidou.mybatisplus.generator.config.rules.IdType.AUTO) // 主键策略(自增)
// Mapper 策略
.mapperBuilder()
.enableBaseResultMap() // 生成基本的 ResultMap
.enableBaseColumnList() // 生成基本的 ColumnList
// Service 策略
.serviceBuilder()
.formatServiceFileName("%sService") // Service 接口名格式(如 UserService)
.formatServiceImplFileName("%sServiceImpl") // Service 实现类名格式
// Controller 策略
.controllerBuilder()
.enableRestStyle(); // 开启 RESTful 风格(生成 @RestController)
})
// 5. 模板引擎配置(使用 Freemarker)
.templateEngine(new FreemarkerTemplateEngine())
// 6. 执行生成
.execute();
}
}
生成代码后,需手动在启动类添加 @MapperScan("com.example.demo.mapper") 扫描 Mapper 接口。
(3)关键配置说明
| 配置项 | 作用 |
|---|---|
| 数据库连接 | 通过 create() 方法指定 URL、用户名、密码,用于读取表结构。 |
| 全局配置 | 作者、输出目录、注释格式等,outputDir 需指向项目的 src/main/java。 |
| 包配置 | 定义各层代码的包路径(如实体类放 entity 包),XML 建议放 resources/mapper。 |
| 策略配置 | - addInclude:指定生成的表名(必选);- addTablePrefix:过滤表前缀(如 t_user 生成 User);- 实体类:开启 Lombok、主键策略等;- Controller:开启 REST 风格(生成 @RestController)。 |
| 模板引擎 | 选择 Freemarker 或其他引擎,需与依赖对应。 |
(4)生成结果
执行 CodeGenerator.main() 后,会在指定目录生成以下文件:
perl
src/main/java/com/example/demo/user/
├─ entity/User.java // 实体类(带 Lombok 和 MyBatis-Plus 注解)
├─ mapper/UserMapper.java // Mapper 接口(继承 BaseMapper)
├─ service/UserService.java // Service 接口(继承 IService)
├─ service/impl/UserServiceImpl.java // Service 实现类(继承 ServiceImpl)
└─ controller/UserController.java // Controller 类(REST 风格)
src/main/resources/mapper/
└─ UserMapper.xml // Mapper XML(基础 CRUD 语句)
1.3 更多用法
(1)自定义模板:如果默认生成的代码不符合需求,可复制 MyBatis-Plus 的默认模板(参考官方模板)到项目的 src/main/resources/templates 目录,修改后通过 templateConfig 指定自定义模板路径。
(2)过滤字段或表
忽略某些表:strategyConfig.builder().addExclude("table_name")
忽略某些字段:entityBuilder().addIgnoreColumns("column_name")
(3)批量生成多张表:在 addInclude 中传入多个表名,如 addInclude("user", "order", "product")。
2. 分页插件
简单使用



3. 逻辑删除

有了删除逻辑字段后,每次的更新或查询都要在where后加上这个字段
