一、概念
查询缓存指的是在内存或者外存上建立一个存储空间,用来保存上次的查询结果,夏促再进行同样的查询是,就直接从内存或者外存中读取,大大提升查询效率。
二、一级缓存
范围:一个sqlsession对象,当一个sqlsession对象关闭后,对应的一级缓存会被清空。
清理条件:执行了增、删、改的commit()方法
三、二级缓存(被多个sqlsession对象共享)
范围:相同namespaced生成的mapper对象下所有的sqlsession对象
清理条件:执行了该Mapper对象的增、删、改方法
原理:sqlsession1------->studentMapper中的查询方法(从数据库中获取)------------>写入二级缓存
sqlsession2-------->studentMapper中的查询方法(从二级缓存中获取)
sqlsession3-------->studentMapper提交的commit()方法(增、删、改)---------->清理二级缓存
备注:两个对象执行的方法和代码均相同,不同之处是sqlseesion1中的数据是从数据库中取,sqlsession2中的数据从二级缓存中取
1. 二级缓存的使用:
(1)开启二级缓存
1>.Mybatis配置文件
<setting name="cacheEnable" value=""></setting>
2>.mapper.xml文件
在mapper内部加上<cache />
(2)对象实现序列化
2.禁用二级缓存
<select id="queryById" parameter="int" resultType="User" useCache="false"> select * from user where userid=#{userid} </select>
四、commit()清理缓存的原因
对数据库进行增删改查操作,如果不及时清理缓存,就会丢失数据的实时性,造成脏读
如果有特殊情况,想要在执行commit()方法时并不进行清理缓存,可以在增删改查的标签里设置 flushCache="false"