在mybatis3的版本中,集成了cache,这个cache也是mybatis自身做的代码级的cache,也就是session级别的,内核也就是采用map来做一级缓存,这个在session级别用处非常大,至少在一个session中,命中率较高。
现来看看在使用过程中如何配置:
mybatis的配置是基于xml来的,我在实际项目中是这样配置的:
01
02
03
04
05
06
07
08
09
10
11
12
|
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<!DOCTYPE configuration PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"
<
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官方已经考虑到了,给我们留下了可配置的地方,再来看如何操作:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
|
<?
xml
version
=
"1.0"
encoding
=
"UTF-8"
?>
<!DOCTYPE mapper PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
<
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,怎么做呢?
1
2
3
|
<
select
id
=
"inetAton"
parameterType
=
"string"
useCache
=
"false"
>
select inet_aton(#{name})
</
select
>
|
以上代码中有一个attribute: usecache,这就是控制是否对查询结果进行缓存的开关。
好了,mybatis的基本cache先写到这了,稍后会对cache做一个详细的讲解,包括cache的局限限和扩展性,自定义cache等,以及和nosql的对比。