Spring Boot 4.1.1 + MyBatis-Plus 从零到一完整教程
好!我们彻底从零、一步不跳、专门适配 Spring Boot 4.1.1 + MyBatis‑Plus完整流程,照着点就行,每一步做什么、复制什么全部给你。
(⚠️ Boot4 有坑,不能用老教程的依赖,我全部给你对应正确版本)
🚩 前置准备(先确认)
- IDEA(旗舰版 / 社区版都行)
- JDK 17(必须!Spring Boot 4 最低要求 JDK 17)
- MySQL 已经装好、服务启动、建好了一个空数据库(示例库名:
study_db)
后面所有包名统一:com.wsx.studyboot,不要乱改。第 1 步:新建 Spring Boot 项目(开始!)
- IDEA → 左上角「文件 → 新建 → 项目」
- 来源选:Spring Initializr(官方初始化器)
⚠️ 如果地址不是默认,可以用:https://start.spring.io
照着填:
- Spring Boot:选 4.1.1(不要选 M 快照版)
- 组 (GgroupId):
com.wsx - 工件 (artifactId):
studyboot - 名称:
studyboot - 包名:自动变成
com.wsx.studyboot✅ - Java:17
👉 依赖只勾选这 3 个!(不要多勾!)
- Web → ✅ Spring Web(注意!不是 webmvc!官方现在显示还是 Spring Web,boot4 底层就是 webmvc;不要手动选 webmvc)
- SQL → ✅ JDBC API
- SQL → ✅ MySQL Driver
❌ 这里绝对不要勾 MyBatis Framework!MyBatis‑Plus 不在官方列表,等下手动加。
点「创建」,等待 IDEA 自动下载初始化项目。
⏳ 第一次打开等右下角 Maven 加载完(不要中途关)。
第 2 步:修改 pom.xml(加上 MyBatis‑Plus)
打开 pom.xml,全部替换成下面这一整份(已经调好 Boot4 专用 starter、去掉冗余、测试包正常):
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>4.1.1</version>
<relativePath/>
</parent>
<groupId>com.wsx</groupId>
<artifactId>studyboot</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>studyboot</name>
<description>MyBatis‑Plus从零练习</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<!-- Web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- JDBC + MySQL驱动(新建项目已经自带) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<!-- ✅ Boot4 专用 MyBatis‑Plus(重点!不能用旧的‑boot‑starter) -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-spring-boot4-starter</artifactId>
<version>3.5.17</version>
</dependency>
<!-- Lombok!!别忘了(@Data需要,很多新手漏这个) -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!-- 单元测试(官方自带,保留) -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<configuration>
<excludes>
<exclude>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
</project>👉 改完之后:右侧 Maven 面板点刷新图标 ⟳,等待全部下载完成。
🔔 IDEA 记得开启 Lombok:设置 → 构建、执行、部署 → 编译器 → 注解处理 → 勾选「启用注解处理」(不然 @Data 报红)。第 3 步:创建数据库 + user 测试表
打开 Navicat / MySQL 命令行执行:
-- 创建库(不存在才建)
CREATE DATABASE IF NOT EXISTS study_db DEFAULT CHARACTER SET utf8mb4;
USE study_db;
-- 用户表
CREATE TABLE IF NOT EXISTS `user` (
id BIGINT AUTO_INCREMENT PRIMARY KEY COMMENT '主键',
name VARCHAR(30) NOT NULL COMMENT '姓名',
age INT COMMENT '年龄',
email VARCHAR(50) COMMENT '邮箱'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 插入几条测试数据
INSERT INTO `user`(name, age, email) VALUES
('张三', 22, 'zhangsan@test.com'),
('李四', 23, 'lisi@test.com'),
('王五', 20, 'wangwu@test.com'),
('赵六', 25, 'zhaoliu@test.com');执行完,确认表里有 4 条数据。
第 4 步:写配置文件 application.yml
找到:src/main/resources/application.properties
👉 把它删掉 / 改名,新建一个 application.yml(yml 可读性更好)
完整复制进去(记得改账号密码!):
spring:
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/study_db?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai
username: root
password: 这里填你自己MySQL的密码
mybatis-plus:
configuration:
# 打印执行的SQL,调试神器
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
db-config:
id-type: auto⚠️ 重点改两处:study_db(库名)、password(你的 MySQL 密码)。
第 5 步:改「启动类」(加上 @MapperScan!超级关键)
打开:src/main/java/com/wsx/studyboot/StudybootApplication.java
完整替换:
package com.wsx.studyboot;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
// ✅ 告诉MyBatis‑Plus去哪里扫描Mapper接口,路径别写错!
@MapperScan("com.wsx.studyboot.mapper")
public class StudybootApplication {
public static void main(String[] args) {
SpringApplication.run(StudybootApplication.class, args);
}
}❗ 没有这个@MapperScan,后面@AutowiredMapper 会一直报红、启动报错找不到 Bean!
第 6 步:新建三层文件夹(包)
在 com.wsx.studyboot 上右键 → 新建 4 个包 (package):
entity(放实体类)mapper(放 Mapper 接口)service(后面业务层)controller(后面 Web 接口)
建好后目录结构:
com.wsx.studyboot
├─ StudybootApplication.java
├─ entity
├─ mapper
├─ service
└─ controller第 7 步:写 User 实体类(entity 层)
在 entity 包新建 User.java:
package com.wsx.studyboot.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;
}@Data来自 Lombok;@TableName("user")对应数据库表名;@TableId标记自增主键。
第 8 步:写 Mapper 接口(mapper 层)
在 mapper 包新建 UserMapper.java:
package com.wsx.studyboot.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.wsx.studyboot.entity.User;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper extends BaseMapper<User> {
// 继承 BaseMapper 就自带:增删改查一堆方法,不用自己写SQL
}补充:已经有@MapperScan的情况下@Mapper可以不加,但加上兼容性更好。
第 9 步:写单元测试(⚠️ 位置必须是 src/test/java!)
打开测试目录:src/test/java/com/wsx/studyboot/
新建 UserTest.java(不能放在 main 下面!!)
完整代码:
package com.wsx.studyboot;
import com.wsx.studyboot.entity.User;
import com.wsx.studyboot.mapper.UserMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@SpringBootTest
public class UserTest {
// 变量名:小驼峰 userMapper,不是 UserMapper!
@Autowired
private UserMapper userMapper;
@Test
void testSelectAll() {
System.out.println("----- 查询全部用户 -----");
List<User> userList = userMapper.selectList(null);
userList.forEach(System.out::println);
}
}第 10 步:运行!
- 在
testSelectAll()方法上右键 → Run 'testSelectAll'
✅ 成功现象:
- 没有红色报错
- 控制台打印出执行的 SQL + 4 条用户对象数据
❌ 如果出错,优先按这个顺序排查:
- MySQL 有没有打开?库名、账号密码对不对?
- yml 有没有缩进错(yml 对空格非常敏感!不要用 Tab)
@MapperScan的包路径是不是com.wsx.studyboot.mapper- Lombok 注解处理有没有开、Maven 有没有全部刷新下载完
- User 实体主键有没有加
@TableId
✨(可选第 11 步:做一个浏览器可以访问的接口)
controller 包新建 UserController.java
package com.wsx.studyboot.controller;
import com.wsx.studyboot.entity.User;
import com.wsx.studyboot.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserMapper userMapper;
@GetMapping("/list")
public List<User> getList() {
return userMapper.selectList(null);
}
}重启主程序,浏览器打开:
http://localhost:8080/user/list
直接返回 JSON 用户列表。