您的位置:首页 > 其它

mybatis 3.x 缓存介绍

2016-07-14 11:35 218 查看
MyBatis缓存分为一级缓存和二级缓存:

一级缓存是基于 PerpetualCache(mybatis自带)的 HashMap 本地缓存,作用范围为session,

所以当session commit或close后,缓存就会被清空.

1)单独使用MyBatis而不继承Spring,使用原生的MyBatis的SqlSessionFactory来构造sqlSession查询,

是可以使用以及缓存的,mybatis的一级缓存在spring中是没有作用的.

二级缓存

级缓存默认也是基于 PerpetualCache,但是可以为其制定存储源,比如ehcache.

二级缓存就是global caching,它超出session范围之外,可以被所有sqlSession共享,

它的实现机制和mysql的缓存一样,开启它只需要在mybatis的配置文件开启settings里的

<setting name="cacheEnabled" value="true"/>

以及在相应的Mapper文件(例如userMapper.xml)里开启.

<mapper namespace="dao.userdao">

   ...  select statement ...

       <!-- Cache 配置 -->

    <cache

        eviction="FIFO"

        flushInterval="60000"

        size="512"

        readOnly="true" />

</mapper>

二级缓存补充说明

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

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

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

  4. 缓存会根据指定的时间间隔来刷新。

  5. 缓存会存储1024个对象

cache标签常用属性:

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语句不使用缓存.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: