Mybatis缓存
Mybatis包含一个非常强大的查询缓存特性,它可以非常方便的定制和配置缓存。缓存可以极大的提升查询效率。
Mybatis系统中默认定义了两级缓存:一级缓存和二级缓存。
一级缓存是默认开启的,它是SqlSession级别的缓存,也称为本地缓存。
二级缓存需要手动开启和配置,它是基于namespace级别的缓存。
一级缓存
一级缓存也叫本地缓存,在与数据库同一次会话期间查询到的数据会放到本地缓存中,以后如果需要获取相同的数据,就可以直接从一级缓存中拿,没必要再去查询数据库。
一级缓存失效情况
一级缓存是sqlSession级别的缓存,是一直开启的,我们关闭不了。下面四种情况会导致一级缓存失效,也就是没有用到当前的一级缓存,还是会从数据库中再次发起查询请求。
1、sqlSession不同。因为一级缓存就是基于sqlSession级别的,每个sqlSession中的缓存相互独立。
2、sqlSession相同,查询条件不同。很好理解,因为查询的东西都不一样了。
3、sqlSession相同,两次查询之间执行了增删改操作。因为增删改操作会对数据库数据产生影响,会默认清空一级缓存。
4、sqlSession相同,手动清除了一级缓存。两次查询之间执行了sqlSession.clearCache()清空一级缓存命令。
二级缓存
二级缓存也叫做全局缓存,一级缓存作用域太低了,所以诞生了二级缓存。
二级缓存是基于namespace级别的缓存,一个名称空间对应一个二级缓存。
二级缓存工作机制:一个会话查询一条数据,这个数据就会被放到当前会话的一级缓存中;如果当前会话关闭了,这个会话的一级缓存也就没了。但是我们想要的是,当前会话可以关闭,但是一级缓存中的数据需要被保存到二级缓存中;这样新的会话查询信息,就可以直接从二级缓存中获取内容。不同mapper查出的数据会放到自己对应的缓存(map)中,注意一级缓存就是一个map。
只要开启了二级缓存,我们在同一个Mapper中的查询,可以在二级缓存中拿到数据。
总结
查出的数据都会被默认先放到一级缓存中,只有当前会话提交或者关闭以后,一级缓存中的数据才会转到二级缓存中。
本文介绍了MyBatis的一级缓存和二级缓存特点。一级缓存为SqlSession级别,默认开启,能快速复用刚查询过的数据。二级缓存为namespace级别,需手动开启,适合跨SqlSession的数据复用,能显著提升查询效率。
7万+

被折叠的 条评论
为什么被折叠?



