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",则当你更新后,查询的数据数据还是老的数据。