一级缓存
- 一级缓存也叫本地缓存
- 与数据库同一次会话期间查询到的数据会放在本地缓存中。
- 以后如果需要获取相同的数据,直接从缓存中拿,没必须再去查询数据库;
- 编写接口方法
User queryUserById(@Param("id") int id);
- 接口对应的Mapper文件
<select id="queryUserById" parameterType="int" resultType="user">
select * from mybatis.user where id=#{id}
</select>
- 测试
public void test()
{
SqlSession sqlSession = MybatisUtils.getSqlSession();
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User user = mapper.queryUserById(1);
System.out.println(user);
// mapper.updateUser(new User(2,"aaa","bbb"));
sqlSession.clearCache();//手动清理缓存
System.out.println("================");
User user2 = mapper.queryUserById(1);
System.out.println(user2);
System.out.println(user==user2);
sqlSession.close();
}
- 结果分析
从运行状态中可以看出,SQL语句只查询了一次,第二次结果没有进行数据库查询,用的是同一个对象。
一级缓存失效的情况
-
查询不同的东西
-
增删改操作,可能会改变原来的数据,所以必定会刷新缓存
-
查询不同的Mapper.xml
-
手动清理缓存