【MyBatis】MyBatis 的二级缓存是什么?

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的二级缓存了。它可以在节点间共享查询结果,提高性能。