在Mybatis中一级缓存的使用的基础上进行修改:
UserDao类:
package com.qublog.dao;
import com.qublog.domain.User;
import java.util.List;
//用户的持久层接口
public interface UserDao {
//查询所有用户,同时获取到用户下所有账户的信息
List<User> findAll();
User findById(Integer id);
//更新用户信息
void upDateUser(User user);
}
UserDao.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.qublog.dao.UserDao">
<!-- 配置查询所有 -->
<select id="findAll" resultType="user">
select * from user;
</select>
<select id="findById" parameterType="Integer" resultType="user">
select * from user where id=#{id};
</select>
<!-- 更新用户信息 -->
<update id="upDateUser" parameterType="user">
update user set username=#{username},address=#{address} where id=#{id};
</update>
</mapper>
UserTest类:
@Test
public void testClearCache() {
//根据id查询用户
User user1 = userDao.findById(41);
System.out.println(user1);
//更新用户信息
user1.setUsername("567");
user1.setAddress("beijing");
userDao.upDateUser(user1);
//再次查询id为41的用户
User user2 = userDao.findById(41);
System.out.println(user2);
System.out.println(user1==user2);
}
输出结果:
从结果中可以看出缓存因为更新操作而清除。
结论:一级缓存是SqlSession范围的缓存,当调用SqlSession的修改、添加、删除、commit()、close()等方法时,就会清空一级缓存。