mybatis一级缓存默认开启
如何判定两次查询是完全相同的查询
- StatementId 也就是函数名是否相同
- 查询参数
- 分页参数
- SQL语句
- 环境
一级缓存的生命周期
mybatis一级缓存的生命周期是在数据库事务的生命周期之内的
一级缓存的产生
- 执行查询函数时会开启缓存
- 关闭session会清空缓存
- commit提交也会清空缓存
- rollback回滚也会清空缓存
- 执行insert、update、delete操作之后缓存也会被清空,并且与操作的表无关
- 通过SQLsession.clearCache()主动清空
类图
设计理念
一级缓存 当与spring进行集成时
在同一个事务内有效,spring未开启事务时每次查询后会关闭session,下次查询新开一个session
二级缓存
开启方式
第三部需要把entity实现序列化接口才行
二级缓存相当于不同的session共同拥有一个缓存,一级缓存是只针对一个session
二级缓存命中原则
二级缓存命中原则和一级缓存的命中原则是一样的,同以上几点 ,在同一个SqlSessionFactory环境中有效
二级缓存的生命周期
二级缓存的产生,在满足一级缓存的条件下执行了close或者commit
特别注意rollback无法产生二级缓存
一级和二级缓存联合作用过程原理图
缓存的销毁
在同一个mapper域中进行更新操作会清空二级缓存,进行rollback和clearCache操作不会对缓存有任何影响。
创建过程
刷新刷入缓存
二级缓存的清楚策略
最大引用数目
缓存的对比
使用建议
所以是学了个寂寞,一般都是和spring继承,一级缓存生命周期很短,没什么卵用