mybatis 3.x 已经支持cache功能了,使用很简单,在mappper的xml文件里添加以下节点:
1 <mapper namespace="com.cnblogs.yjmyzz.mybatis.mapper.OrderMapper"> 2 3 <cache 4 eviction="LRU" 5 flushInterval="60000" 6 size="1024" 7 readOnly="true" 8 /> 9 ... 10 </mapper>
这里有几个要注意的地方:
eviction是缓存的淘汰算法,可选值有"LRU"、"FIFO"、"SOFT"、"WEAK",缺省值是LRU
flashInterval指缓存过期时间,单位为毫秒,60000即为60秒,缺省值为空,即只要容量足够,永不过期
size指缓存多少个对象,默认值为1024
readOnly是否只读,如果为true,则所有相同的sql语句返回的是同一个对象(有助于提高性能,但并发操作同一条数据时,可能不安全),如果设置为false,则相同的sql,后面访问的是cache的clone副本。
上面这个是全局设置,在每条单独的sql语句上,还可以有局部设置,比如:
<select id="getOrder" parameterType="int" resultType="TOrder" useCache="false"> ... </select>
useCache="false"表示该select语句不使用缓存(即使xml最开头的全局cache启用)
默认情况下,如果全局开启了缓存,insert/update/delete成功后,会自动刷新相关的缓存项,但有一点要特别注意:在mybatis与hibernate混用时,由于mybatis与hibernate的缓存是无关的,如果用mybatis做select查询,用hibernate做insert/update/delete,hibernate对数据的修改,并不会刷新mybatis的缓存。