mybatis中的缓存机制
mybatis的缓存机制
一、mybatis和同是持久层的hibernate一样
都存在着缓存机制,今天来说一下mybatis的缓存机制。
查询缓存来缓存数据,从而达到提高查询性能的要求,以提高我们项目的效率!!
二、mybatis的缓存机制有两级
- (1)一级缓存:一级缓存mybatsi已近为我们自动开启,不用我们手动操作,而且我们是关闭不了的!!但是我们可以手动清除缓存。(SqlSession级别)
- (2)二级缓存:二级缓存需要我们手动开启。(全局级别)
三、一级缓存
| 存在要求 | 同一个SqlSession中,在没有收到改变该数据的请求之前! |
代码以及效果:

| 一 | 并不是同一个Sqlsession对象 |
| 二 | 在查询的过程中,两次的查询条件不同(其实这个不用我说大家也知道) |
| 三 | 在两次之间进行了增,删,改,操作 |
| 四 | 在两次之间自己进行了手动清空缓存 |
缓存失效的效果如下:

四:二级缓存
二级缓存的作用:通过度一级缓存的了解。推挤缓存是基于同一个SqlSesion类的实例对象的。但是,有些时候在wenb工厂中将会执行查询操作的方法分装在某个Service方法中,当查询完一次后,Service方法结束,此时SqlSession类的实例对象就会关闭,一级缓存就会被清空。此时若再次调用用Service方法查询同一个信息,此时异界缓存就是空的,从而无法从缓存中获取信息!!
因此,我们可以使用二级缓存,二级缓存存在与Mapper实例中,当多个SqlSession类的实例对象加载相同的mapper文件,并执行其中国的SQL配置时,他们就共享一个Mapper缓存。当某个SqlSession类的实例对象执行了增,删,改,等改变数据的操作时,Mapper实例都会清空其二级缓存!
开启二级缓存:
开启二级缓存需要两个步骤,第一步在mybatis的全局配置文件中配置Setting属性,设置名为cacheEnabled的属性值为true即可
<settings> <!-- (1):开启二级缓存,这个全局的配置二级缓存 默认是开启的,但是还是需要写上,防止版本的更新 --> <setting name="cacheEnabled" value="true"/> </settings>
第二步:在具体需要二级缓存的mapeer映射文件中开启二级缓存,值需要在相应的映射文件中添加一个cache标签即可
(2):在相应的映射文件中开启二级缓存 <!-- 开启二级缓存 --> <cache></cache>
效果以及其代码:

MyBatis缓存机制是什么?
mybatis一级缓存是 SqlSession 级别的缓存,默认支持一级缓存,不需要在配置文件去配置。
mybaits的二级缓存是 mapper 范围级别,除了在 SqlMapConfig.xml 设置二级缓存的总开关<settingname=‘cacheEnabled’ value=‘true’/>
还要在具体的 mapper.xml 中开启二级缓存:<mappernamespace=‘cn.hpu.mybatis.mapper.UserMapper’>
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
java对象list使用stream根据某一个属性转换成map的3种方式举例
开发小伙伴们通常会需要使用到对象和Map互相转换的开发场景,下面这篇文章主要给大家介绍了关于java对象list使用stream根据某一个属性转换成map的3种方式,需要的朋友可以参考下2024-01-01
SpringBoot application.yml和bootstrap.yml的区别
本文主要介绍了SpringBoot application.yml和bootstrap.yml的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2023-04-04
一篇文章教你将JAVA的RabbitMQz与SpringBoot整合
这篇文章主要介绍了如何将JAVA的RabbitMQz与SpringBoot整合,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧2021-09-09
详解Java的JDBC中Statement与PreparedStatement对象
这篇文章主要介绍了详解Java的JDBC中Statement与PreparedStatement对象,PreparedStatement一般来说比使用Statement效率更高,需要的朋友可以参考下2015-12-12


最新评论