Spring Boot集成MyBatis访问MySQL
一、引言
在当今企业级应用开发中,Spring Boot、MyBatis与MySQL的组合凭借其高效性和灵活性,成为构建数据驱动型应用的首选方案。本文将带你从零开始搭建项目,掌握Spring Boot集成MyBatis的基础入门内容。
二、项目搭建
1.1 初始化Spring Boot项目
访问Spring Initializr创建项目:
- Project:Maven
- Language:Java
- Spring Boot:3.4.2
- Dependencies:
- Spring Web
- MyBatis Framework
- MySQL Driver
1.2 项目结构预览
src
├── main
│ ├── java
│ │ └── com/example/hello/mybatis
│ │ ├── entity # 实体类
│ │ ├── mapper # Mapper接口
│ │ └── Application.java
│ └── resources
│ ├── mapper # XML映射文件
│ └── application.yml # 配置文件
└── test # 单元测试
三、依赖(POM)
MyBatis依赖(mybatis-spring-boot-starter-test)
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter-test</artifactId>
<version>3.0.4</version>
<scope>test</scope>
</dependency>
MySQL驱动
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
POM完整示例
<?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>3.4.2</version>
<relativePath/>
</parent>
<groupId>com.example</groupId>
<artifactId>hello-mybatis</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>hello-mybatis</name>
<description>Spring Boot 集成 MyBatis 访问 MySQL 数据库</description>
<properties>
<java.version>21</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.4</version>
</dependency>
<dependency>
<groupId>com.mysql</groupId>
<artifactId>mysql-connector-j</artifactId>
<scope>runtime</scope>
</dependency>
<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>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter-test</artifactId>
<version>3.0.4</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<annotationProcessorPaths>
<path>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</path>
</annotationProcessorPaths>
</configuration>
</plugin>
<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>
四、应用配置
spring:
application:
name: hello-mybatis
datasource:
url: jdbc:mysql://localhost:3306/mybatis_test
username: mybatis_test_user
password: 123456
mybatis:
mapper-locations:
- classpath:mapper/*.xml
configuration:
map-underscore-to-camel-case: true
1. 配置数据源
application.yml
文件中,添加数据源配置(MySQL数据库),包括:数据库url,用户名,密码。
spring:
datasource:
url: jdbc:mysql://localhost:3306/mybatis_test
username: mybatis_test_user
password: 123456
注意:不配置数据源会导致应用启动失败。
2. 配置扫描路径
在Spring Boot中,默认的XML映射文件需要放在resources目录下,并且路径要和Mapper接口的包名一致。
自定义XML映射文件的存放目录,在 application.yml
中配置扫描路径:
mybatis:
mapper-locations:
- classpath:mapper/*.xml
3. 配置下划线转驼峰
map-underscore-to-camel-case: true
是 MyBatis 框架中的一个配置项,用于自动将数据库字段的下划线命名风格(如 user_name
)映射到 Java 对象的驼峰命名风格属性(如 userName
)。
mybatis:
configuration:
map-underscore-to-camel-case: true
通过 map-underscore-to-camel-case: true
,MyBatis 自动处理数据库字段与 Java 属性之间的命名风格差异,显著减少手动映射的工作量,是提升 ORM 开发效率的实用配置。
五、配置Mapper接口和XML映射文件
1. Mapper接口(UserMapper接口)
package com.example.hello.mybatis.mapper;
import com.example.hello.mybatis.entity.User;
import org.apache.ibatis.annotations.Mapper;
import java.util.List;
@Mapper
public interface UserMapper {
List<User> listUser();
}
2. XML 映射文件(UserMapper.xml)
<?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.example.hello.mybatis.mapper.UserMapper">
<select id="listUser" resultType="com.example.hello.mybatis.entity.User">
select * from user
</select>
</mapper>
3. 实体类(User)
package com.example.hello.mybatis.entity;
import lombok.Data;
@Data
public class User {
private String id;
private String name;
private Integer age;
private String mobilePhone;
}
4. 单元测试
调用Mapper接口中方法查询数据库。
package com.example.hello.mybatis;
import com.example.hello.mybatis.entity.User;
import com.example.hello.mybatis.mapper.UserMapper;
import lombok.extern.slf4j.Slf4j;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import java.util.List;
@Slf4j
@SpringBootTest
class HelloMybatisApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
public void testUserMapper() {
List<User> users = userMapper.listUser();
log.info("用户列表 :{}", users);
}
}
六、运行效果
执行单元测试,调用Mapper接口中方法查询数据库,运行成功,能够正常查询数据。
七、数据库:用户表
1. 列和DDL
DDL:
-- mybatis_test.`user` definition
CREATE TABLE `user` (
`id` varchar(100) NOT NULL COMMENT '主键',
`name` varchar(100) DEFAULT NULL COMMENT '姓名',
`age` int DEFAULT NULL COMMENT '年龄',
`mobile_phone` varchar(20) DEFAULT NULL COMMENT '手机号码',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='用户表';
2. 用户数据
八、MyBatis官方文档
MyBatis官方文档