MyBatis是一个开源的持久化框架,可以将Java对象映射到关系数据库中,提供了方便的数据库操作接口,让开发人员可以更加专注于业务逻辑的实现。
本文将介绍如何在Spring Boot中使用MyBatis,以及如何进行整合。我们将使用MySQL作为关系数据库,并演示如何使用MyBatis进行基本的CRUD操作。
环境搭建
在开始整合Spring Boot和MyBatis之前,需要先搭建好相关的环境。具体步骤如下:
1.安装MySQL数据库。可以从官网上下载MySQL Community Server,并按照安装指南进行安装。安装完成后,可以通过MySQL Workbench等工具连接到数据库。
2.创建数据库和表。在MySQL Workbench中执行以下SQL语句:
CREATE DATABASE mybatis_demo;
USE mybatis_demo;
CREATE TABLE users (
id INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(50),
email VARCHAR(50),
age INT
);
3.添加相关依赖。在pom.xml中添加以下依赖:
<dependencies>
<!-- Spring Boot dependencies -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- MyBatis dependencies -->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.2.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.27</version>
</dependency>
</dependencies>
整合MyBatis
在添加了相关依赖后,就可以开始整合MyBatis了。下面将介绍具体步骤:
1.创建MyBatis配置文件。在src/main/resources目录下创建一个mybatis-config.xml文件,用于配置MyBatis的一些属性和插件。具体内容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
</configuration>
这里设置了一个属性,用于将数据库中下划线分隔的列名转换为Java驼峰命名的属性名。
2.创建Mapper接口和Mapper XML文件。在src/main/java/com/example/demo/mapper目录下创建一个UserMapper接口,用于定义数据库操作的方法。具体内容如下:
package com.example.demo.mapper;
import com.example.demo.entity.User;
import java.util.List;
public interface UserMapper {
List<User> findAll();
User findById(int id);
void save(User user);
void update(User user);
void delete(int id);
}
这里定义了五个方法,分别对应基本的CRUD操作。
接着,在src/main/resources目录下创建一个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">
<resultMap id="userMap" type="com.example.demo.entity.User">
<id property="id" column="id" />
<result property="name" column="name" />
<result property="email" column="email" />
<result property="age" column="age" />
</resultMap>
<select id="findAll" resultMap="userMap">
SELECT * FROM users
</select>
<select id="findById" parameterType="int" resultMap="userMap">
SELECT * FROM users WHERE id = #{id}
</select>
<insert id="save">
INSERT INTO users (name, email, age) VALUES (#{name}, #{email}, #{age})
</insert>
<update id="update">
UPDATE users SET name = #{name}, email = #{email}, age = #{age} WHERE id = #{id}
</update>
<delete id="delete" parameterType="int">
DELETE FROM users WHERE id = #{id}
</delete>
</mapper>
这里定义了五个SQL语句,分别对应基本的CRUD操作。同时,也定义了一个resultMap用于映射查询结果到Java对象。
3.创建Mapper接口实现类。在src/main/java/com/example/demo/mapper目录下创建一个UserMapperImpl类,用于实现UserMapper接口中的方法。具体内容如下:
package com.example.demo.mapper;
import com.example.demo.entity.User;
import org.mybatis.spring.SqlSessionTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;
import java.util.List;
@Repository
public class UserMapperImpl implements UserMapper {
@Autowired
private SqlSessionTemplate sqlSession;
@Override
public List<User> findAll() {
return sqlSession.selectList("findAll");
}
@Override
public User findById(int id) {
return sqlSession.selectOne("findById", id);
}
@Override
public void save(User user) {
sqlSession.insert("save", user);
}
@Override
public void update(User user) {
sqlSession.update("update", user);
}
@Override
public void delete(int id) {
sqlSession.delete("delete", id);
}
}
这里使用了SqlSessionTemplate来执行SQL语句,其中的方法名对应了Mapper XML文件中定义的SQL语句的id属性。
4.配置MyBatis和Mapper接口。在Spring Boot的配置文件application.properties中添加以下配置:
mybatis.mapper-locations=classpath*:mapper/*.xml
mybatis.type-aliases-package=com.example.demo.entity
这里指定了Mapper XML文件的位置和Java实体类的包名,让MyBatis能够自动扫描并绑定Mapper接口和XML文件。
5.创建Controller类。在src/main/java/com/example/demo/controller目录下创建一个UserController类,用于处理用户请求。具体内容如下:
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("/users")
public class UserController {
@Autowired
private UserMapper userMapper;
@GetMapping("")
public List<User> findAll() {
return userMapper.findAll();
}
@GetMapping("/{id}")
public User findById(@PathVariable int id) {
return userMapper.findById(id);
}
@PostMapping("")
public void save(@RequestBody User user) {
userMapper.save(user);
}
@PutMapping("/{id}")
public void update(@PathVariable int id, @RequestBody User user) {
user.setId(id);
userMapper.update(user);
}
@DeleteMapping("/{id}")
public void delete(@PathVariable int id) {
userMapper.delete(id);
}
}
这里使用了@RestController注解来声明一个基于REST的控制器,同时使用@RequestMapping注解指定了请求路径。在控制器中,我们通过@Autowired注解将UserMapper注入到控制器中,然后分别实现了findAll、findById、save、update和delete等方法来处理对应的请求。
至此,我们已经完成了Spring Boot与MyBatis的整合工作。整个应用的代码已经可以在Spring Boot中运行了。在运行应用之前,需要启动一个MySQL数据库,并在其中创建一个名为test的数据库。
这里提供一个完整的项目结构:
.
├── src
│ ├── main
│ │ ├── java
│ │ │ └── com
│ │ │ └── example
│ │ │ └── demo
│ │ │ ├── DemoApplication.java
│ │ │ ├── controller
│ │ │ │ └── UserController.java
│ │ │ ├── entity
│ │ │ │ └── User.java
│ │ │ ├── mapper
│ │ │ │ ├── UserMapper.java
│ │ │ │ └── UserMapperImpl.java
│ │ │ └── service
│ │ │ └── UserService.java
│ │ └── resources
│ │ ├── application.properties
│ │ ├── mapper
│ │ │ └── UserMapper.xml
│ │ └── schema.sql
│ └── test
│ └── java
│ └── com
│ └── example
│ └── demo
│ └── DemoApplicationTests.java
└── pom.xml
在完成上述代码的编写之后,可以在终端中进入项目目录,执行以下命令运行应用:
mvn spring-boot:run
接着,在浏览器中访问 http://localhost:8080/users 即可访问用户列表