mybatis缓存
概念:存在与内存的临时数据
使用作用:减少和数据库的交互次数,提高执行效率
使用环境:经常查询不常修改的数据,数据正确性与最终结果不大的如商品库存,银行汇率,股市的牌价就不能使用
一级缓存
在查询数据的时候会在SqlSession存入缓存,缓存中的数据是map结构数据,SqlSession消失,缓存也消失
测试:
1.调用相同的查询方法,发现返回的两个对象相等,并且sql只执行了一次
2.当清除SqlSession缓存的时候,sql执行了两次,并且的到的对象地址也是不同的
触发清空一级缓存的情况
一级缓存会在调用修改,添加,删除,commit(),close()等方法时,就会清空一级缓存
二级缓存
是SqlSessionFactory对象的缓存该对象创建的SqlSession都共享其缓存
测试
1.使用相同的factory创建SqlSession,并在使用后close(),这样可以清楚一级缓存
2.查看以上结果发现并没有缓存的效果,相同的调用下sql语句还是执行了两遍,这是因为手动开启二级缓存
开启二级缓存有三步:
1).在全局配置文件SqlMapConfig下设置Setting的cacheEnabled属性为true(本身默认值为true)
2).在实体类映射文件中添加<cache/>标签
3).在select中添加useCache="true"
3.此时日志显示二级缓存开启,但是两个对象的的判断却还是false,这是因为二级缓存存储的不是对象,而是存储的数据。