SpringBoot整合Mybatis演示
1.环境准备
- JDK 1.8
- MySQL 5.7
- Maven 3.6.3
- Idea 2020.1.1
数据库模拟数据准备:
CREATE DATABASE `springboot01`;
USE `springboot01`;
CREATE TABLE `table_emp` (
`emp_id` int(11) NOT NULL AUTO_INCREMENT,
`emp_name` varchar(50) NOT NULL,
`emp_age` int(11) NOT NULL,
`emp_birthday` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`emp_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
insert into `table_emp`(`emp_name`,`emp_age`,`emp_birthday`) values ('ara',20,'2020-07-28 23:21:38'),('胡',20,'2020-07-28 23:21:38');
2.搭建SpringBoot项目
使用Idea创建一个SpringBoot的空项目,添加依赖如下:
<!--MySQL连接驱动-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--Mybatis与SpringBoot整合的启动器-->
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>2.1.3</version>
</dependency>
<!--lombok:偷懒工具,使用其注解可以省略pojo类的方法编写-->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
在pojo包下创建与数据库匹配的实体类
package com.ara.pojo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
/**
* 测试员工类
* @author Ara
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Emp {
private int empId;
private String empName;
private int empAge;
private Date empBirthday;
}
配置SpringBoot的配置文件(application.yaml),这里配置数据源的连接配置和Mybatis的配置,如下:
spring:
# 数据源的配置
datasource:
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/springboot01?serverTimezone=GMT%2B8
username: root
password: 123456
mybatis:
# 别名包
type-aliases-package: com.ara.pojo
# mapper.xml文件地址
mapper-locations: classpath:mybatis/mapper/*.xml
configuration:
# 开启驼峰命名转换
map-underscore-to-camel-case: true
在主启动类的同级目录下创建mapper包,然后在里面创建EmpMapper接口如下:
package com.ara.mapper;
import com.ara.pojo.Emp;
import org.apache.ibatis.annotations.Mapper;
import org.springframework.stereotype.Repository;
import java.util.List;
/**
* Mybatis数据库操作测试
*
* @author Ara
*/
@Mapper
@Repository
public interface EmpMapper {
/**
* 查询所有的员工信息
* @return 员工信息列表
*/
List<Emp> getAllEmp();
}
然后在resources目录下创建mybatis文件夹,并在其中创建mapper文件夹,然后在mapper文件夹中编写EmpMapper.xml文件(注意这里的路径要和配置文件中mapper.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.ara.mapper.EmpMapper">
<select id="getAllEmp" resultType="Emp">
select * from table_emp;
</select>
</mapper>
到此,查询的方法就算是写完了,然后我们进行测试,在测试启动类中添加如下:
@Autowired
private EmpMapper empMapper;
@Test
void contextLoads() {
List<Emp> empList = empMapper.getAllEmp();
for (Emp emp : empList) {
System.out.println(emp);
}
}
测试结果如下:
表示我们的配置和代码编写都没有问题。
3.补充增删改
上面我们对数据库进行了查询操作,接下来我们就完成简单的增删改功能。
增
在EmpMapper接口中添加如下方法:
/**
* 插入数据
* @param emp 待插入数据
* @return 受影响行数
*/
int insertEmp(Emp emp);
EmpMapper.xml:
<insert id="insertEmp" parameterType="Emp">
insert into table_emp (emp_name,emp_age,emp_birthday)
values (#{empName},#{empAge},#{empBirthday});
</insert>
测试代码:
@Test
void insertTest(){
Emp insertEmp = new Emp();
insertEmp.setEmpName("admin");
insertEmp.setEmpAge(18);
insertEmp.setEmpBirthday(new Date());
empMapper.insertEmp(insertEmp);
//查询验证
List<Emp> empList = empMapper.getAllEmp();
for (Emp emp : empList) {
System.out.println(emp);
}
}
测试结果:
删除
EmpMapper接口:
/**
* 删除数据
* @param id 待删除数据的Id
* @return 受影响的行数
*/
int deleteEmpById(int id);
EmpMapper.xml:
<delete id="deleteEmpById" parameterType="int">
delete from table_emp where emp_id = #{id};
</delete>
测试代码:
@Test
void deleteTest(){
empMapper.deleteEmpById(3);
//查询验证
List<Emp> empList = empMapper.getAllEmp();
for (Emp emp : empList) {
System.out.println(emp);
}
}
测试结果:
修改
EmpMapper接口:
/**
* 修改数据
* @param emp 待修改数据
* @return 受影响行数
*/
int updateEmpById(Emp emp);
EmpMapper.xml:
<update id="updateEmpById" parameterType="Emp">
update table_emp set
emp_name = #{empName},
emp_age = #{empAge},
emp_birthday = #{empBirthday}
where
emp_id = #{empId};
</update>
测试代码:
@Test
void updateTest(){
Emp updateEmp = new Emp();
updateEmp.setEmpId(2);
updateEmp.setEmpName("admin");
updateEmp.setEmpAge(18);
updateEmp.setEmpBirthday(new Date());
empMapper.updateEmpById(updateEmp);
//查询验证
List<Emp> empList = empMapper.getAllEmp();
for (Emp emp : empList) {
System.out.println(emp);
}
}
测试结果:
到此就表明我们简单的数据库操作就已经成功了。
4.补充说明
上面我们编写的测试,重心基本都在业务逻辑上,我们做的很少,就是因为SpringBoot帮我们都做了,比如数据库连接,甚至我们还发现它还有自己默认的数据库连接池(Hikari),刚刚我们并未显式的指定数据库连接池,所以就使用了默认的配置,如果我们需要自定义其他的数据库连接池类型,我们只需要在配置中指定即可。
举个例子:如果我们在上面的基础上,将数据库连接池类型换成阿里巴巴的druid,我们只需要在pom文件中导入druid的依赖,然后将数据源的类型指定为druid即可:
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.1.21</version>
</dependency>
这样就成功的更换了数据库的连接池类型。
如果需要更加详细的日志打印在控制台上,比如上面的例子,我们想要查看运行的Sql语句,我们只需要在配置文件中添加一个配置即可:
logging:
level:
# 对应的包:日志级别
com.ara.mapper: debug
这样就设置了打印com.ara.mapper
包下级别为debug
的日志。