课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
缓存功能的应用在许多软件开发项目中都是会经常用到的一个互联网软件开发技术,而本文我们就通过案例分析来简单了解一下,MyBatis缓存都有哪些类型。
MyBatis包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制。缓存可以极大的提升查询效率。
MyBatis系统中默认定义了两级缓存,也就是一级缓存和二级缓存:
默认情况下,只有一级缓存(SqlSession级别的缓存,也称为本地缓存)开启。
二级缓存需要手动开启和配置,它是基于namespace级别的缓存。
为了挺高扩展性,MyBatis定义了缓存接口Cache。我们可以通过实现Cache接口来自定义二级缓存。
一级缓存
一级缓存(localcache),即本地缓存,作用域默认为sqlSession。当Sessionflush或close后,该Session中的所有Cache将被清空。
本地缓存不能被关闭,但可以调用clearCache()来清空本地缓存,或者改变缓存的作用域。
在mybatis3.1之后,可以配置本地缓存的作用域,在mybatis.xml中配置。
案例演示
同一次会话期间只要查询过的数据都会保存在当前SqlSession的一个Map中:
key:hashCode+查询的SqlId+编写的sql查询语句+参数
一级缓存失效
sqlSession不同。
sqlSession相同,查询条件不同。
sqlSession相同,但是查询期间执行了增删改操作。
sqlSession相同,手动清除了一级缓存(缓存清空)。
二级缓存
二级缓存(secondlevelcache),全局作用域缓存,基于namespace级别的缓存;一个namespace对应一个二级缓存;
工作机制
一个会话,查询一条数据,这个数据就会被放到当前会话的一级缓存中;
如果会话关闭;那么一级缓存中的数据会被保存到二级缓存中;新的会话查询信息,就可以参照二级缓存。
不同namespace查出的数据会放在自己对应的缓存map中。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。