mybatis的一级缓存sqlSession(本地缓存)
映射语句文件中的所有 insert、update 和 delete 语句会刷新缓存
本地缓存将会在事务提交或回滚,以及关闭 session 时清空。
一级缓存
每当一个新 session 被创建,MyBatis 就会创建一个与之相关联的本地缓存。任何在 session 执行过的查询结果都会被保存在本地缓存中,所以,当再次执行参数相同的相同查询时,就不需要实际查询数据库了。本地缓存将会在做出修改、事务提交或回滚,以及关闭 session 时清空。
默认情况下,本地缓存数据的生命周期等同于整个 session 的周期。由于缓存会被用来解决循环引用问题和加快重复嵌套查询的速度,所以无法将其完全禁用
- 一级缓存也称为本地缓存
- 任何在 session 执行过的查询结果都会被保存在本地缓存中
- 执行参数相同的相同查询时,会从缓存查取
- 缓存不会定时进行刷新(也就是说,没有刷新间隔)
- 缓存会保存列表或对象(无论查询方法返回哪种)的 1024 个引用
缓存失效
具备以下条件之一,则一级缓存失效
- 不同的sqlSession
- 查询不同的数据
- 映射语句文件中的所有 insert、update 和 delete 语句会刷新缓存
- 手动刷新缓存
- 本地缓存将会在事务提交或回滚,以及关闭 session 时清空。
不同的sqlSession
查询不同的数据
映射语句文件中的所有 insert、update 和 delete 语句会刷新缓存
这样就不失效,因为2次的相同查询的相邻的,更新语句是最后
手动刷新缓存
本地缓存将会在事务提交或回滚,以及关闭 session 时清空。