什么是mybatis一级缓存s

mybatis一级缓存s中提供有一级缓存 和 二級缓存这里记录一下一级缓存

一级缓存(mybatis一级缓存s中默认开启)

  1. SqlSession级别的缓存,操作数据库时需要构造SQLSession对象 在对象中有一个数据结构(HashMap)用于存储缓存数据,不同的SQLSession对象之间的缓存数据是不共享的即独立的
  2. 根据第一点,简单一点讲就是一级缓存是属于对象的(个人记法)

从别处搞来一个图便于我们理解:

1、下面是service层实现, 可以看到我两次查询了同一个数据,理论上由于mybatis一级缓存s中默认开启一级缓存 那么第二次肯定时要从缓存中获取,而不是创建SqlSession对象重新从数据库获取

LsjmUser user = mit()了此时会清空整个SqlSession的一级缓存,那么第二次查询时就得重新的從数据中查询了
}

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)是互相不影响的。

}

我要回帖

更多关于 mybatis一级缓存 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信