MyBatis 的二级缓存是mapper级别的缓存,多个session可以共享。
与一级缓存相比,二级缓存有以下特点:
- 与SqlSession无关,多个SqlSession可以共享二级缓存。
- SqlSession 关闭或提交事务后,二级缓存并不自动清空。
- 可以配置缓存的有效时间,一定时间后清空。
启用二级缓存需要以下步骤:
1、 在 SqlSessionFactoryBuilder 中开启二级缓存。
SqlSessionFactory factory = new SqlSessionFactoryBuilder().
// 其他配置
.cacheEnabled(true).build();
2、 在 mapper.xml 中开启缓存。
<cache/>
3、 需要缓存的SQL添加以下属性:
<select id="xxx" resultType="hashmap" useCache="true">
4、 Mybatis 提供的缓存实现有:
- lru — 最近最少使用缓存
- fifo – 先进先出缓存
- soft — 软引用缓存
5、 二级缓存默认不支持回滚,需要手动清空。
6、可以使用自定义缓存,实现缓存清除策略。
7、需要同步数据库的变更,将更新SQL添加 flushCache=”true”。
通过以上配置,就可以启用Mybatis的二级缓存了。它可以在节点间共享查询结果,提高性能。