Spring Boot 4.1.1 + MyBatis-Plus 从零到一完整教程

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 项目(开始!)

  1. IDEA → 左上角「文件 → 新建 → 项目」
  2. 来源选: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,后面 @Autowired Mapper 会一直报红、启动报错找不到 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 条用户对象数据

❌ 如果出错,优先按这个顺序排查:

  1. MySQL 有没有打开?库名、账号密码对不对?
  2. yml 有没有缩进错(yml 对空格非常敏感!不要用 Tab)
  3. @MapperScan 的包路径是不是 com.wsx.studyboot.mapper
  4. Lombok 注解处理有没有开、Maven 有没有全部刷新下载完
  5. 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 用户列表。

参与讨论

回到顶部
日夜切换
在手机上浏览此页面

🎉 欢迎来到本站

我们更新了全新的主题,并优化了移动端体验。
感谢您的支持,祝您阅读愉快!