在mybatis3的版本中,集成了cache,这个cache也是mybatis自身做的代码级的cache,也就是session级别的,内核也就是采用map来做一级缓存,这个在session级别用处非常大,至少在一个session中,命中率较高。
现来看看在使用过程中如何配置:
mybatis的配置是基于xml来的,我在实际项目中是这样配置的:
010203040506070809101112 | <? xml
= "1.0"
= "UTF-8" ?> <!DOCTYPE "http://ibatis.apache.org/dtd/ibatis-3-config.dtd"> < configuration > < settings > < setting
= "cacheEnabled"
= "true"
< setting
= "useColumnLabel"
= "true"
< setting
= "useGeneratedKeys"
= "true"
</ settings > </ configuration > |
从上面可以看到在settings节点中,有一个cacheEabled的属性,在使用cache的时候,需要将这个property设置为true,否则cache是关闭的。
上面的配置是全局的,如果想对单独的model如何来做配置呢? 这点mybatis官方已经考虑到了,给我们留下了可配置的地方,再来看如何操作:
010203040506070809101112131415161718 | <? xml
= "1.0"
= "UTF-8" ?> <!DOCTYPE "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd"> < mapper
= "AppVersion" > < cache
= "org.mybatis.caches.ehcache.LoggingEhcache" < resultMap
= "AppVersionMap"
= "com.tojsp.it.AppVersion" extends = "BaseEntity.baseMap" > < result
= "version"
= "version" /> < result
= "versionNum"
= "version_num" /> < result
= "compatibleNum"
= "compatible_num" /> < result
= "changeLog"
= "change_log" /> < result
= "releaseDate"
= "release_date" /> < result
= "remark"
= "remark" /> </ resultMap > </ mapper > |
以上文件中的第7行,可以在此配置cache的相关属性,例如我在这个配置文件中使用的是第三方的ehcache,并没有使用mybatis自带的cache,这些配置都是可以扩展的,当然我们也可以自定义自己的cache,只用实现mybatis的接口就好了,当然这是后话,后面我会就此单独写文章。
当然,mybatis的cache控制粒度还可以更小,比如精确到每条语句的结果需要cache或不需要cache,怎么做呢?
123 | < select
= "inetAton"
= "string"
= "false" > select </ select > |
以上代码中有一个attribute: usecache,这就是控制是否对查询结果进行缓存的开关。
好了,mybatis的基本cache先写到这了,稍后会对cache做一个详细的讲解,包括cache的局限限和扩展性,自定义cache等,以及和nosql的对比。