一.MyBatis的Cache配置
1.全局开关(Mybatis一级缓存SqlSession级别):
默认自动开启是true,默认支持一级缓存.
注意:无法取消设置一级缓存(想不设置一级缓存),即使把它配成false,想让其余各个Mapper XML文件配成不支持cache,也无法起到取消一级缓存的作用.(不让开发人员动)

<settings>
    <setting name="cacheEnabled" value="true"/>
</settings>

2.开启Mybatis二级缓存SqlSessionFactory级别:
各个Mapper XML文件,默认是不采用cache.在配置文件加一行就可以支持cache:
 
<cache />

3.Mapper XML文件配置支持cache后,文件中所有的Mapper statement就支持了.此时要个别对待某条,需要:


<select id="inetAton" parameterType="string" resultType="integer" useCache=“false”>   
    select inet_aton(#{name})
</select>

二.注意的几个细节
1.如果readOnly为false,此时要结果集对象是可序列化的.
<cache readOnly="false"/>

2.在SqlSession未关闭之前,如果对于同样条件进行重复查询,
此时采用的是local session cache,而不是上面说的这些cache.
SqlSession关闭之后,如果对于同样条件进行重复查询,采用的是Mybatis一级缓存SqlSession级别.

3.MyBatis缓存查询到的结果集对象,而非结果集数据,是将映射的PO对象集合缓存起来.

说意义不大是在于:
a.面对一定规模的数据量,内置的cache方式就派不上用场了;
b.对查询结果集做缓存并不是MyBatis框架擅长的,它专心做的应该是sql mapper.
采用此框架的Application去构建缓存更合理,比如采用OSCache.Memcached啥的.

 

 

 

更多推荐

MyBatis的缓存配置(Cache)