什么是缓存
- 存在于内存中的临时数据
为什么使用缓存
- 减少数据库交互的次数,提高执行效率
适用于缓存的数据
- 经常查询的数据
- 不经常改变的数据
- 数据的正确与否对最终结果影响不大的
- 以上反过来就是不适用于缓存的数据 ,例如:商品的库存,银行的汇率
一级缓存
- 他指的是MyBatis中SqlSession对象的缓存
- 当我们执行查询之后,查询的结果会同时存入得到SqlSession大为我们提供的一块区域中
- 该区域是一个Map
- 当我们再次查询同样的数据,MyBatis会先去SqlSession中查询是否有,有的话直接拿出来用
- SqlSession销毁时,一级缓存也就消失了
-
当用户在查询的时候(entity类没有重写toString()方法) 然后在测试方法里查询两次,两次的结果对象进行比较 内存地址时一致的那么就说明了第二次查询使用的是缓存。
-
在执行完一次查询操作的结束后,可调用该方法清空缓存 sqlSession.clearCache(); // 此方法清空缓存
-
MyBatis的一级缓存当调用SqlSession的修改,添加,删除,commit(),close() 等方法时就会自动清空缓存
二级缓存
- mybatis中SqlSessionFactory对象缓存(工厂的缓存)
- 由同一个SqlSessionFactory创建出来的多个SqlSession对象,共享同一个二级缓存
二级缓存的使用步骤
- 在主配置文件配置
<settings>
<setting name="cacheEnabled" value="ture"/>
<settings>
- <setting name=“cacheEnabled” value= " />
- 可以不用配置,因为默认为true 默认为支持
- 让当前的映射文件支持二级缓存(在映射文件中配置)
< cache >在mapper中添加这样一句代码即可 - 让当前的操作支持缓存(在映射文件中 select 标签中配置)
在select标签中 添加一个属性 usersCache=“true”
先创建出一个SqlSession对象然后执行sql,再关闭该对象,然后再创建出来一个SqlSession对象执行同样的SQL,第二个SQL没有执行,直接从缓存中拿的数据
二级缓存中存放的数据,而不是对象,因此使用 == 比较对象的内存的地址是false
下一篇更新:spring入门