Spring Boot学习笔记9:使用MyBatis访问数据库
下面我们以之前的 Spring Boot学习笔记6:构建一个RESTful API并单元测试为基础,整合使用MyBatis访问数据库。
整合MyBatis
- 使用MySQL创建
springboot_mybatis
数据库,建立USER
表。注意这里建议使用InnoDB
作为数据库引擎,否则可能Spring Boot无法进行事务回滚处理。
CREATE TABLE `user` (
`ID` int(11) NOT NULL,
`NAME` varchar(255) DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
pom.xml
中引入依赖。- 这里用到
spring-boot-starter
基础和spring-boot-starter-test
用来做单元测试验证数据访问; - 引入连接mysql的必要依赖
mysql-connector-java
; - 引入整合MyBatis的核心依赖
mybatis-spring-boot-starter
; - 这里不引入
spring-boot-starter-jdbc
依赖,是由于mybatis-spring-boot-starter
中已经包含了此依赖;
- 这里用到
<?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 http://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>2.1.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>org.csu</groupId>
<artifactId>springboot_mybatis</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>springboot_mybatis</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.0.0</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</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>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
- 在
application.properties
中配置MySql的连接配置。
# 注意添加参数characterEncoding=utf8否则插入数据库会导致乱码
spring.datasource.url=jdbc:mysql://localhost:3306/springboot_mybatis?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=password
# spring.datasource.driver-class-name=com.mysql.jdbc.Driver已经被废弃了
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
- 映射对象
User
。
@Data
public class User {
private int id;
private String name;
}
- 创建
User
映射的操作UserMapper
,为了后续单元测试验证,实现增删改查操作。
@Repository
@Mapper
public interface UserMapper {
@Select("SELECT * FROM USER WHERE ID = #{id}")
User find(@Param("id") int id);
@Insert("INSERT INTO USER(ID, NAME) VALUES(#{id}, #{name})")
int insert(User user);
@Update("UPDATE USER SET NAME = #{name} WHERE ID = #{id}")
void update(User user);
@Delete("DELETE FROM USER WHERE ID = #{id}")
void delete(int id);
}
- 创建单元测试,并在
@Test
注解的测试方法上注解@Transactional
,这样测试结束将回滚数据,保证测试单元每次运行的数据环境独立。
@RunWith(SpringRunner.class)
@SpringBootTest
public class SpringbootMybatisApplicationTests {
@Autowired
private UserMapper userMapper;
@Test
@Transactional
public void mybatisTest() throws Exception {
User user = new User();
user.setId(1);
user.setName("O大叔Tz");
//插入一条数据
userMapper.insert(user);
//查找一条数据
user = userMapper.find(1);
Assert.assertEquals("O大叔Tz", user.getName());
更新一条数据
user.setName("大叔");
userMapper.update(user);
user = userMapper.find(1);
Assert.assertEquals("大叔", user.getName());
//删除一条数据
userMapper.delete(1);
user = userMapper.find(1);
Assert.assertEquals(null, user);
}
}