1. 一级缓存
- 开启日志
- 测试一个session中查询两次相同记录。
缓存失效:
- 映射语句文件中的所有 insert、update 和 delete 语句会刷新缓存。
- 查询不同的mapper.xml
- 手动清除缓存
一级缓存默认开启,只在一次sqlseesion中有效
2. 二级缓存
-
开启全局缓存
<setting name="cacheEnabled" value="true"/>
-
在当前mapper.xml中使用二级缓存
<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/>
-
test
@Test public void test(){ SqlSession sqlSession = MybatisUtils.getSqlSession(); SqlSession sqlSession1 = MybatisUtils.getSqlSession(); UserMapper userMapper = sqlSession.getMapper(UserMapper.class); User user = userMapper.queryUserByid(1); System.out.println(user); sqlSession.close(); UserMapper userMapper1 = sqlSession1.getMapper(UserMapper.class); User user1 = userMapper1.queryUserByid(1); System.out.println(user1); System.out.println(user==user1); sqlSession1.close(); }
-
只用cache时需要加序列化
<cache/>
小结:
- 只有开启了二级缓存,在Mapper下有效
- 所有数据都会先放在一级缓存
- 只有当会话提交,或者关闭的时候,才会提交到二级缓存