日期:2014-05-16  浏览次数:20488 次

Mybatis3缓存设置

开启缓存

默认情况下,缓存没有开启。要开启缓存,在SQL的映射文件中加入

?

<cache/>

?

?其作用为

?

? ?映射语句文件中的所有 select 语句将会被缓存。?

? ?映射语句文件中的所有 insert,update 和 delete 语句会刷新缓存。?

? ?缓存会使用 Least Recently Used(LRU,最近最少使用的)算法来收回。?

? ?根据时间表(比如 no Flush Interval,没有刷新间隔),缓存不会以任何时间顺序来刷新。?

? ?缓存会存储列表集合或对象(无论查询方法返回什么)的 1024个引用。?

? ?缓存会被视为是 read/write(可读/可写)的缓存,意味着对象检索不是共享的,而且可以安全地被调用者修改,而不干扰其他调用者或线程所做的潜在修改。?

?

?

设置缓存属性

?

<cache 
 eviction="FIFO" 
 flushInterval="60000
 size="512" 
 readOnly="true"/> 

?

?这个含义是,回收策略为先进先出。最多保存512个引用,引用返回的对象是只读的,每隔60秒刷新一次

?

可用的收回策略有:?

? ?LRU – ?最近最少使用的:移除最长时间不被使用的对象。?

? ?FIFO – ?先进先出:按对象进入缓存的顺序来移除它们。?

? ?SOFT – ?软引用:移除基于垃圾回收器状态和软引用规则的对象。?

? ?WEAK – ?弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象

默认的是 LRU。?

?

?

自定义缓存

?

<cache type=”com.domain.something.MyCustomCache”/> 

?

?定义的缓存要实现以下接口即可

?

 public interface Cache { 
            String getId(); 
            int getSize(); 
            void putObject(Object key, Object value);
            Object getObject(Object key); 
            boolean hasKey(Object key); 
            Object removeObject(Object key); 
            void clear(); 
            ReadWriteLock getReadWriteLock(); 
       } 

?

?调用自定义缓存的方法

?

<cache type=”com.domain.something.MyCustomCache”> 
 <property name=”cacheFile” value=”/tmp/my-custom-cache.tmp”/>
</cache> 

?

?这会调用MyCustomCache的setCacheFile方法

?

在语句上设置缓存

?

<select ... flushCache=”false” useCache=”true”/> 
<insert ... flushCache=”true”/> 
<update ... flushCache=”true”/> 
<delete ... flushCache=”true”/> 
?

?

如果当前映射文件要使用别的映射文件中的缓存设置

?

<cache-ref namespace=”com.someone.application.data.SomeMapper”/> 
?

?