SpringBoot整合MyBatis
1、引入相关依赖
首先创建一个SpringBoot项目,并导入MySQL和MyBatis依赖,如图所示:
也可以在已有的SpringBoot项目里修改pom.xml文件,引入依赖:
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.2</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
2、编写MyBatis映射类
首先创建两个表,sql代码如下:
员工表(employee):
DROP TABLE IF EXISTS `employee`;
CREATE TABLE `employee` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`lastName` varchar(255) DEFAULT NULL,
`email` varchar(255) DEFAULT NULL,
`gender` int(2) DEFAULT NULL,
`d_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
部门表(department):
DROP TABLE IF EXISTS `department`;
CREATE TABLE `department` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`departmentName` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
接下来编写实体类:
Employee.java:
package com.example.demo.bean;
public class Employee {
private Integer id;
private String lastName;
private String email;
private Integer gender; //性别 1男 0女
private Integer dId;
public Employee() {
super();
}
public Employee(Integer id, String lastName, String email, Integer gender, Integer dId) {
super();
this.id = id;
this.lastName = lastName;
this.email = email;
this.gender = gender;
this.dId = dId;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public Integer getGender() {
return gender;
}
public void setGender(Integer gender) {
this.gender = gender;
}
public Integer getdId() {
return dId;
}
public void setdId(Integer dId) {
this.dId = dId;
}
@Override
public String toString() {
return "Employee [id=" + id + ", lastName=" + lastName + ", email=" + email + ", gender=" + gender + ", dId="
+ dId + "]";
}
}
Department.java:
package com.example.demo.bean;
public class Department {
private Integer id;
private String departmentName;
public Department() {
super();
}
public Department(Integer id, String departmentName) {
super();
this.id = id;
this.departmentName = departmentName;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getDepartmentName() {
return departmentName;
}
public void setDepartmentName(String departmentName) {
this.departmentName = departmentName;
}
@Override
public String toString() {
return "Department [id=" + id + ", departmentName=" + departmentName + "]";
}
}
下面编写Mybatis映射类:
注:我们所有Mybatis映射接口均放在mapper包下
1)、基于注解映射
EmployeeMapper.java
package com.example.demo.mapper;
import com.example.demo.bean.Employee;
import org.apache.ibatis.annotations.*;
/**
* @author Tracy
* @date 2020/5/2 12:37
*/
@Mapper
public interface EmployeeMapper {
@Select("SELECT * FROM employee WHERE id = #{id}")
public Employee getEmpById(Integer id);
@Update("UPDATE employee SET lastName=#{lastName},email=#{email},gender=#{gender},d_id=#{dId} WHERE id=#{id}")
public void updateEmp(Employee employee);
@Delete("DELETE FROM employee WHERE id=#{id}")
public void deleteEmpById(Integer id);
@Insert("INSERT INTO employee(lastName,email,gender,d_id) VALUES(#{lastName},#{email},#{gender},#{dId})")
public void insertEmployee(Employee employee);
@Select("SELECT * FROM employee WHERE lastName = #{lastName}")
Employee getEmpByLastName(String lastName);
}
2)、基于配置文件映射
DepartmentMapper.java:
package com.example.demo.mapper;
import com.example.demo.bean.Department;
import org.apache.ibatis.annotations.Mapper;
/**
* @author Tracy
* @date 2020/5/2 12:37
*/
@Mapper
public interface DepartmentMapper {
Department getDeptById(Integer id);
}
3、编写配置文件:
1)、编写MyBatis映射文件:
上面的DepartmentMapper.java我们并没有直接使用注解实现数据库的操作,下面我们来编写DepartmentMapper.xml实现department映射:
<?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.DepartmentMapper">
<resultMap id="department" type="com.example.demo.bean.Department">
<id property="id" column="id"/>
<result property="departmentName" column="departmentName"/>
</resultMap>
<select id="getDeptById" resultMap="department">
select * from department where id = #{id}
</select>
</mapper>
2)、编写MyBatis全局配置文件
编写mapper-config.xml
<?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>
<!-- 由于我们数据库配置可在全局文件配置,所以在MyBatis配置文件中仅开启MyBatis的驼峰命名规则相关配置 -->
<settings>
<setting name="mapUnderscoreToCamelCase" value="true"/>
</settings>
</configuration>
3)、编写SpringBoot配置文件
编写application.yml:
spring:
datasource:
url: jdbc:mysql://localhost:3306/数据库名?useUnicode=true&serverTimezone=UTC
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: 密码
mybatis:
#mybatis映射文件位置,*.xml表示所有后缀为xml的文件
mapper-locations: classpath:mybatis/mappers/*.xml
#mybatis配置文件位置:
config-location: classpath:mybatis/mybatis-config.xml
4、测试
首先来看一下项目目录:
下面我们编写测试类来进行测试:
package com.example.demo;
import com.example.demo.mapper.DepartmentMapper;
import com.example.demo.mapper.EmployeeMapper;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
@SpringBootTest
class DemoApplicationTests {
@Autowired
EmployeeMapper employeeMapper;
@Autowired
DepartmentMapper departmentMapper;
@Test
void contextLoads() {
System.out.println(employeeMapper.getEmpById(1));
System.out.println(departmentMapper.getDeptById(1));
}
}
此时编译器会给我们警告,提示我们容器中并没有相关的bean,如下图所示:
但实际上我们的映射类已经添加入在了容器中,如果实在有强迫症可以在两个映射接口中添加@Component或者@Repository注解,如图所示:
这样编译器的警告就消失了,下面我们在数据库中添加一些数据:
employee表:
department表:
下面我们运行测试类:
查看结果:
可以发现程序从数据库中读取到了数据,这样我们就成功地将SpringBoot和Mybatis整合。