目录
在上一章的基础上,本章将使用 Mybatis 自带的二级缓存。
上一章内容(SpringBoot整合redis之环境搭建(SpringBoot整合Mybatis、druid连接池)):https://blog.csdn.net/u010559460/article/details/109383120
1、添加新的方法
在上一章中只有一个 findAll 方法,本次将添加4个方法分别是 findById、delete、save、update
1.1 UserDao 接口
User findById(String id);
void delete(String id);
void save(User user);
void update(User user);
1.2 UserDaoMapper.xml 映射描述文件
<!--findById-->
<select id="findById" parameterType="String" resultType="User">
select id,name,age,bir from t_user where id = #{id}
</select>
<!--delete-->
<delete id="delete" parameterType="String" >
delete from t_user where id= #{id}
</delete>
<!--save-->
<insert id="save" parameterType="User" >
insert into t_user values(#{id},#{name},#{age},#{bir})
</insert>
<!--update-->
<update id="update" parameterType="User">
update t_user
set name=#{name},age=#{age},bir=#{bir}
where id=#{id}
</update>
1.3 UserService 接口
User findById(String id);
void delete(String id);
void save(User user);
void update(User user);
1.4 UserServiceImpl 实现类
public User findById(String id) {
return userDao.findById(id);
}
@Override
public void update(User user) {
userDao.update(user);
}
@Override
public void save(User user) {
userDao.save(user);
}
@Override
public void delete(String id) {
userDao.delete(id);
}
2、添加 Mybatis自带的缓存(本地缓存)
哪个 dao需要添加缓存,就在哪个 dao 接口对应的映射文件中添加 <cache /> 标签,例如:本次实验就在 UserDaoMapper.xml 文件中添加 <cache /> 标签,如图:
3、对比测试
3.1 测试 findAll 方法
@Test
public void findAll() {
List<User> users = userService.findAll();
System.out.println(users);
users = userService.findAll();
System.out.println(users);
}
没加缓存的结果:
添加缓存后的结果:
3.2 测试 findById 方法
查询同一个id :
@Test
public void findById() {
User user = userService.findById("1");
System.out.println(user);
userService.findById("1");
}
没加缓存的结果:肯定是要查询2次,这里就不演示了
添加缓存后的结果:只需要查1次
查询不同id :
@Test
public void findById() {
User user = userService.findById("1");
System.out.println(user);
userService.findById("2");
}
即使加了缓存标签,由于参数值不一样,也是要查询两次。如图:
3.3 测试 save 方法
@Test
public void save() {
// 1. 第一次查询
List<User> users = userService.findAll();
System.out.println(users);
User user = new User();
user.setId("5");
user.setName("a1");
user.setAge(18);
user.setBir(new Date());
// 2. 添加用户
userService.save(user);
// 3.第二次查询
userService.findAll();
}
添加缓存后的结果:保存操作会清除缓存
3.4 测试 update方法
添加 <cache /> 后的测试
@Test
public void update() {
// 1 查询 id 为1 的数据
User user = userService.findById("1");
System.out.println(user);
// 2. 更新数据
user.setName("a2");
userService.update(user);
// 3. 再次查询 id 为1 的数据
userService.findById("1");
}
更新数据会导致缓存失效
3.5 测试 delete方法
添加 <cache /> 后的测试
@Test
public void delete() {
// 1. 第一次查询
List<User> users = userService.findAll();
System.out.println(users);
userService.delete("5");
// 3.第二次查询
userService.findAll();
}
删除数据会导致缓存失效,如图:
4、总结
引用 mybatis 官网(https://mybatis.org/mybatis-3/zh/sqlmap-xml.html)