MyBatis 缓存
正如大多数持久化框架一样,MyBatis 提供了一级缓存和二级缓存的支持。
一级缓存
一级缓存是基于 PerpetualCache(MyBatis 自带)的 HashMap 本地缓存,作用范围为 session 域内,当 session flush 或者 close 之后,该 session 中所有的 cache 就会被清空。
二级缓存
二级缓存就是 global caching(全局缓存),它超出 session 范围之外,可以被所有 SqlSession 共享,开启它只需要在 MyBatis 的核心配置文件(mybatis-config.xml) settings 标签中设置即可。
一级缓存缓存的是 SQL 语句,二级缓存缓存的是结果对象。
二级缓存的配置
(1)MyBatis 的全局 cache 配置,需要在 mybatis-config.xml 的 settings 中设置,代码如下:
<settings> <setting name="cacheEnabled" value="true" /> </settings>
(2)在 mapper 文件(如:UserMapper.xml)中设置缓存,默认情况下是没有开启缓存的,需要注意的是, global caching 的作用域是针对 mapper 的 namespace 而言的,即只有在此 namespace 内(com.smbms.dao.UserMapper)的查询才能共享这个 cache,代码如下:
<mapper namespace="com.smbms.dao.UserMapper"> <!--cache 配置--> <cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true" /> </mapper>
(3)在 mapper 文件配置支持 cache 后,如果需要对个别查询进行调整,可以单独设置 cache,代码如下:
<!--设置 useCache="true"--> <select id="getUserList" resultType="com.smbms.pojo.User" useCache="true"> </select>
说明
对于 MyBatis 缓存的内容仅做了解即可,因为面对一定规模的数据量,内置的 Cache 方式就派不上用场了,并且对查询结果集做缓存并不是 MyBatis 框架擅长的,它专心做的应该是 SQL 映射。所以采用 OSCache , Memcached 等专门的缓存服务器来做更为合理。