Spring Boot 4.x 整合 MyBatis-Plus

本小节中,我们来为后端服务整合数据库持久层框架 —— MyBatis-Plus ,实现对数据库的增删改查。

1. 什么是 MyBatis ?

MyBatis 是一个用 Java 编写的持久层框架,它简化了数据库交互的过程,将 SQL 语句与 Java 方法相映射,从而使得开发者能够更轻松地操作数据库。

MyBatis 的优点包括:

  • 简化的 SQL 语句: MyBatis 允许开发者使用简单的 XML 文件或者注解来编写 SQL 语句,而不需要手动拼接 SQL 语句,大大简化了数据库操作的流程。
  • 灵活性: MyBatis 提供了丰富的配置选项和灵活的映射方式,开发者可以根据需求自定义映射关系,适应各种复杂的业务场景。
  • 与 SQL 的紧密结合: MyBatis 将 SQL 语句与 Java 代码紧密结合,开发者可以直观地理解代码的执行逻辑,同时也方便了 SQL 优化和调试。
  • 良好的性能: MyBatis 通过预编译 SQL 语句和数据库连接池等机制,提升了数据库操作的性能,使得系统能够更高效地处理大量数据。
  • 与现有项目的兼容性: MyBatis 不会对现有的项目结构和代码产生太大的影响,易于集成到已有的项目中,并且可以与其他框架(如 Spring)无缝整合,提高了开发效率。

总的来说,MyBatis 是一个功能强大且易于使用的持久层框架,适用于各种规模的项目,能够帮助开发者简化数据库操作,提高开发效率。

2. 什么是 MyBatis-Plus ?

简单来说,MyBatis-Plus (MP) 是 MyBatis 的一个增强工具。它在 MyBatis 的基础上只做增强不做改变,目的是简化开发、提高效率

如果把 MyBatis 比作一把需要手动打磨的宝剑,MyBatis-Plus 就是给这把剑装上了“自动化刀架”和“倍镜”。

  1. 无侵入与损耗小

MP 完全兼容 MyBatis,引入它不会影响你现有的 MyBatis 代码。它在启动时进行预处理,基本不影响运行性能。

  1. 强大的 CRUD 操作

这是 MP 最受欢迎的功能。它内置了通用 Mapper 和 Service,仅通过少量配置即可实现单表的增、删、改、查。

  • 以前(MyBatis): 你需要手写 SQL 或使用逆向工程生成 XML 文件。
  • 现在(MP): 你的 Mapper 接口只需继承 BaseMapper<T>,一行代码不写就能拥有数十种基础查询方法。
  1. 条件构造器 (Wrapper)

MP 提供了强大的条件构造器,允许你通过链式调用(Java 代码)来编写复杂的查询逻辑,而不需要在 XML 里拼接繁琐的 <if> 标签。

// 示例:查询年龄大于18且名字包含"张"的用户
userMapper.selectList(new QueryWrapper<User>()
    .gt("age", 18)
    .like("name", "张"));
  1. 自动分页

内置分页插件,你只需要简单的配置,查询时传入一个 Page 对象,MP 就会自动帮你处理不同数据库(MySQL, Oracle, PostgreSQL 等)的分页语法差异。

  1. 其他进阶功能

    • 逻辑删除: 只需加个注解,delete 语句会自动变成 update 状态字段。
    • 自动填充: 比如 create_timeupdate_time,可以设置在插入或更新时自动赋值,不需要手动 set
    • 代码生成器: 快速生成 Entity、Mapper、Service、Controller 代码。

MyBatis-Plus 并不是要取代 MyBatis,而是为了让你从繁琐的单表重复劳动中解脱出来

3. 整合 MyBatis-Plus

一切准备就绪之后,我们先在最外层的 pom文件里导入一下 MyBatis-plus有关的版本声明!

image-20260203210045174

        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-bom</artifactId>
            <version>3.5.16</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>

接着,编辑 hanserwei-auth 服务的 pom.xml , 引入相关的依赖:

image-20260203210406091

        <!-- MySQL数据库驱动:用于连接MySQL数据库 -->
        <dependency>
            <groupId>com.mysql</groupId>
            <artifactId>mysql-connector-j</artifactId>
            <scope>runtime</scope>
        </dependency>

        <!-- MyBatis Plus启动器:用于简化MyBatis的配置和使用 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-spring-boot4-starter</artifactId>
        </dependency>

4. 项目多环境配置

为了区分不同的环境,Spring Boot项目可以有多个配置文件,如下图所示:

image-20260203210720351

注意:也可以在这里在 /resources 目录下,新建一个 /config 配置文件夹,统一放置 applicaiton 多环境配置文件。

编辑 application.yml 父配置,内容如下:

spring:
  application:
    name: han-note-auth
  banner:
    location: banner.txt
  threads:
    virtual:
      enabled: true
  # 默认激活 dev 本地开发环境
  profiles:
    active: dev
server:
  port: 8080

编辑 application-dev.yml 本地开发环境配置文件,配置本地的数据库链接相关信息,如下:

image-20260203211555239

TIP : 数据库连接池暂时不做配置,直接用默认的,后续单独开一小节讲这一块,届时我会把分库分表也一并引入进来!

5. 新建相关包

编辑 hannote-auth 服务,创建以下文件夹:

  • /domain/dataobject : 用于统一放置 DO 类,对应数据库表;
  • /domain/mapper : 用于放置 Mapper 接口;
  • /resources/mapper : 用于放置 MyBatis XML 文件;

image-20260203211826927

6. 配置 MyBatis-Plus

接着,在 Application 启动类的头部,添加 @MapperScan 注解,值填写 mapper 接口所处的包路径,如下图所示:

image-20260203211945189

package com.hanserwei.hannote.auth;

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

/**
 * @author hanser
 */
@SpringBootApplication
@MapperScan("com.hanserwei.hannote.auth.domain.mapper")
public class HannoteAuthApplication {
    static void main() {
        SpringApplication.run(HannoteAuthApplication.class);
    }
}

另外,编辑 application.yml , 为 MyBatis-plus 配置相关配置:

mybatis-plus:
  # MyBatis xml 配置文件路径
  mapper-locations: classpath:/mapper/**/*.xml
  # 实体类包路径
  type-aliases-package: com.hannote.auth.domain.entity
  # MyBatis 原生配置
  configuration:
    # 是否开启自动驼峰命名规则映射
    map-underscore-to-camel-case: true
    # 开启 MyBatis 二级缓存,默认为 true
    cache-enabled: false
    # 日志实现
    log-impl: org.apache.ibatis.logging.slf4j.Slf4jImpl

解释:classpath: 表示 /resources 目录; /mapper/**/*.xml 表示在 mapper 目录及其所有子目录下查找以 .xml 结尾的文件。这种表达式允许你指定一个包含通配符的路径模式,以方便地匹配多个文件。

7. 配置 SQL 日志打印

开发中为了方便调试,想要打印实际执行的 SQL 语句, 可编辑 application-dev.yml 配置文件,配置 mapper 接口所在包的日志级别为 debug , 即可实现此功能:

logging:
  level:
    com.hanserwei.hannote.auth.domain.mapper: debug