Mybatis3之cache如何配置

时间:2022-08-04 05:13:24

在mybatis3的版本中,集成了cache,这个cache也是mybatis自身做的代码级的cache,也就是session级别的,内核也就是采用map来做一级缓存,这个在session级别用处非常大,至少在一个session中,命中率较高。

现来看看在使用过程中如何配置:

mybatis的配置是基于xml来的,我在实际项目中是这样配置的:

mybatis-configuration.xml
010203040506070809101112 <?xml
version
="1.0"
encoding
="UTF-8"?>
<!DOCTYPE
configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-config.dtd"><configuration>     <settings>        <setting
name
="cacheEnabled"
value
="true"
/>
        <setting
name
="useColumnLabel"
value
="true"
/>
        <setting
name
="useGeneratedKeys"
value
="true"
/>
    </settings> </configuration>

从上面可以看到在settings节点中,有一个cacheEabled的属性,在使用cache的时候,需要将这个property设置为true,否则cache是关闭的。

上面的配置是全局的,如果想对单独的model如何来做配置呢? 这点mybatis官方已经考虑到了,给我们留下了可配置的地方,再来看如何操作:

AppVersion.mbm.xml
010203040506070809101112131415161718 <?xml
version
="1.0"
encoding
="UTF-8"?>
<!DOCTYPE
mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd"> <mapper
namespace
="AppVersion">
     <cache
type
="org.mybatis.caches.ehcache.LoggingEhcache"
/>
     <resultMap
id
="AppVersionMap"
type
="com.tojsp.it.AppVersion"
        extends="BaseEntity.baseMap">        <result
property
="version"
column
="version"/>
        <result
property
="versionNum"
column
="version_num"/>
        <result
property
="compatibleNum"
column
="compatible_num"/>
        <result
property
="changeLog"
column
="change_log"/>
        <result
property
="releaseDate"
column
="release_date"/>
        <result
property
="remark"
column
="remark"/>
    </resultMap></mapper>

以上文件中的第7行,可以在此配置cache的相关属性,例如我在这个配置文件中使用的是第三方的ehcache,并没有使用mybatis自带的cache,这些配置都是可以扩展的,当然我们也可以自定义自己的cache,只用实现mybatis的接口就好了,当然这是后话,后面我会就此单独写文章。

当然,mybatis的cache控制粒度还可以更小,比如精确到每条语句的结果需要cache或不需要cache,怎么做呢?

AppVersion.mbm.xml
123 <select
id
="inetAton"
parameterType
="string"
useCache
="false"
select
inet_aton(#{name})
</select>

以上代码中有一个attribute: usecache,这就是控制是否对查询结果进行缓存的开关。

好了,mybatis的基本cache先写到这了,稍后会对cache做一个详细的讲解,包括cache的局限限和扩展性,自定义cache等,以及和nosql的对比。