mybatis当中的缓存(一级缓存和二级缓存)

一级缓存:

  1. Mybatis的一级缓存的作用域是session,当openSession()后, 如果执行相同的SQL (相同语句和参数),Mybatis不进行执行SQL,而是从缓存中命中返回。

  2. 原理:Mybatis执行查询时首先去缓存区命中,如果命中直接返回,没有命中则执行SQL,从数据库中查询。

  3. 在mybatis中,一级缓存默认是开启的,并且一直无法关闭(我们没法去管理一级缓 存)

例如:

代码测试:
在这里插入图片描述
日志输出:
在这里插入图片描述

一级缓存满足条件:

  1. 同一个session中
  2. 相同的SQL和参数

使用sqlsession.clearCache()强制查询不缓存!

代码测试:
在这里插入图片描述
日志输出:
在这里插入图片描述

执行update,delete,insert 语句的时候,清空缓存 刷新缓存
因为在执行增删改的时候,必须使用sqlSession.commit()进行提交,这个提交会清空缓存

二级缓存:

mybatis 的二级缓存的作用域是一个mapper的namespace ,同一个namespace中查询sql可以从缓存中命中。二级缓存是跨session

  • 二级缓存的开启:
    需要在mapper.xml 中加入如下: 这个标签的位置应该和setting同级(在mapper标签内部)

进行跨session进行测试(关闭sqlSession.close())
代码如图:
在这里插入图片描述
在这里插入图片描述
在这里,需要将实体类序列化!
如图:
在这里插入图片描述
关闭二级缓存:
在这里插入图片描述

在全局的mybatis-config.xml 中去关闭二级缓存,如图,配置在setting当中
在这里插入图片描述

两者之间的区别:

  • 作用域:
  1. 一级缓存:作用域是session
  2. 二级缓存:作用域是一个mapper的namespace,是可以跨session的
  • 开启和关闭:
  1. 一级缓存:默认是开启的,并且我们无法管理一级缓存
  2. 二级缓存:开启需要在mapper.xml下写<cache />标签,关闭需要在全局的mybatis-config.xml内,配置setting标签name="cacheEnabled"value="flase"!默认值为true,默认不关闭
  • 清除缓存:
  1. 一级缓存:(1)可以使用sqlSession.clearCache()强制清除缓存!!(2)进行增删改的时候,调用commit方法,也会清空缓存
  2. 二级缓存:(1)需要设置statement配置中的flushCache="true"属性,就会增删改的时候,默认刷新缓存!!!(2)flushInterval(刷新间隔)可以被设置为任意的正整数。默认是不设置的,也就是没有刷新间隔!readOnly(只读)属性可以设置为true/false!!这里对二级缓存的刷新解释的不清晰,可以参考:
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值