本教程将详细介绍如何在SpringBoot项目中整合MyBatis框架,并通过一个简单的用户管理案例,演示完整的增删改查操作。跟随步骤,你将能快速构建起项目的数据访问层。
项目创建与环境准备
首先,使用Spring Initializr创建一个新的SpringBoot项目。
- 访问 https://start.spring.io/。
- 选择项目类型为 Maven,语言为 Java,SpringBoot 版本建议选择稳定的最新版。
- 在 Dependencies 中添加以下依赖:
- Spring Web
- MyBatis Framework
- MySQL Driver
- 点击“Generate”下载项目压缩包并解压,用IDE打开。
配置文件
在 src/main/resources/application.yml 中配置数据源和MyBatis。
spring:
datasource:
url: jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC&characterEncoding=utf8
username: your_username
password: your_password
driver-class-name: com.mysql.cj.jdbc.Driver
mybatis:
mapper-locations: classpath:mapper/*.xml
configuration:
map-underscore-to-camel-case: true
实体类与数据库表
创建一个与数据库表对应的实体类 User.java。
package com.example.demo.entity;
public class User {
private Long id;
private String name;
private Integer age;
private String email;
// 省略 Getter 和 Setter 方法
}
对应的SQL建表语句如下,请在MySQL数据库中执行。
CREATE TABLE `user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(50) DEFAULT NULL,
`age` int(11) DEFAULT NULL,
`email` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Mapper接口与XML映射文件
创建一个Mapper接口 UserMapper.java,定义数据操作方法。
package com.example.demo.mapper;
import com.example.demo.entity.User;
import org.apache.ibatis.annotations.*;
import java.util.List;
@Mapper
public interface UserMapper {
// 查询所有用户
List<User> findAll();
// 根据ID查询用户
User findById(@Param("id") Long id);
// 插入用户
int insert(User user);
// 更新用户
int update(User user);
// 删除用户
int deleteById(@Param("id") Long id);
}
在 src/main/resources/mapper 目录下创建对应的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.demo.mapper.UserMapper">
<select id="findAll" resultType="com.example.demo.entity.User">
SELECT * FROM user
</select>
<select id="findById" resultType="com.example.demo.entity.User">
SELECT * FROM user WHERE id = #{id}
</select>
<insert id="insert" parameterType="com.example.demo.entity.User" useGeneratedKeys="true" keyProperty="id">
INSERT INTO user (name, age, email) VALUES (#{name}, #{age}, #{email})
</insert>
<update id="update" parameterType="com.example.demo.entity.User">
UPDATE user SET name=#{name}, age=#{age}, email=#{email} WHERE id=#{id}
</update>
<delete id="deleteById">
DELETE FROM user WHERE id = #{id}
</delete>
</mapper>
编写Service层
创建Service接口 UserService.java 及其实现类 UserServiceImpl.java,封装业务逻辑。
package com.example.demo.service;
import com.example.demo.entity.User;
import java.util.List;
public interface UserService {
List<User> getAllUsers();
User getUserById(Long id);
Integer addUser(User user);
Integer updateUser(User user);
Integer 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;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserMapper userMapper;
@Override public List<User> getAllUsers() { return userMapper.findAll(); }
@Override public User getUserById(Long id) { return userMapper.findById(id); }
@Override public Integer addUser(User user) { return userMapper.insert(user); }
@Override public Integer updateUser(User user) { return userMapper.update(user); }
@Override public Integer deleteUser(Long id) { return userMapper.deleteById(id); }
}
创建Controller
最后,创建Restful API控制器 UserController.java 来暴露HTTP接口。
package com.example.demo.controller;
import com.example.demo.entity.User;
import com.example.demo.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@RestController
@RequestMapping("/api/users")
public class UserController {
@Autowired
private UserService userService;
@GetMapping
public List<User> getAllUsers() { return userService.getAllUsers(); }
@GetMapping("/{id}")
public User getUserById(@PathVariable Long id) { return userService.getUserById(id); }
@PostMapping
public String addUser(@RequestBody User user) {
userService.addUser(user);
return "用户添加成功";
}
@PutMapping
public String updateUser(@RequestBody User user) {
userService.updateUser(user);
return "用户更新成功";
}
@DeleteMapping("/{id}")
public String deleteUser(@PathVariable Long id) {
userService.deleteUser(id);
return "用户删除成功";
}
}
测试与验证
启动SpringBoot应用。可以使用Postman、cURL或浏览器测试以下API端点:
GET /api/users:获取所有用户列表。
GET /api/users/{id}:根据ID获取特定用户。
POST /api/users:新增一个用户(请求体为JSON格式的User对象)。
PUT /api/users:更新一个用户信息。
DELETE /api/users/{id}:删除指定ID的用户。
至此,一个整合了MyBatis的SpringBoot应用已成功构建,并具备了完整的CRUD功能。你可以在此基础上,进一步探索MyBatis的高级特性,如动态SQL、分页插件等,以满足更复杂的业务需求。