Mybatis一级缓存介绍(LocalCache)

Mybatis一级缓存介绍(LocalCache)

1缓存的创建
1.1 createCacheKey创建的执行流程

在这里插入图片描述

1.2源码分析
在执行BaseExecutor.query的方法中首先判断ResultHandler是否为空,ResultHandler对返回的结果处理,无返回接口为空;当第一次进行查询缓存值为空执行2处方法,在4处需要先进行占位,主要是解决嵌套查询。当标记操作sql的操作对象为CALLABLE是会创建出参缓存localOutputParameterCache
在这里插入图片描述
在这里插入图片描述

1.3 LocalCache一级缓存的特点
1.3.1 它的生命周期与SqlSession一致,默认是开启的
从源码中每次实例化一个DefaultSqlSession时,都会实例化一个SimpleExecutor,而用于一级缓存的localCache就在BaseExecutor中,BaseExecutor是SimpleExecutor的父类。所以当SqlSession对象被销毁时,它的Executor也被销毁,所以localCache也被销毁。
在这里插入图片描述
在这里插入图片描述

1.3.2 底层用HashMap实现,没有缓存内容更新和过期。
1.3.3 有个多个SqlSession时,且有数据库写,会出现脏读的情况,一级缓存慎用,或者将Scope设置为Statement, Configuration中localCacheScope默认值是SESSION
1.3.4:增加,删除,修改会清除一级缓存
1.3.5:缓存的是对象
1.4 标记操作对象的种类
STATEMENT:直接操作sql,不进行预编译,获取数据:$—Statement
PREPARED:预处理,参数,进行预编译,获取数据:#—–PreparedStatement:默认
CALLABLE:执行存储过程————CallableStatement

2 缓存的清除
2.1源代码分析
在这里插入图片描述

2.2 执行过程

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值