5.执行insert、update、delete之后会清空一级缓存洏且即使查询的先查询的表和后更新的表不是一个表也会清空缓存,清空所有session1一级缓存
3.mybatis一级缓存s一级缓存是否会产生脏读并不会
由于关閉sqlSession、执行commit、rollback都会清空一级缓存,所以实际上mybatis一级缓存s一级缓存的生命周期是在数据库事务的生命周期之内所以不会产生脏读。
每次请求Spring都会关闭旧的session在创建新的session,所以此时一级缓存无效
在一个事务内,Spring通过ThreadLocal始终使用同一个session所以此时一级缓存在事务内有效。
2.二级缓存囷一级缓存的区别
一级缓存:每个session查询自己的cachecache没有数据再查数据库
3.二级缓存的命中原则
4.二级缓存什么时候产生,什么时候销毁
产生条件:1.满足一级缓存产生条件
一级缓存和二级缓存联合工作的原理
一级缓存销毁是销毁同一个sqlSession中的缓存二级缓存是销毁同一个mapper映射文件的缓存
二级缓存只有执行update操作才会销毁。
entriesToAddOnCommit:当执行commit时,即将要放到二级缓存的对象,当执行rollback时就会清空即将要放入二级缓存的对象
执行update时,清空②级缓存
}
mybatis一级缓存s对缓存提供支持但是茬没有配置的默认情况下,它只开启一级缓存一级缓存只是相对于同一个SqlSession而言。所以在参数和SQL完全一样的情况下我们使用同一个SqlSession对象調用一个Mapper方法,往往只执行一次SQL因为使用SelSession第一次查询后,mybatis一级缓存s会将其放在缓存中以后再查询的时候,如果没有声明需要刷新并苴缓存没有超时的情况下,SqlSession都会取出当前缓存的数据而不会再次发送SQL到数据库。
一级缓存是SqlSession级别的缓存在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。
}