MyBatis-Plus快速入门
MyBatis-Plus(MP)在 Spring Boot 3 项目中的完整使用教程,涵盖从依赖引入、配置、实体类、Mapper 编写到分页、条件构造器等核心功能,适用于 2026 年当前主流开发环境(Spring Boot 3 + Java 17/21 + Jakarta EE)。
一、为什么用 MyBatis-Plus?
- 无侵入:只增强 MyBatis,不改变其原有功能
- CRUD 零 SQL:内置通用 Mapper,单表操作无需写 XML
- 支持 Lambda 查询:类型安全,避免字符串硬编码
- 分页插件:自动分页,兼容 Spring Boot 3
- 代码生成器:一键生成 Entity/Mapper/Service/Controller
注意:Spring Boot 3 必须使用
mybatis-plus-spring-boot3-starter
二、添加依赖(Maven)
<!-- 父 POM 的 <properties> 中 -->
<properties>
<mybatis-plus.version>3.5.7</mybatis-plus.version> <!-- 截至 2026 年 1 月最新 -->
</properties>
<!-- 子模块或主模块的 dependencies -->
<dependencies>
<!-- Spring Boot Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- MyBatis-Plus for Spring Boot 3 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot3-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
<!-- 数据库驱动(以 MySQL 为例) -->
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<!-- Lombok(可选但推荐) -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
</dependency>
</dependencies>
❌ 不要使用
mybatis-plus-boot-starter(那是给 Spring Boot 2 用的!)
三、配置文件(application.yml)
spring:
datasource:
url: jdbc:mysql://localhost:3306/test?useSSL=false&serverTimezone=Asia/Shanghai&characterEncoding=utf8
username: root
password: 123456
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 打印 SQL(开发用)
global-config:
db-config:
id-type: auto # 主键自增
table-prefix: tbl_ # 表前缀(可选)
四、编写实体类(Entity)
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
@Data
@TableName("user") // 指定表名
public class User {
@TableId(type = IdType.AUTO) // 主键策略
private Long id;
private String name;
private Integer age;
private String email;
}
@TableName:指定数据库表名
@TableId:标识主键字段
@TableField:用于字段与列名不一致时(如nickName→nick_name)
五、编写 Mapper 接口
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
@Mapper // 或在启动类加 @MapperScan("com.smart.mapper")
public interface UserMapper extends BaseMapper<User> {
// 继承 BaseMapper 后,已拥有 insert/update/delete/selectById/selectList 等方法
}
无需写实现类!无需 XML!
六、基本 CRUD 示例
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public void demo() {
// 插入
User user = new User();
user.setName("张三");
user.setAge(25);
userMapper.insert(user); // 自动回填 id
// 根据 ID 查询
User dbUser = userMapper.selectById(1L);
// 更新
dbUser.setAge(26);
userMapper.updateById(dbUser);
// 删除
userMapper.deleteById(1L);
// 查询全部
List<User> list = userMapper.selectList(null);
}
}
七、条件查询(QueryWrapper / LambdaQueryWrapper)
方式1:QueryWrapper(字符串字段)
QueryWrapper<User> query = new QueryWrapper<>();
query.eq("age", 25)
.like("name", "张")
.orderByDesc("id");
List<User> users = userMapper.selectList(query);
方式2:LambdaQueryWrapper(类型安全,推荐)
LambdaQueryWrapper<User> query = new LambdaQueryWrapper<>();
query.eq(User::getAge, 25)
.like(User::getName, "张")
.orderByDesc(User::getId);
List<User> users = userMapper.selectList(query);
优势:编译时检查字段是否存在,避免拼写错误
八、分页查询(Spring Boot 3 兼容)
1. 配置分页插件
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor());
return interceptor;
}
}
2. 使用分页
public IPage<User> getUserPage(int pageNum, int pageSize) {
IPage<User> page = new Page<>(pageNum, pageSize);
LambdaQueryWrapper<User> query = new LambdaQueryWrapper<>();
query.ge(User::getAge, 18);
return userMapper.selectPage(page, query);
}
返回结果包含:
records: 当前页数据total: 总记录数pages: 总页数
九、自定义 SQL(需要复杂查询时)
1. 在 Mapper 中定义方法
public interface UserMapper extends BaseMapper<User> {
@Select("SELECT * FROM user WHERE age > #{minAge}")
List<User> selectByMinAge(@Param("minAge") int minAge);
}
2. 或使用 XML(推荐大型项目)
- 创建
resources/mapper/UserMapper.xml - 配置扫描路径:
mybatis-plus:
mapper-locations: classpath*:mapper/**/*.xml
十、代码生成器(快速开发)
添加依赖:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.5.7</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<scope>provided</scope>
</dependency>
运行生成代码(示例):
public class CodeGenerator {
public static void main(String[] args) {
FastAutoGenerator.create("jdbc:mysql://...", "root", "123456")
.globalConfig(builder -> {
builder.author("smart")
.outputDir(System.getProperty("user.dir") + "/src/main/java");
})
.packageConfig(builder -> {
builder.parent("com.smart");
})
.strategyConfig(builder -> {
builder.addInclude("user", "order"); // 表名
})
.execute();
}
}
官方文档 & 资源
- 官网:https://baomidou.com/
- GitHub:https://github.com/baomidou/mybatis-plus
- 示例项目:https://github.com/baomidou/mybatis-plus-samples
总结:MyBatis-Plus 核心优势
| 功能 | 说明 |
|---|---|
| 零 SQL 单表 CRUD | 继承 BaseMapper 即可 |
| Lambda 查询 | 类型安全,避免字符串错误 |
| 自动分页 | 配置插件后一行代码分页 |
| 代码生成 | 快速生成全套 CRUD 代码 |
| 兼容 Spring Boot 3 | 使用 mybatis-plus-spring-boot3-starter |
建议:新项目直接用 MP,老项目逐步替换原生 MyBatis。

浙公网安备 33010602011771号