MyBatis的flushCache和useCache的使用
一级缓存是SqlSession级别的缓存,第一次select 时,将查看是否有一级缓存,有的话直接用,如果没有去数据库中查去。得到用户信息放入一级缓存中去。如果SqlSession去执行commit操作(执行插入、删除、更新)的话,清空SqlSession中的一级缓存,这样做就是为了让缓存中的数据保持最新,避免用户读到错误的数据。
二级缓存
第一步:Configuration.xml设置二级缓存的总开关,
<!-- 全局映射器启用缓存 -->
<setting name="cacheEnabled" value="true" />
第二步:在具体的mapper.xml中开启二级缓存。
<select id="save" parameterType="XX" flushCache="true" useCache="false"> </select>
(1)当为select语句时:
flushCache默认为false,表示任何时候语句被调用,都不会去清空本地缓存和二级缓存。
useCache默认为true,表示会将本条语句的结果进行二级缓存。
(2)当为insert、update、delete语句时:
flushCache默认为true,表示任何时候语句被调用,都会导致本地缓存和二级缓存被清空。
useCache属性在该情况下没有。
当为select语句的时候,如果没有去配置flushCache、useCache,那么默认是启用缓存的,所以,如果有必要,那么就需要人工修改配置,
update 的时候如果 flushCache="false",则当你更新后,查询的数据数据还是老的数据。