SpringBoot 集成 MyBatis/MyBatis-Plus使用示例教程
作者:顾北12
MyBatis 作为一款优秀的持久层框架,以其灵活的 SQL 定制能力和低侵入性成为 Java 开发中主流的 ORM 方案。而 SpringBoot 凭借 “约定优于配置” 的理念,大幅简化了项目搭建和配置流程。本文将从 MyBatis 基础回顾入手,一步步讲解 SpringBoot 集成 MyBatis、MyBatis-Plus 的完整流程,同时补充 Lombok、核心注解、常见配置等关键知识点,帮助开发者快速上手。
SpringBoot集成Mybatis
回顾MyBatis
MyBatis 是一款半自动化的 ORM(对象关系映射)框架,它摒弃了传统 JDBC 的硬编码式 SQL 操作,将 SQL 语句与 Java 代码解耦,支持 XML 或注解两种方式编写 SQL,同时提供结果映射、参数绑定等核心功能。
1.2 MyBatis 核心组件
- SqlSessionFactory:会话工厂,MyBatis 核心入口,通过配置文件(mybatis-config.xml)或代码构建,负责创建 SqlSession。
- SqlSession:会话对象,封装了数据库操作的所有方法(增删改查),是 MyBatis 与数据库交互的核心对象,线程不安全,需用完即关。
- Mapper 接口:数据访问层接口,MyBatis 会通过动态代理生成接口的实现类,开发者只需定义接口和 SQL,无需编写实现类。
- XML 映射文件:核心配置 SQL 语句、参数映射、结果映射等,与 Mapper 接口一一对应(也可通过注解替代)。
- 配置文件繁琐(需手动配置数据源、SqlSessionFactory、Mapper 扫描等);
- 重复代码多(如 SqlSession 创建、关闭,事务处理等);
- 基础 CRUD 操作需手动编写 SQL,效率低;
- 分页、逻辑删除等功能需手动实现。
SpringBoot集成Mybatis
环境准备
- JDK 8+
- SpringBoot 2.7.x/3.x
- MySQL 8.0+
- Maven/Gradle
MyBatis-Spring-Boot-Starter
MyBatis-Boot 是 MyBatis 官方提供的 SpringBoot 集成组件(mybatis-spring-boot-starter),核心目标是简化 MyBatis 在 SpringBoot 项目中的配置,实现 “零配置” 快速集成。
核心优势:
- 自动配置:自动检测数据源、自动创建 SqlSessionFactory 和 SqlSessionTemplate(线程安全的 SqlSession 封装);
- 简化依赖:通过 Starter 依赖一键引入 MyBatis 及 Spring 集成所需的所有包,无需手动管理依赖版本;
- 无缝集成 Spring:将 Mapper 接口自动注册为 Spring Bean,支持 Spring 事务管理;
- 灵活扩展:保留 MyBatis 原生配置能力,可通过配置文件或注解覆盖默认配置
创建项目并集成:
第一步,创建SpringBoot项目,项目信息设置如下图所示:

第二步:选择SpringBoot版本为3.3.5,添加SQL模块下的"Mybatis Framework"和"MySQL Driver依赖"如下图所示,点击"Create"按钮完成创建项目:

项目创建好了以后会自动引入对应的依赖:

第三步配置相关信息,可以使用application.propertiest以及application.yml,这里以propertiest为例:
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://127.0.0.1:3306/《数据库名称》?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai spring.datasource.username=用户名 spring.datasource.password=密码 # 1. 指定 MyBatis 全局配置文件路径(mybatis-config.xml),可配置全局参数(如缓存、插件、驼峰转换等) mybatis.config-location=classpath:mybatis-config.xml # 2. 指定 MyBatis Mapper 映射文件(XML)的扫描路径,匹配 classpath 下 mybatis/mapper 目录下的所有 .xml 文件 mybatis.mapper-locations=classpath:mybatis/mapper/*.xml # 3. 指定实体类包路径,配置后在 XML 中可直接使用实体类名(如 User)代替全类名(com.yugonyun.demo.entity.User),简化 resultType/parameterType 配置 mybatis.type-aliases-package=com.yugonyun.demo.entity
第四步:在启动类中添加对Mapper包扫描@MapperScan,SpringBoot启动时就会扫描该路径下的Mapper:

- 或者直接在Mapper接口加上@Mapper注解,建议直接使用上面的方式不然需要一个个在接口上添加注解
- 第五步:编码resources/mabatis目录下添加mybatis-config.xml,配置一些全局属性
<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="autoMappingBehavior" value="FULL"/>
</settings>编写实体类:
public class SysRole {
private Long id; //主键ID
private String code; //角色编码
private String roleName; //角色名称
private Long createdUserId; //创建者
private Date createdTime; //创建时间
private Long updatedUserId; //修改者
private Date updatedTime; //修改时间
//省略get/set...
}
编写Mapper接口:
public interface SysRoleMapper {
/*
* 查询所有角色信息
* */
public List<SysRole> getAll();
}在resources/mybaits/mapper目录下创建并编写SysRoleMapper.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.ktjiaoyu.mapper.SysRoleMapper">
<select id="getAll" resultType="com.ktjiaoyu.entity.SysRole">
select * from sys_role
</select>
</mapper>第六步:测试编写Junit测试类SysRoleMapperTester.java:
@SpringBootTest
public class SysRoleMapperTest {
@Autowired
private SysRoleMapper sysRoleMapper;
@Test
public void testSelectAll() {
List<SysRole> sysRoles = sysRoleMapper.getAll();
for (SysRole sysRole : sysRoles) {
System.out.println(sysRole);
}
}
}运行效果:

此处无法看到输出执行的SQL,并且会输出其他日志信息,可以在application.propertis中配置日志输出:
logging.level.root=warn logging.level.com.yugonyun.mapper=trace logging.pattern.console=%p%m%n
至此,SpringBoot和Mybatis集成就完成了
SpringBoot集成Mybatis-Plus
Mybaits-Plus简介
MyBatis-Plus(简称 MP)是基于 MyBatis 的增强工具,在保留 MyBatis 原有功能的基础上,实现了 “无 SQL” CRUD、分页、逻辑删除、乐观锁等功能,大幅提升开发效率。

什么是 MyBatis-Plus?
MyBatis-Plus 核心理念是 “只做增强,不做改变”,它封装了基础 CRUD 操作,无需编写 SQL 即可实现数据访问,同时支持自定义 SQL 扩展,完美兼容 MyBatis 原有代码。
核心优势
- 内置通用 Mapper/Service,无需编写基础 CRUD SQL;
- 支持自动分页、逻辑删除、乐观锁、枚举映射等高频功能;
- 强大的条件构造器(QueryWrapper),灵活拼接复杂 SQL;
- 支持主键自动生成(雪花算法、自增等);
- 无缝兼容 MyBatis 配置和代码。
框架结构:
Lombok简介
Lombok 是一款 Java 开发插件,通过注解(如 @Data、@NoArgsConstructor)自动生成 getter/setter/ 构造器 /toString 等代码,核心优势:
- 简化实体类代码,减少冗余;
- 提高开发效率,避免手动维护 getter/setter;
- 支持链式编程(
@Accessors(chain = true))。
导入依赖:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>使用示例:
// 链式调用(可选)
@Accessors(chain = true)
// 核心简化:getter/setter/toString/equals/hashCode + 无参构造
@Data
// 补充全参构造(@Data 不含全参)
@AllArgsConstructor
// 补充无参构造(若@Data的@RequiredArgsConstructor覆盖了无参,需显式声明)
@NoArgsConstructor
public class User {
private Long id;
private String username;
// 排除toString输出
@ToString.Exclude
private String password;
private Integer age;
}MyBatis-Plus快速上手
替换依赖
将 MyBatis Starter 替换为 MyBatis-Plus Starter(无需额外引入 MyBatis 依赖):
<!-- MyBatis-Plus SpringBoot 集成包 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.1</version>
</dependency>添加配置:
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver spring.datasource.url=jdbc:mysql://127.0.0.1:3306/ktsms_db?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai spring.datasource.username=root spring.datasource.password=root logging.level.root=warn logging.level.com.yugonyun.mapper=trace logging.pattern.console=%p%m%n
启动类
在启动类中添加Mapper包的扫描,和之前Mybatis一样的操作:

编码:
编写实体类SysRole:
@Data
@NoArgsConstructor
@AllArgsConstructor
// 表名
@TableName("sys_role")
public class SysRole {
// 主键ID, 自增
@TableId(type = IdType.AUTO)
private Long id; //主键ID
private String code; //角色编码
private String roleName; //角色名称
private Long createdUserId; //创建者
private Date createdTime; //创建时间
private Long updatedUserId; //修改者
private Date updatedTime; //修改时间
}- @TableName 注解在类上,指定数据库表名(实体名与表名不一致时需要指定)
- @Tableld(type =ldType.AUTO)注解在主键属性上,且指定主键生成策略为自动增长
- @TableField 注解在属性上,指定数据库字段名(不满足默认匹配规则时需要指定)。属性和字段名默认匹配规则是全小写的属性对应同名的字段:采用骆驼命名规则的属性对应的字段名为两个单词之间使用_下划线连接,例如:usrName 属性默认对应的字段名为 usr name。
编写Mapper接口:
public interface SysRoleMapper extends BaseMapper<SysRole> {
}测试:
创建SysRoleMapperTester.java
@SpringBootTest
public class SysRoleMapperTest {
@Autowired
private SysRoleMapper sysRoleMapper;
@Test
public void testSelectAll() {
List<SysRole> sysRoles = sysRoleMapper.selectList(null);
for (SysRole sysRole : sysRoles) {
System.out.println(sysRole);
}
}
}- 至此,SpringBoot集成Mybaits-Plus完成,通过以上几个步骤我们就实现了sysRole查询所有数据的功能,基本的CRUD都能完成,几乎不用写SQL语句
常用注解
MybatisPlus如何知道我们要査询的是哪张表?表中有哪些字段呢?
MybatisPlus 就是根据 PO 实体的信息来推断出表的信息,从而生成SQL的。默认情况下:
- MybatisPlus 会把 PO 实体的类名驼峰转下划线作为表名MybatisPlus 会把PO 实体的所有变量名驼峰转下划线作为表的字段名,并根据变量类D型推断字段类型
- MybatisPlus 会把名为id的字段作为主键
- 但很多情况下,默认的实现与实际场景不符,因此 MybatisPlus提供了一些注解便于我们声明表信息。
@TableName
全类名:com.baomidou.mybatisplus.annotation.TableName
核心作用
指定实体类对应的数据库表名(解决实体类名与表名不一致的问题)。
常用属性
| 属性名 | 类型 | 作用 |
|---|---|---|
| value | String | 表名(核心属性,可省略属性名直接写值) |
| schema | String | 数据库 schema(多租户 / 多 schema 场景) |
| keepGlobalPrefix | boolean | 是否保留全局表前缀(配合 mybatis-plus.global-config.db-config.table-prefix 使用) |
@TableId
全类名:com.baomidou.mybatisplus.annotation.TableId
核心作用
标记实体类的主键字段,指定主键生成策略。
常用属性
| 属性名 | 类型 | 作用 |
|---|---|---|
| value | String | 主键字段名(实体属性名与表主键字段名不一致时使用) |
| type | IdType(枚举) | 主键生成策略(核心属性) |
IdType 枚举值说明
| 枚举值 | 作用 |
|---|---|
| AUTO | 数据库自增(需保证数据库表主键设置为自增) |
| NONE | 无策略(需手动设置主键值) |
| INPUT | 手动输入(与 NONE 类似,MP 不干预,需手动赋值) |
| ASSIGN_ID | 雪花算法生成主键(默认,支持 Long/Integer/String 类型,适合分布式场景) |
| ASSIGN_UUID | 生成 UUID(不含中划线,String 类型) |
| ID_WORKER | 已过时,等效 ASSIGN_ID(仅支持 Long 类型) |
| ID_WORKER_STR | 已过时,等效 ASSIGN_ID(String 类型) |
| UUID | 已过时,等效 ASSIGN_UUID |
@TableField
全类名
com.baomidou.mybatisplus.annotation.TableField
核心作用
指定实体属性与数据库表字段的映射关系,支持排除字段、字段填充、忽略字段等功能。
常用属性
| 属性名 | 类型 | 作用 |
|---|---|---|
| value | String | 字段名(实体属性名与表字段名不一致时使用) |
| exist | boolean | 是否为数据库表字段(默认 true,false 表示该属性非表字段) |
| fill | FieldFill(枚举) | 字段填充策略(新增 / 更新时自动填充,如创建时间、更新时间) |
| select | boolean | 查询时是否包含该字段(默认 true,false 表示查询时忽略) |
| insertStrategy | FieldStrategy(枚举) | 插入时的字段验证策略(如 NOT_NULL:非空才插入) |
| updateStrategy | FieldStrategy(枚举) | 更新时的字段验证策略(如 IGNORED:忽略空值,强制更新) |
| whereStrategy | FieldStrategy(枚举) | 作为查询条件时的验证策略 |
核心功能
从以上步骤中,我们可以看到集成 MyBatis-Plus非常的简单,只需要引入 starter 启动器,并配置mapper 扫描路径即可。
但 MyBatis-Plus的强大远不止这些功能,想要详细了解 MyBatis-Plus 的强大功能?那就继续往下看吧!
CRUD接口:
MyBatis-Plus通用的CRUD功能都在 BaseMapper<T>接口中:

说明:
- BaseMapper 接口封装通用CRUD,为Mybatis-Plus 启动时自动解析实体表关系映射转换为 Mybatis 内部对象注入容器
- 参数 Serializable 为任意类型主键,Mybatis-Plus不推荐使用复合主键,约定每一张表都有自己的唯一id 主键
- 泛型T为任意实体对象
- 对象 Wrapper 为条件构造器
条件构造器:
条件构造器(Wrapper)是 MyBatis-Plus 实现动态 SQL 的核心,通过链式调用拼接 WHERE 条件,无需手动拼接 SQL 字符串,支持查询、更新、删除操作。
核心构造器类型
| 构造器类型 | 适用场景 | 核心特点 |
|---|---|---|
| QueryWrapper<T> | 查询 / 删除条件构造 | 基础版,字段名硬编码 |
| UpdateWrapper<T> | 更新条件构造 | 支持直接设置更新字段 |
| LambdaQueryWrapper<T> | 查询 / 删除条件构造(Lambda) | 类型安全,避免字段名写错 |
| LambdaUpdateWrapper<T> | 更新条件构造(Lambda) | 类型安全,无字段硬编码 |
常用条件方法
| 方法 | 作用 | 示例 |
|---|---|---|
| eq | 等于 = | eq("age", 20) |
| gt/ge | 大于 >/ 大于等于≥ | gt("age", 18) |
| lt/le | 小于 < / 小于等于≤ | lt("age", 30) |
| like | 模糊查询 LIKE | like ("name", "张") |
| in | IN 条件 | in("id", Arrays.asList(1,2,3)) |
| orderByDesc | 降序排序 | orderByDesc("age") |
| select | 指定查询字段 | select("id", "name") |
| set | 更新字段赋值 | set("age", 21) |
使用示例
1. QueryWrapper(基础查询)
QueryWrapper<User> wrapper = new QueryWrapper<User>()
.eq("user_name", "张三")
.gt("age", 18)
.like("email", "qq.com");
List<User> list = userMapper.selectList(wrapper);2.UpdateWrapper(更新操作)
UpdateWrapper<User> wrapper = new UpdateWrapper<User>()
.eq("user_name", "张三")
.set("age", 22)
.setSql("age = age + 1"); // 支持SQL片段
userMapper.update(null, wrapper);3.LambdaQueryWrapper(类型安全查询)
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<User>()
.eq(User::getUserName, "张三")
.gt(User::getAge, 18);
List<User> list = userMapper.selectList(wrapper);注意事项
- Lambda 版构造器通过实体类方法引用字段(如 User::getAge),避免字段名硬编码错误;
- UpdateWrapper 可直接通过 set/setSql 设置更新字段,无需创建实体类;
- 条件默认以 AND 拼接,需 OR 时调用
.or()方法即可。
到此这篇关于SpringBoot 集成 MyBatis/MyBatis-Plus使用示例教程的文章就介绍到这了,更多相关SpringBoot 集成 MyBatis/MyBatis-Plus 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
您可能感兴趣的文章:
- springboot集成Mybatis-plus-join-boot-start详解
- SpringBoot同时集成Mybatis和Mybatis-plus框架
- SpringBoot与MyBatis-Plus的高效集成方式
- springboot集成mybatis-plus全过程
- Springboot集成Mybatis-plus、ClickHouse实现增加数据、查询数据功能
- springboot3集成mybatis-plus报sqlSession异常的问题解决
- springBoot集成mybatis 转换为 mybatis-plus方式
- SpringBoot集成Mybatis-Plus多租户架构实现
- springboot集成mybatis-plus遇到的问题及解决方法
