mybatis中的一级缓存和二级缓存

mybatis中的一级缓存和二级缓存

Scroll Down

一级缓存

mybatis默认启用一级缓存,一级缓存是 SqlSession 范围的缓存,所有的查询语句都会被缓存,当调用 SqlSession 的修改,添加,删除,commit(),close()等方法时,就会清空一级缓存。

二级缓存

二级缓存是 mapper 映射级别的缓存,多个 SqlSession 去操作同一个Mapper映射的 sql 语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。

如何开启二级缓存

主配置文件默认开启,无需修改。

默认情况下,只启用了本地的会话缓存(一级缓存),它仅仅对一个会话中的数据进行缓存。 要启用全局的二级缓存,只需要在你的 SQL 映射文件中添加一行:

<cache/>

这个简单语句的效果如下:

  • 映射语句文件中的所有 select 语句的结果将会被缓存。
  • 映射语句文件中的所有 insert、update 和 delete 语句会刷新缓存。
  • 缓存会使用最近最少使用算法(LRU, Least Recently Used)算法来清除不需要的缓存。
  • 缓存不会定时进行刷新(也就是说,没有刷新间隔)。
  • 缓存会保存列表或对象(无论查询方法返回哪种)的 1024 个引用。
  • 缓存会被视为读/写缓存,这意味着获取到的对象并不是共享的,可以安全地被调用者修改,而不干扰其他调用者或线程所做的潜在修改。

Select 元素的属性

  • useCache:将其设置为 true 后,将会导致本条语句的结果被二级缓存缓存起来,默认值:对 select 元素为 true。