什么是缓存
存在于内存中的临时数据
为什么使用缓存
减少和数据库的交互次数,提高执行效率
什么样的数据能使用缓存, 什么样的数据不能使用
适用缓存:
经常查询 并且不经常改变的
数据的正确与否 对最终结果影响不大的
不适用缓存:
经常改变的数据
数据的正确结果与否对最终结果影响很大的
Mybatis中的一级缓存和二级缓存:
一级缓存
他指的是Mybatis中SqlSession对象的缓存
当我们执行查询后, 查询的结果会同时存入到SqlSession为我们提供的一块区域中
该区域的结构是一个Map, 当我们再次查询同样的数据, mybatis会先去SqlSession中查询是否有, 有的话直接拿出来用
一级缓存是 SqlSession 级别的缓存,
当调用 SqlSession 的修改,添加,删除,commit(),close()等方法时,就会清空一级缓存。
sqlSession.clearCache();//此方法也可以清空缓存
这样做的目的为了让缓存中存储的是最新的信息,避免脏读。
二级缓存:
它指的是Mybatis中SqlSessionFactory对象的缓存, 由同一个SqlSessionFactory对象创建的SqlSession共享其缓存
存放的是数据,而不是对象(不同于一级缓存)
二级缓存的使用步骤:
第一步: 让Mybatis框架支持二级缓存(在SqlMapConfig.xml中配置)
<settings> <setting name="cacheEnabled" value="true"/> </settings>
第二步: 让当前的映射文件支持二级缓存(在持久层接口对应的映射文件中配置)
<!--开启user支持二级缓存--> <cache/>
第三步: 让当前的操作支持二级缓存(在select标签中配置)
<select id="findById" parameterType="INT" resultType="user" useCache="true"> select * from user where id = #{uid} </select>