mybatis的一级缓存sqlSession(本地缓存)

一级缓存

缓存失效

不同的sqlSession

查询不同的数据

映射语句文件中的所有 insert、update 和 delete 语句会刷新缓存

手动刷新缓存

本地缓存将会在事务提交或回滚,以及关闭 session 时清空。


 

一级缓存

每当一个新 session 被创建,MyBatis 就会创建一个与之相关联的本地缓存。任何在 session 执行过的查询结果都会被保存在本地缓存中,所以,当再次执行参数相同的相同查询时,就不需要实际查询数据库了。本地缓存将会在做出修改、事务提交或回滚,以及关闭 session 时清空。

默认情况下,本地缓存数据的生命周期等同于整个 session 的周期。由于缓存会被用来解决循环引用问题和加快重复嵌套查询的速度,所以无法将其完全禁用

  • 一级缓存也称为本地缓存
  • 任何在 session 执行过的查询结果都会被保存在本地缓存中
  • 执行参数相同的相同查询时,会从缓存查取
  • 缓存不会定时进行刷新(也就是说,没有刷新间隔)
  • 缓存会保存列表或对象(无论查询方法返回哪种)的 1024 个引用

mybatis的一级缓存sqlSession(本地缓存)

缓存失效

具备以下条件之一,则一级缓存失效

  • 不同的sqlSession
  • 查询不同的数据
  • 映射语句文件中的所有 insert、update 和 delete 语句会刷新缓存
  • 手动刷新缓存
  • 本地缓存将会在事务提交或回滚,以及关闭 session 时清空。

不同的sqlSession

mybatis的一级缓存sqlSession(本地缓存)

查询不同的数据

mybatis的一级缓存sqlSession(本地缓存)

映射语句文件中的所有 insert、update 和 delete 语句会刷新缓存

mybatis的一级缓存sqlSession(本地缓存)

这样就不失效,因为2次的相同查询的相邻的,更新语句是最后

mybatis的一级缓存sqlSession(本地缓存)

手动刷新缓存

mybatis的一级缓存sqlSession(本地缓存)

本地缓存将会在事务提交或回滚,以及关闭 session 时清空。

mybatis的一级缓存sqlSession(本地缓存)