引言
在 Java 开发中,Spring Boot 与 MyBatis 的结合是实现高效、灵活数据库操作的常用方案。本文将详细介绍如何在 Spring Boot 项目中整合 MyBatis,并涵盖 CRUD 操作、注解使用、分页插件集成、结果映射和自动映射等内容。
一、环境准备
开发工具:推荐使用 IntelliJ IDEA 或 Eclipse。
数据库:以 MySQL 为例,确保本地已安装 MySQL 数据库并创建好测试数据库。
项目结构:典型的 Spring Boot 项目结构包括 Controller、Service、Mapper 和 Entity 等层。
二、创建 Spring Boot 项目
-
使用 Spring Initializr:访问 Spring Initializr,选择以下依赖:
-
Spring Web
-
MyBatis Framework
-
MySQL Driver
-
Lombok(可选,用于简化实体类开发)
-
-
生成项目:点击“Generate”按钮下载项目压缩包,解压后导入到开发工具中。
三、添加 Maven 依赖
在 pom.xml
文件中添加以下依赖:
<dependencies>
<!-- Spring Boot Starter -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- MyBatis Starter -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>3.0.0</version>
</dependency>
<!-- MySQL Driver -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!-- Lombok -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
四、配置数据库连接
在 src/main/resources/application.yml 文件中配置数据库连接信息和 MyBatis 相关配置:
spring:
datasource:
url: jdbc:mysql://localhost:3306/mybatis_demo?useSSL=false&serverTimezone=UTC
username: root
password: root
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
mapper-locations: classpath:mapper/*.xml # 映射文件路径
type-aliases-package: com.example.demo.model # 实体类包路径
-
url
:数据库连接地址。 -
username
和password
:数据库的用户名和密码。 -
mapper-locations
:指定 MyBatis 的 XML 映射文件路径。 -
type-aliases-package
:指定实体类所在的包。
五、创建项目结构
1. 实体类(Entity)
创建 User
实体类,用于映射数据库表 user
。
package com.example.demo.entity;
import lombok.Data;
@Data
public class User {
private Long id;
private String username;
private String password;
private String email;
}
2. Mapper 接口
创建 UserMapper
接口,定义数据库操作方法。
package com.example.demo.mapper;
import com.example.demo.entity.User;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface UserMapper {
User getUserById(Long id);
void insertUser(User user);
void updateUser(User user);
void deleteUser(Long id);
}
3. Mapper XML 文件
在 src/main/resources/mapper
目录下创建 UserMapper.xml
文件,编写 SQL 映射。
<?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.demo.mapper.UserMapper">
<select id="getUserById" parameterType="long" resultType="com.example.demo.entity.User">
SELECT * FROM user WHERE id = #{id}
</select>
<insert id="insertUser" parameterType="com.example.demo.entity.User">
INSERT INTO user (username, password, email) VALUES (#{username}, #{password}, #{email})
</insert>
<update id="updateUser" parameterType="com.example.demo.entity.User">
UPDATE user SET username = #{username}, password = #{password}, email = #{email} WHERE id = #{id}
</update>
<delete id="deleteUser" parameterType="long">
DELETE FROM user WHERE id = #{id}
</delete>
</mapper>
4. Service 层
创建 UserService
接口及其实现类 UserServiceImpl
,用于业务逻辑处理。
package com.example.demo.service;
import com.example.demo.entity.User;
public interface UserService {
User getUserById(Long id);
void createUser(User user);
void updateUser(User user);
void deleteUser(Long id);
}
package com.example.demo.service.impl;
import com.example.demo.entity.User;
import com.example.demo.mapper.UserMapper;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override
public User getUserById(Long id) {
return userMapper.getUserById(id);
}
@Override
public void createUser(User user) {
userMapper.insertUser(user);
}
@Ov