用户先查询二级缓存,如果没有二级缓存就去看有没有一级缓存,如果都没有再去数据库中查询
一级缓存:SqlSession
MyTest.java
package dao; import org.apache.ibatis.session.SqlSession; import org.junit.Test; import pojo.User; import utils.MybatisUtils; public class MyTest { @Test public void quertTest() { SqlSession sqlSession= MybatisUtils.getSqlSession(); UserMapper userMapper=sqlSession.getMapper(UserMapper.class); User user=new User(); user=userMapper.queryUser(2); System.out.println(user); System.out.println("=========================="); User user2=new User(3,"苗迪","3"); userMapper.updateUser(user2); System.out.println("=========================="); User user1=new User(); user1=userMapper.queryUser(2); System.out.println(user1); //System.out.println(user==user1); sqlSession.close(); } }
========================================================================================
上面四个截图解释验证了select时再次查询同一个可以直接调用缓存,如果增删改了之后缓存就会刷新。
sqlSession.clearCache();//手动清理缓存
手动清理缓存之后的效果是这样的
一级缓存是默认开启的,只在一次SqlSession中有效
=====================================================================================================================================================================================
二级缓存
步骤:
1、开启缓存
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
2、
<!--在当前mapper中开启二级缓存-->
<cache
eviction="FIFO"
flushInterval="60000"
size="512"
readOnly="true"/>
3、提示 二级缓存是事务性的。这意味着,当 SqlSession 完成并提交时,或是完成并回滚,但没有执行 flushCache=true 的 insert/delete/update 语句时,缓存会获得更新。
通俗的讲:就是当上一个事务完毕之后sqlSession.close();然后二级缓存就会打开(如同通知使用两个SqlSession且在第一个没有关闭的情况下,第二个是不会使用第一个的缓存的,因为二级缓存没有开启)
原文:https://www.cnblogs.com/yizhixiaozhu/p/14697839.html