1、一级缓存,默认开启,属于sqlsession级别的缓存
特点:1.1 不同的sqlsession对象不能互用缓存
1.2 当salsession对象调用 clearCache() 方法时,会自动清理缓存的数据,不影响sqlsession的正常使用
1.3 当sqlsession对象关闭时 (调用了 close方法),sql对象就不能再使用了
1.4 当两次相同的查询中间,有增删改的操作时,缓存中的数据会被清除掉
一级缓存通过简单的Map集合来实现,没有对Map集合的大小容量做限制
2、二级缓存,需要手动开启和配置,namespace级别的缓存,一个xml文件对应一个二级缓存
2.1 配置开启二级缓存
总的配置文件中添加 <settung name="caacheEnabled" value="true" />
在映射文件中添加cache属性 <cache></cache> 相当于所有的select标签都开启了二级缓存
<select id="findById" resultType="com.kobe.model.user" useCache="true">
如果需要关闭某个查询的二级缓存 只需在标签中将 useCache属性设置为 false 即可
<select id="findById" resultType="com.kobe.model.user" useCache="false">
在新的sqlsession对象使用二级缓存中的数据时,需要先将前面的sqlsesson对象关闭,数据才会进入到缓存中
开启二级缓存后会先从二级缓存中查找,没有的话再去一级缓存中查找,再没有的话才从数据库中查找。
(springboot项目使用mybatis缓存在配置文件中设置 mybatis.configuration.cache-enabled=true)