正如大多数持久化框架一样,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 等专门的缓存服务器来做更为合理。