mybatis缓存

纵然是瞬间 提交于 2019-11-26 16:43:26

概念:存在与内存的临时数据
使用作用:减少和数据库的交互次数,提高执行效率
使用环境:经常查询不常修改的数据,数据正确性与最终结果不大的如商品库存,银行汇率,股市的牌价就不能使用

一级缓存

在查询数据的时候会在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,这是因为二级缓存存储的不是对象,而是存储的数据。

在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!