在 Java 后端开发中,SpringBoot 凭借其 “约定优于配置” 的特性,极大简化了项目搭建与开发流程,而 MyBatis 作为一款优秀的持久层框架,能灵活实现数据库交互。将 SpringBoot3 与 MyBatis 整合,可高效完成数据库操作,是后端开发中极为常用的技术组合。

一、添加依赖

在进行整合前,需确保开发环境已具备 Java 17+(SpringBoot3 对 Java 版本有最低要求)、Maven/Gradle 构建工具,以及对应的 MySQL 数据库环境。整合的第一步是引入核心依赖,通过依赖管理工具自动加载所需 jar 包,避免手动导入的繁琐与版本冲突问题。

在 pom.xml(Maven 项目)或 build.gradle(Gradle 项目)中,需添加以下关键依赖:

  1. MyBatis 整合 SpringBoot 的 Starter 依赖:提供 MyBatis 与 SpringBoot 无缝集成的核心能力,自动配置 SqlSessionFactory、SqlSessionTemplate 等核心组件;
  2. MySQL 驱动依赖:用于连接 MySQL 数据库,实现 SQL 语句的执行与数据交互。

添加依赖后,构建工具会自动下载并引入相关资源,为后续整合工作奠定基础。

<dependency>
        <groupId>org.mybatis.spring.boot</groupId>
        <artifactId>mybatis-spring-boot-starter</artifactId>
        <version>2.1.1</version>
  </dependency>
    <dependency>
        <groupId>mysql</groupId>
        <artifactId>mysql-connector-java</artifactId>
        <scope>runtime</scope>
  </dependency>

二、配置文件设置:数据源与 MyBatis 参数

SpringBoot 默认支持 application.yml(或 application.properties)配置文件,通过该文件可集中管理项目配置信息,无需手动编写复杂的 XML 配置。此步骤需完成两大核心配置:数据源配置与 MyBatis 参数配置。

2.1 数据源配置

指定数据库连接信息,确保 SpringBoot 应用能成功连接到目标数据库。配置内容包括:

        数据库 URL:指定数据库地址、端口号、数据库名称,以及编码格式、SSL 连接策略等附加参数;

        数据库用户名与密码:登录数据库的认证信息;

        数据库驱动类名:MySQL 8.0 + 对应的驱动类为 com.mysql.cj.jdbc.Driver,需与驱动依赖版本匹配。

2.2 MyBatis 参数配置

主要配置 MyBatis 的核心行为,例如:

        Mapper XML 文件的扫描路径:告知 MyBatis 去哪里查找定义 SQL 语句的 XML 文件;

        实体类别名包扫描路径:为实体类设置别名,简化 Mapper XML 中参数类型与返回类型的配置;

        日志级别(可选):配置 MyBatis 日志输出级别,便于开发过程中调试 SQL 语句。

配置示例(application.yml):

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/qcby_db?useUnicode=true&characterEncoding=utf-8&serverTimezone=CTT
    username: root
    password: 
    driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
  mapper-locations: classpath:mapper/*.xml  #对应mapper映射xml文件所在路径
  type-aliases-package: com.xxxx.entity  #对应实体类路径
  configuration:
    # 配置日志
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
    map-underscore-to-camel-case: true
  

三、启动类添加 @MapperScan 注解

SpringBoot 启动类是应用的入口,通过添加 @MapperScan 注解,可指定 MyBatis Mapper 接口的扫描路径。Spring 会自动扫描该路径下的所有 Mapper 接口,并为其创建动态代理对象,无需手动为每个 Mapper 接口添加 @Mapper 注解,简化配置流程。

示例代码:

package com.qcby.springbootdemotest;

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

@SpringBootApplication
@MapperScan("com.qcby.springbootdemotest.dao")
public class SpringBootDemoTestApplication {

    public static void main(String[] args) {
        SpringApplication.run(SpringBootDemoTestApplication.class, args);
    }

}

四、测试

4.1 创建数据库和表结构

根据业务需求设计数据库表结构,通过 SQL 语句在 MySQL 中创建对应的表。例如,创建一个用户表(user):

create database mybatis_demo; 

use mybatis_demo;

CREATE TABLE `user`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `username` varchar(32) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '用户名称',
  `birthday` datetime(0) DEFAULT NULL COMMENT '生日',
  `sex` char(1) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '性别',
  `address` varchar(256) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '地址',
  `password` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL COMMENT '密码',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 5 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

INSERT INTO `user` VALUES (1, '老王', '2018-02-27 17:47:08', '男', '北京', '123456');
INSERT INTO `user` VALUES (2, '熊大', '2018-03-02 15:09:37', '女', '上海', '123456');
INSERT INTO `user` VALUES (3, '熊二', '2018-03-04 11:34:34', '女', '深圳', '123456');
INSERT INTO `user` VALUES (4, '光头强', '2018-03-04 12:04:06', '男', '广州', '123456');

4.2 创建实体类

实体类(Entity)是数据库表的映射模型,每个实体类对应数据库中的一张表,实体类的属性与表中的字段一一对应。通过实体类,可实现 Java 对象与数据库数据的转换。

示例代码(User.java):

public class User  {
    private Integer id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;
    private String password;
    //get/set方法
    //toString()
 }

也可以运用LomBok省略get/set toString()方法

import lombok.Data;

@Data  // Lombok注解,自动生成getter、setter、toString等方法

public class User  {
    private Integer id;
    private String username;
    private Date birthday;
    private String sex;
    private String address;
    private String password;
 }

注:使用 Lombok 需添加对应的依赖,可简化实体类代码编写,避免重复编写 getter/setter 方法。

4.3 编写Mapper Xml文件

Mapper XML 文件是 MyBatis 的核心配置文件之一,用于存放 SQL 语句,实现数据库的增删改查操作。每个 Mapper XML 文件通常对应一个 Mapper 接口,通过命名空间(namespace)与 Mapper 接口关联。

核心要素:

  1. 命名空间(namespace):必须与对应的 Mapper 接口全路径一致;
  2. SQL 标签:根据操作类型使用<select>(查询)、<insert>(新增)、<update>(修改)、<delete>(删除)标签;
  3. 参数类型(parameterType):指定 SQL 语句的入参类型,可使用实体类别名或全路径;
  4. 结果类型(resultType/resultMap):指定 SQL 语句的返回类型,resultType 适用于简单类型或实体类与表字段完全匹配的场景,resultMap 适用于字段名与属性名不匹配的复杂场景。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.qcby.dao.UserDao">

    <select id="findAll" resultType="com.qcby.model.User">
        select * from user;
    </select>

</mapper>

4.4 创建 Controller:调用 Mapper 实现数据交互

Controller 作为 SpringBoot 应用的请求入口,负责接收前端请求,调用 Mapper 接口中的方法执行数据库操作,最后将结果返回给前端。通过依赖注入(@Autowired)的方式,可直接获取 Mapper 接口的动态代理对象,无需手动创建实例。

package com.example.demo.controller;

import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/user")  // 接口统一前缀
public class UserController {

    @Autowired
    private UserMapper userMapper;  // 注入Mapper接口

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

    // 根据ID查询用户
    @GetMapping("/{id}")
    public User getUserById(@PathVariable Integer id) {
        return userMapper.selectUserById(id);
    }

    // 新增用户
    @PostMapping
    public String addUser(@RequestBody User user) {
        int result = userMapper.insertUser(user);
        return result > 0 ? "新增成功" : "新增失败";
    }

    // 修改用户
    @PutMapping
    public String updateUser(@RequestBody User user) {
        int result = userMapper.updateUser(user);
        return result > 0 ? "修改成功" : "修改失败";
    }

    // 删除用户
    @DeleteMapping("/{id}")
    public String deleteUser(@PathVariable Integer id) {
        int result = userMapper.deleteUserById(id);
        return result > 0 ? "删除成功" : "删除失败";
    }
}

五、测试验证

完成以上步骤后,启动 SpringBoot 应用,通过 Postman、浏览器或其他接口测试工具,调用 Controller 中定义的接口,验证数据库操作是否正常。例如:

  • 访问http://localhost:8080/user/list,可查询所有用户数据;
  • 发送 POST 请求到http://localhost:8080/user,携带用户信息 JSON,可新增用户;
  • 访问http://localhost:8080/user/1,可查询 ID 为 1 的用户。

若接口能正常返回结果,且数据库数据同步更新,则说明 SpringBoot3 与 MyBatis 的整合已成功实现。

六、总结

SpringBoot3 整合 MyBatis 的核心在于 “简化配置、高效交互”,通过依赖引入、配置文件设置、接口与 XML 编写等步骤,即可快速实现数据库的增删改查操作。该整合方案既保留了 MyBatis 灵活编写 SQL 的优势,又借助 SpringBoot 的自动配置能力,减少了繁琐的手动配置,大幅提升了后端开发效率。在实际开发中,可根据业务需求扩展复杂查询、分页、事务管理等功能,进一步完善应用的数据库交互能力。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐