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 执行过程