SpringBoot整合MyBatis-Plus完整教程

MyBatis-Plus(简称 MP)是一款基于 MyBatis 的增强工具,在 MyBatis 原有功能基础上只做增强、不做改变,能够极大简化数据库 CRUD 操作,消除重复代码。本文将从零开始,手把手讲解SpringBoot 整合 MyBatis-Plus 的全过程,包含环境配置、依赖引入、代码编写、功能测试及常见基础配置,适合入门学习和项目落地使用。

一、前期准备

在开始整合前,需提前搭建好基础运行环境,保证工具、版本适配:

  • 开发工具:IDEA / Eclipse(推荐 IDEA)
  • 运行环境:JDK 8+、Maven 3.6+
  • 数据库:MySQL 5.7 / 8.0(本文以 MySQL8.0 为例)
  • 核心版本:SpringBoot 2.7.x 稳定版、MyBatis-Plus 3.5.x 稳定版

同时提前创建测试数据库和数据表,用于后续功能测试,本文创建简单的用户测试表。

-- 创建测试数据库
CREATE DATABASE IF NOT EXISTS mp_demo DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 使用数据库
USE mp_demo;

-- 创建用户测试表
CREATE TABLE IF NOT EXISTS user (
    id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT '主键ID',
    name VARCHAR(30) NOT NULL COMMENT '用户名',
    age INT DEFAULT 0 COMMENT '年龄',
    email VARCHAR(50) DEFAULT '' COMMENT '邮箱',
    create_time DATETIME COMMENT '创建时间',
    update_time DATETIME COMMENT '更新时间',
    deleted TINYINT DEFAULT 0 COMMENT '逻辑删除 0-未删除 1-已删除'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';

二、创建SpringBoot项目并引入依赖

2.1 新建SpringBoot项目

通过 IDEA 新建 SpringBoot 初始化项目,选择对应 JDK 版本,勾选 MySQL DriverLombok 基础依赖,后续手动引入 MyBatis-Plus 核心依赖。

2.2 Maven核心依赖配置

pom.xml 文件中引入 SpringBoot 父依赖、MyBatis-Plus 启动器、MySQL 驱动、Lombok 等必备依赖,完整配置如下:

<?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>2.7.15</version>
        <relativePath/>
    </parent>

    <groupId>com.example</groupId>
    <artifactId>mybatis-plus-demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>mybatis-plus-demo</name>
    <description>SpringBoot整合MyBatis-Plus测试项目</description>

    <properties>
        <java.version>1.8</java.version>
        <mybatis-plus.version>3.5.3.1</mybatis-plus.version>
    </properties>

    <dependencies>
        <!-- SpringBoot Web核心依赖 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- MyBatis-Plus启动器 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${mybatis-plus.version}</version>
        </dependency>

        <!-- MySQL驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>

        <!-- Lombok 简化实体类代码 -->
        <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 项目,确保所有依赖下载成功,无报错。

三、全局配置文件配置

修改 application.yml 配置文件(若无则新建),配置数据库连接、MyBatis-Plus 日志、映射路径等核心参数,适配 MySQL8.0 版本。

# 服务端口
server:
  port: 8080

# 数据库配置
spring:
  datasource:
    # 数据库驱动(MySQL8.0使用com.mysql.cj.jdbc.Driver,5.7使用com.mysql.jdbc.Driver)
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/mp_demo?useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8&allowMultiQueries=true
    username: root # 自己的数据库用户名
    password: 123456 # 自己的数据库密码

# MyBatis-Plus配置
mybatis-plus:
  # 映射文件路径
  mapper-locations: classpath:mapper/*.xml
  # 实体类别名包
  type-aliases-package: com.example.mpdemo.entity
  configuration:
    # 开启SQL日志打印,开发环境便于调试
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    # 开启驼峰命名自动转换
    map-underscore-to-camel-case: true
  global-config:
    # 关闭MP自带的banner
    banner: false
    db-config:
      # 主键自增策略
      id-type: auto
      # 逻辑删除字段
      logic-delete-field: deleted
      logic-delete-value: 1 # 删除值
      logic-not-delete-value: 0 # 未删除值

四、编写核心代码

MyBatis-Plus 采用 实体类+Mapper+Service 分层结构,无需编写 SQL 即可实现基础 CRUD,下面逐层编写代码。

4.1 项目结构搭建

新建标准分层包结构,结构如下:

com.example.mpdemo
├── MpDemoApplication.java  // 启动类
├── entity  // 实体类包
│   └── User.java
├── mapper  // 持久层接口包
│   └── UserMapper.java
├── service  // 业务层包
│   ├── UserService.java
│   └── impl
│       └── UserServiceImpl.java
└── controller  // 控制层包
    └── UserController.java

4.2 启动类配置

SpringBoot 启动类上添加 @MapperScan 注解,扫描 Mapper 接口包,让 MyBatis-Plus 识别持久层接口。

package com.example.mpdemo;

import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

// 扫描mapper接口所在包
@MapperScan("com.example.mpdemo.mapper")
@SpringBootApplication
public class MpDemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(MpDemoApplication.class, args);
    }
}

4.3 实体类编写

创建 User 实体类,对应数据库 user 表,通过 MyBatis-Plus 注解绑定表和字段,配合 Lombok 简化代码。

package com.example.mpdemo.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.time.LocalDateTime;

@Data
@TableName("user") // 绑定数据库表名
public class User {

    // 主键,自增策略
    @TableId(type = IdType.AUTO)
    private Long id;

    // 用户名,对应表中name字段
    private String name;

    // 年龄
    private Integer age;

    // 邮箱
    private String email;

    // 创建时间
    private LocalDateTime createTime;

    // 更新时间
    private LocalDateTime updateTime;

    // 逻辑删除字段
    private Integer deleted;
}

4.4 Mapper持久层接口

创建 Mapper 接口,继承 MyBatis-Plus 提供的 BaseMapper,即可获得所有基础 CRUD 方法,无需手动编写 SQL。

package com.example.mpdemo.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.mpdemo.entity.User;
import org.springframework.stereotype.Repository;

@Repository
public interface UserMapper extends BaseMapper<User> {
    // 继承BaseMapper后,自带增删改查方法,无需手写
}

4.5 Service业务层

MyBatis-Plus 提供通用 Service 层接口和实现类,只需继承即可快速使用业务层封装的 CRUD 方法,代码更简洁。

1、Service接口

package com.example.mpdemo.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.example.mpdemo.entity.User;

// 继承IService,传入实体类泛型
public interface UserService extends IService<User> {
}

2、Service实现类

package com.example.mpdemo.service.impl;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.mpdemo.entity.User;
import com.example.mpdemo.mapper.UserMapper;
import com.example.mpdemo.service.UserService;
import org.springframework.stereotype.Service;

// 继承ServiceImpl,绑定Mapper和实体类
@Service
public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements UserService {
}

4.6 Controller控制层

编写测试接口,调用 Service 层方法,实现新增、查询、修改、删除基础功能测试。

package com.example.mpdemo.controller;

import com.example.mpdemo.entity.User;
import com.example.mpdemo.service.UserService;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import java.util.List;

@RestController
@RequestMapping("/user")
public class UserController {

    @Resource
    private UserService userService;

    // 查询所有用户
    @GetMapping("/list")
    public List<User> getUserList() {
        return userService.list();
    }

    // 新增用户
    @GetMapping("/add")
    public String addUser() {
        User user = new User();
        user.setName("张三");
        user.setAge(22);
        user.setEmail("zhangsan@163.com");
        boolean result = userService.save(user);
        return result ? "新增成功" : "新增失败";
    }
}

五、功能测试

启动 SpringBoot 项目,无报错后,通过浏览器或接口工具测试接口,验证整合是否成功。

  1. 访问 http://localhost:8080/user/add,执行新增用户操作,控制台可打印完整执行 SQL,数据库新增一条用户数据;
  2. 访问 http://localhost:8080/user/list,可查询出所有用户数据,接口返回 JSON 格式结果;
  3. 默认开启逻辑删除,调用删除接口不会物理删除数据,仅修改 deleted 字段为1。

六、常用进阶配置(必备)

6.1 自动填充时间字段

数据库表中 create_timeupdate_time 可通过 MP 自动填充,无需手动赋值,新建配置类:

package com.example.mpdemo.config;

import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
import org.apache.ibatis.reflection.MetaObject;
import org.springframework.stereotype.Component;
import java.time.LocalDateTime;

@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    // 新增数据自动填充创建时间
    @Override
    public void insertFill(MetaObject metaObject) {
        this.strictInsertFill(metaObject, "createTime", LocalDateTime::now, LocalDateTime.class);
        this.strictInsertFill(metaObject, "updateTime", LocalDateTime::now, LocalDateTime.class);
    }

    // 修改数据自动填充更新时间
    @Override
    public void updateFill(MetaObject metaObject) {
        this.strictUpdateFill(metaObject, "updateTime", LocalDateTime::now, LocalDateTime.class);
    }
}

同时在实体类时间字段上添加自动填充注解:

@TableField(fill = FieldFill.INSERT)
private LocalDateTime createTime;

@TableField(fill = FieldFill.INSERT_UPDATE)
private LocalDateTime updateTime;

6.2 分页插件配置

MP 分页查询需手动配置分页插件,新建 MP 全局配置类:

package com.example.mpdemo.config;

import com.baomidou.mybatisplus.annotation.DbType;
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(DbType.MYSQL));
        return interceptor;
    }
}

七、常见问题总结

  • 数据库连接报错:检查驱动类、url 时区配置、账号密码是否正确,MySQL8.0 必须配置 serverTimezone
  • Mapper接口无法扫描:检查启动类 @MapperScan 包路径是否正确;
  • 字段映射失败:开启驼峰命名转换,保证数据库下划线字段与实体类驼峰字段对应;
  • 时间填充不生效:检查填充配置类是否注入 Spring 容器、实体类注解是否配置正确。

八、总结

SpringBoot 整合 MyBatis-Plus 核心流程可概括为:引入MP依赖 → 配置数据库与MP参数 → 启动类扫描Mapper → 实体类绑定数据表 → 继承BaseMapper与IService。整合完成后,无需编写基础 CRUD SQL,大幅提升开发效率,同时 MP 提供的分页、逻辑删除、自动填充、条件构造器等功能,能够满足绝大多数业务场景需求,是目前 Java 后端开发的主流持久层方案。


作 者:南烛
链 接:https://www.itnotes.top/archives/1438
来 源:IT笔记
文章版权归作者所有,转载请注明出处!


上一篇
下一篇