mybatis缓存
一、一级缓存
1、简介
- 一级缓存是sqlsession级别的,在同一个sqlsession下操作数据库,可以使用一级缓存
- 一级缓存实际上是一个map,key值就是区分不同的sqlsession
- mybatis的一级缓存是默认打开的
2、一级缓存的失效
- 不同的sqlsession, 使用不同的一级缓存,由于一级缓存只是保存在当前的sqlsession,因此只有在同一个sqlsession期间查询到的数据会保存在这个sqlsession的缓存中, 下次使用这个sqlSession查询会从缓存中拿
- 同一个方法,不同的参数条件,由于可能之前没查询过,所有会发生新的SQL查询
- 在这个sqlSession期间执行上任何一次增删改操作,增删改操作会把之前缓存清空
- 手动清空了缓存
二级缓存
1、简介
- 二级缓存是在当前sqlsession关闭后,将当前sqlsession查询过的数据放入二级缓存中,其他的sqlsession就可直接使用二级缓存的数据
- 二级缓存开始使用以下标签,并且需要指定在某个dao下开启二级缓存,即在该dao的xml文件中添加 < cache/ > 标签
- 不会出现一级缓存和二级缓存出现同一个数据,当某个sqlsession开启了二级缓存,当这个缓存的关闭后,才会将数据放到二级缓存中,关闭之前数据一直在一级缓存中
select * from account where id = #{id}
update account set username = #{username}, balance = #{balance} where id = #{id}
2、查询顺序
- 先看二级缓存,二级缓存没有此数据,就会看一级缓存,一级缓存如果也没有数据,就直接查数据库。