在前文内容中,我们完成了Spring Boot核心基础的复盘,吃透了高频注解、基础配置和启动机制,夯实了入门根基。对于零基础学习者而言,掌握基础后,下一步最核心的需求就是“操作数据库”——毕竟任何Spring Boot项目,都离不开数据的存储与查询(如商品数据、订单数据、用户数据)。
今天,我们进入Spring Boot学习的又一个基础点,也是基础入门的关键实操内容:Spring Boot整合MyBatis-Plus。MyBatis-Plus是MyBatis的增强工具,核心优势是“简化开发、提高效率”,无需编写繁琐的SQL语句,就能实现数据库的增删改查,完美适配零基础入门者,也是企业基础开发中最常用的数据库操作框架。
本文“从基础到入门”导向,摒弃复杂的底层原理,聚焦“零基础能看懂、能实操”,衔接前文搭建的Spring Boot基础项目,手把手教你引入依赖、配置环境、编写代码,实现数据库的CRUD(增删改查)操作,每一步都搭配具体代码示例和效果验证,让你快速掌握数据库操作的核心方法,为后续编写完整业务项目打下坚实基础。
本文适合刚掌握Spring Boot基础注解、配置的零基础学习者,建议结合前文搭建的springboot-basic项目同步实操,跟着步骤一步步配置、编写代码,重点理解“MyBatis-Plus如何简化SQL操作”,无需死记硬背,实操落地就能轻松掌握。
为什么要整合MyBatis-Plus?
很多零基础学习者会疑惑:操作数据库有原生MyBatis、JPA等框架,为什么优先选择MyBatis-Plus?它的核心优势是什么?搞懂这些,能让我们更清晰地理解学习的意义,避免盲目跟风学习。
1.1 原生MyBatis的痛点(零基础易卡壳)
原生MyBatis虽然灵活,但对于零基础入门者而言,存在2个核心痛点,导致开发效率低、容易出错:
1. 需编写大量SQL语句:无论是查询、新增还是修改数据,都要手动编写XML格式的SQL,语法繁琐,零基础容易出现SQL语法错误、字段匹配错误;
2. 需编写大量重复代码:每个实体类都要对应一个Mapper接口和XML文件,重复编写CRUD相关代码,冗余且耗时,不利于零基础快速上手。
1.2 MyBatis-Plus的核心优势(零基础友好)
MyBatis-Plus基于MyBatis开发,完全兼容MyBatis,同时解决了原生MyBatis的痛点,核心优势贴合零基础入门需求,也是企业选择它的核心原因:
1. 无SQL开发:内置大量CRUD方法,无需编写XML和SQL语句,直接调用方法就能实现数据库操作,大幅降低零基础学习难度;
2. 简化代码:自动生成Mapper接口、实体类对应的基础方法,减少重复代码,让零基础学习者聚焦核心业务,无需纠结于重复的CRUD编写;
3. 零基础易上手:配置简单,衔接Spring Boot只需3步(引入依赖→配置数据库→编写代码),语法简洁,与前文的Spring Boot基础无缝衔接;
4. 功能强大且灵活:支持分页、条件查询、批量操作等常用功能,满足基础开发甚至进阶开发的需求,后续无需更换框架。
1.3 学习重点(零基础必抓)
本文聚焦零基础入门,无需深入MyBatis-Plus的底层原理,重点掌握以下3个核心内容,就能应对80%的基础数据库开发场景:
1. 环境整合:Spring Boot项目引入MyBatis-Plus依赖、配置数据库和MyBatis-Plus核心参数;
2. 核心用法:实体类、Mapper接口的编写规范,调用MyBatis-Plus内置方法实现CRUD操作;
3. 基础实操:结合具体场景(用户管理),编写完整的增删改查代码,验证效果。
前置准备
本次实操将衔接之前搭建的“springboot-basic”基础项目,无需重新创建项目,只需补充以下2个前置条件,确保实操顺利进行:
1. 已搭建Spring Boot基础项目(springboot-basic),掌握注解、配置文件的基本用法;
2. 已安装MySQL数据库,创建测试数据库(test_db,前文配置中已指定),后续将基于该数据库编写实操代码;
补充:若未搭建基础项目,可参考之前的文章快速搭建一个简单的Spring Boot项目,5分钟即可完成,不影响本次学习。
Spring Boot整合MyBatis-Plus
Spring Boot整合MyBatis-Plus的核心流程非常简单,只需3步:引入依赖→配置核心参数→编写实体类和Mapper接口,全程无需编写复杂配置和SQL,跟着步骤走就能完成整合。
3.1 步骤1:引入MyBatis-Plus依赖(pom.xml)
打开springboot-basic项目的pom.xml文件,添加MyBatis-Plus的核心依赖和MySQL驱动依赖(若已添加MySQL依赖,可跳过),依赖版本选择3.5.3.1(2026年企业主流版本,稳定且适配Spring Boot 2.7+)。
<!-- MyBatis-Plus核心依赖(必加) --> com.baomidou mybatis-plus-boot-starter 3.5.3.1 <!-- MySQL驱动依赖(若已添加,无需重复添加) --> mysql mysql-connector-java runtime 核心说明:MyBatis-Plus的starter依赖会自动整合MyBatis和Spring Boot,无需额外配置MyBatis的XML文件,简化整合流程,零基础只需复制依赖即可。
3.2 步骤2:配置核心参数(application.yml)
打开application.yml文件,在原有配置基础上,添加MyBatis-Plus的核心配置,主要包括“数据库配置”(已配置可沿用)和“MyBatis-Plus专属配置”,配置后Spring Boot才能识别MyBatis-Plus并连接数据库。
spring: application: name: springboot-basic # 数据库配置(沿用前文,确保参数正确) datasource: driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql://127.0.0.1:3306/test_db?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai username: root password: root# MyBatis-Plus核心配置(零基础必配)mybatis-plus: # 实体类所在包路径(告诉MyBatis-Plus去哪里找实体类) type-aliases-package: com.example.springbootbasic.entity # mapper.xml文件所在路径(零基础可先不配,后续有需要再添加) mapper-locations: classpath:mapper/**/*.xml # 开启SQL日志(可选,便于查看自动生成的SQL,排查问题) configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl关键说明(零基础必懂):
1. type-aliases-package:必须填写实体类所在的包路径(如com.example.springbootbasic.entity),否则MyBatis-Plus无法识别实体类与数据库表的对应关系;
2. log-impl:开启SQL日志后,控制台会打印MyBatis-Plus自动生成的SQL语句,便于零基础学习者查看、理解,快速排查数据操作问题;
3. mapper-locations:若后续需要手动编写复杂SQL,可配置该路径,零基础入门阶段可先不配置,完全不影响基础CRUD操作。
3.3 步骤3:编写核心代码(实体类+Mapper接口)
整合完成后,我们编写3类核心代码:实体类(对应数据库表)、Mapper接口(继承MyBatis-Plus的BaseMapper)、Service层(可选,简化Controller调用),实现基础的CRUD操作,全程无需编写SQL。
3.3.1 第一步:创建数据库表(MySQL)
先在test_db数据库中,创建一个简单的用户表(user),用于后续实操测试,SQL语句如下(直接复制执行即可):
-- 创建用户表CREATE TABLE IF NOT EXISTS `user` ( `id` INT NOT NULL AUTO_INCREMENT COMMENT '用户ID(主键)', `username` VARCHAR(50) NOT NULL COMMENT '用户名', `password` VARCHAR(50) NOT NULL COMMENT '密码', `age` INT DEFAULT NULL COMMENT '年龄', `email` VARCHAR(100) DEFAULT NULL COMMENT '邮箱', PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';3.3.2 第二步:编写实体类(Entity)
在com.example.springbootbasic包下,创建entity包,编写User实体类,实体类的字段与数据库表的字段一一对应,同时使用MyBatis-Plus的注解简化配置。
package com.example.springbootbasic.entity;import com.baomidou.mybatisplus.annotation.IdType;import com.baomidou.mybatisplus.annotation.TableId;import com.baomidou.mybatisplus.annotation.TableName;import lombok.Data;// @Data:Lombok注解,自动生成getter、setter、toString方法,简化代码(零基础可选,也可手动编写)@Data// @TableName:指定实体类对应的数据表名称(若实体类名与表名一致,可省略)@TableName("user")public class User { // @TableId:指定主键字段,type=IdType.AUTO表示主键自增(与数据库表一致) @TableId(type = IdType.AUTO) private Integer id; // 对应数据库id字段 private String username; // 对应数据库username字段 private String password; // 对应数据库password字段 private Integer age; // 对应数据库age字段 private String email; // 对应数据库email字段}补充说明:@Data注解是Lombok提供的,可自动生成getter、setter等方法,简化实体类编写,零基础若不想使用Lombok,可手动编写getter、setter方法,不影响功能。若要使用Lombok,需在pom.xml中添加Lombok依赖:
<!-- Lombok依赖(可选,简化实体类编写) --> org.projectlombok lombok true 3.3.3 第三步:编写Mapper接口
在com.example.springbootbasic包下,创建mapper包,编写UserMapper接口,该接口只需继承MyBatis-Plus的BaseMapper
package com.example.springbootbasic.mapper;import com.baomidou.mybatisplus.core.mapper.BaseMapper;import com.example.springbootbasic.entity.User;import org.springframework.stereotype.Repository;// @Repository:标记为持久层组件,让Spring容器识别(避免注入时报错)@Repositorypublic interface UserMapper extends BaseMapper { // 无需编写任何方法,BaseMapper已提供所有基础CRUD方法} 核心说明:BaseMapper
3.3.4 第四步:启动类添加扫描注解(关键!避免Mapper注入失败)
打开Spring Boot启动类,添加@MapperScan注解,指定Mapper接口所在的包路径,让Spring Boot扫描到Mapper接口,否则会出现“Mapper注入失败”的报错。
package com.example.springbootbasic;import org.mybatis.spring.annotation.MapperScan;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;// @MapperScan:扫描Mapper接口所在包,参数为Mapper包路径@MapperScan("com.example.springbootbasic.mapper")@SpringBootApplicationpublic class SpringbootBasicApplication { public static void main(String[] args) { SpringApplication.run(SpringbootBasicApplication.class, args); }}调用MyBatis-Plus实现CRUD操作(零基础必练)
整合完成后,我们编写Service层和Controller层,调用MyBatis-Plus内置的CRUD方法,实现用户的新增、删除、修改、查询操作,全程实操验证,让零基础学习者真正掌握用法。
4.1 步骤1:编写Service层(简化Controller调用)
在com.example.springbootbasic包下,创建service包,编写UserService接口和UserServiceImpl实现类,调用UserMapper的方法,封装业务逻辑(零基础也可直接在Controller中调用Mapper,此处为规范写法)。
// UserService接口package com.example.springbootbasic.service;import com.baomidou.mybatisplus.extension.service.IService;import com.example.springbootbasic.entity.User;// 继承IService,获得更多增强方法(比BaseMapper更全面)public interface UserService extends IService { // 无需编写基础方法,IService已内置,若有自定义业务,可在此添加} // UserServiceImpl实现类package com.example.springbootbasic.service.impl;import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;import com.example.springbootbasic.entity.User;import com.example.springbootbasic.mapper.UserMapper;import com.example.springbootbasic.service.UserService;import org.springframework.stereotype.Service;@Service// 继承ServiceImpl,实现UserService接口public class UserServiceImpl extends ServiceImpl implements UserService { // 无需编写基础CRUD方法,ServiceImpl已实现所有IService的方法} 4.2 步骤2:编写Controller层(接收请求,执行操作)
在com.example.springbootbasic包下,创建controller包,编写UserController,调用UserService的方法,实现5个基础接口(新增用户、删除用户、修改用户、查询单个用户、查询所有用户),适配前后端分离基础场景。
package com.example.springbootbasic.controller;import com.example.springbootbasic.entity.User;import com.example.springbootbasic.service.UserService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.*;import java.util.List;@RestController@RequestMapping("/user") // 接口前缀,所有用户相关接口都以/user开头public class UserController { // 注入UserService @Autowired private UserService userService; // 1. 新增用户(POST请求) @PostMapping("/add") public String addUser(@RequestBody User user) { // 调用IService的save方法,新增用户,返回布尔值(成功true,失败false) boolean success = userService.save(user); return success ? "新增用户成功" : "新增用户失败"; } // 2. 删除用户(GET请求,根据id删除) @GetMapping("/delete/{id}") public String deleteUser(@PathVariable Integer id) { // 调用IService的removeById方法,根据id删除用户 boolean success = userService.removeById(id); return success ? "删除用户成功" : "删除用户失败"; } // 3. 修改用户(POST请求,根据id修改) @PostMapping("/update") public String updateUser(@RequestBody User user) { // 调用IService的updateById方法,根据id修改用户(user中必须包含id) boolean success = userService.updateById(user); return success ? "修改用户成功" : "修改用户失败"; } // 4. 查询单个用户(GET请求,根据id查询) @GetMapping("/{id}") public User getUserById(@PathVariable Integer id) { // 调用IService的getById方法,根据id查询用户,返回User对象 return userService.getById(id); } // 5. 查询所有用户(GET请求) @GetMapping("/list") public List getAllUser() { // 调用IService的list方法,查询所有用户,返回用户列表 return userService.list(); }} 4.3 步骤3:启动项目,测试接口(零基础必做)
启动Spring Boot项目,控制台出现“Started SpringbootBasicApplication in xxx seconds”,说明启动成功,此时我们通过浏览器或Postman测试5个接口,验证CRUD操作是否正常。
测试1:新增用户(POST请求)
请求地址:http://localhost:8080/user/add
请求体(JSON格式):{"username":"test1","password":"123456","age":20,"email":"test1@163.com"}

测试结果:返回“新增用户成功”,查看MySQL的user表,新增一条用户数据,说明新增操作正常。
测试2:查询单个用户(GET请求)
请求地址:http://localhost:8080/user/1(1为新增用户的id)
测试结果:返回JSON格式的用户数据({"id":1,"username":"test1","password":"123456","age":20,"email":"test1@163.com"}),说明查询操作正常。
测试3:查询所有用户(GET请求)
请求地址:http://localhost:8080/user/list
测试结果:返回包含所有用户的列表,说明查询所有操作正常。
测试4:修改用户(POST请求)
请求地址:http://localhost:8080/user/update
请求体(JSON格式):{"id":1,"username":"test1-update","password":"123456","age":22,"email":"test1-update@163.com"}
测试结果:返回“修改用户成功”,查看MySQL的user表,id=1的用户信息已修改,说明修改操作正常。
测试5:删除用户(GET请求)
请求地址:http://localhost:8080/user/delete/1
测试结果:返回“删除用户成功”,查看MySQL的user表,id=1的用户已删除,说明删除操作正常。
零基础必避坑:常见问题及解决方法
零基础学习者在整合和实操过程中,容易遇到以下4个常见问题,掌握解决方法,避免卡壳,高效完成学习:
5.1 坑点1:Mapper注入失败(最常见)
报错信息:No qualifying bean of type 'com.example.springbootbasic.mapper.UserMapper' available
解决方法:
1. 检查UserMapper接口是否添加了@Repository注解;
2. 检查启动类是否添加了@MapperScan注解,且包路径正确(如com.example.springbootbasic.mapper);
3. 检查依赖是否引入成功,刷新Maven,确保MyBatis-Plus依赖正常加载。
5.2 坑点2:数据库连接失败
报错信息:Could not create connection to database server
解决方法:
1. 检查MySQL是否正常启动;
2. 检查application.yml中数据库的url、username、password是否配置正确;
3. 检查url中的时区(serverTimezone=Asia/Shanghai)是否添加,避免时区异常。
5.3 坑点3:实体类与数据库表字段不匹配
问题现象:查询时返回字段为null,新增时部分字段无法插入。
解决方法:
1. 确保实体类的字段名称、类型与数据库表的字段完全一致(大小写敏感);
2. 若实体类字段与表字段名称不一致,可使用@TableField注解指定对应关系(如实体类字段userName,表字段username,添加@TableField("username"))。
5.4 坑点4:主键自增失败
问题现象:新增用户时,id字段为null,或报错“主键重复”。
解决方法:
1. 检查数据库表的主键是否设置为自增(AUTO_INCREMENT);
2. 检查实体类的@TableId注解,确保type=IdType.AUTO(与数据库自增一致)。
学习建议
本节是Spring Boot基础入门的核心实操内容,掌握MyBatis-Plus的整合与CRUD操作,就能独立编写简单的数据库操作代码,为后续编写完整业务项目打下基础,零基础学习者重点把握以下4点:
1. 重点实操,拒绝死记硬背:MyBatis-Plus的核心是“简化操作”,无需记忆复杂的SQL和底层原理,跟着本文的步骤一步步实操,测试每个接口,就能快速掌握用法;
2. 理解核心逻辑:重点理解“实体类→数据库表”“Mapper接口→CRUD方法”的对应关系,明白MyBatis-Plus如何自动生成SQL,知其然也知其所以然;
3. 规范代码写法:养成“Entity→Mapper→Service→Controller”的分层写法,虽然零基础可简化,但规范的代码写法能为后续学习复杂项目打下基础;
4. 多练习,多排查:遇到报错不要慌,对照本节的“常见问题”排查,逐步培养排查问题的能力,同时多尝试修改代码(如修改实体类字段、新增自定义方法),加深理解。
后续我们将继续围绕“从基础到入门”的导向,基于本次的MyBatis-Plus整合,学习分页查询、条件查询等常用功能,同时结合前文的Redis、注解等知识点,编写完整的基础业务项目,帮你逐步实现“能独立开发简单Spring Boot项目”的目标。