通过上篇文章我们已经知道,MyBatis 一级缓存的最大共享范围为 SqlSession,即一次会话中,而且有可能会因为缓存没更新而导致脏读问题。如果需要在多个 SqlSession 中共享缓存,那么就需要开启二级缓存。
SqlSession 的创建会借助 SqlSessionFactory,而 DefaultSqlSession
可由 DefaultSqlSessionFactory#openSession
获得,Executor 通过 Configuration#newExecutor
方法获得,该方法会检查 cacheEnabled
配置,开启就意味着启用二级缓存:
配置
MyBatis 配置文件通过如下配置开启:
<setting name="cacheEnabled" value="true"/>
一个 mapper 文件有唯一的 namespace (<mapper namespace="***">
),在 mapper 文件中可通过 <cache/>
标签声明该 namespace 使用二级缓存。<cache-ref/>
可配置引用其他的命名空间,那么当前命名空间将与引用的命名空间使用同一个缓存(对于同一命名空间下的多表查询可借助该标签避免脏读问题)。<