本文中的源代码分析基于Mybatis 3.5.8版本。
Mybatis中的缓存是指SQL和SQL的相应查询结果和相应的查询结果,当我执行SQL查询时。再次执行相同的SQL语句时,将直接从缓存中提取,而不是请求数据库。当然,如果中间有更新操作,缓存将失败。
Mybatis中的缓存分为第一个级别的缓存和第二个级别的缓存。第一个级别的缓存也称为SQLSession缓存。第二个级别的缓存也称为表面高速缓存。最受欢迎的是,第一个 - 级别的缓存对本会话有效,第二个级别的缓存可以跨越多个会话以共享缓存。
当缓存打开时,数据查询执行的过程是辅助缓存 - >第一个级别的缓存 - >数据库。
当打开第一个级别的缓存时,查询的定时图如下:
次要缓存也是类似的机制。
根据上述电话,我们可以看到Mybatis通过外部统一。SQLSession是一个接口,并且有一个默认实现类:查看此类。
实际上,将SQLSession的操作归属于该执行人。例如,选择方法最终将调用SelectList方法:
它是具有默认抽象类实现的接口。该摘要类别称为“”。这是本地缓存实现类。缓存由此类管理。
在这一点上,我们总结了班级中提到的关系:
如前所述,这是一个抽象类。定义了几种抽象方法。这些方法如下:
执行时,特定操作将委托给相应的执行实现类。有几个实现类为执行人提供不同的能力,如下图所示:
batchexecutor专门用于执行批处理SQL操作。Simpleexecutor用于简单的SQL场景。当您选择哪一个,它是由配置确定的:
何时举行,什么时候初始化?答案是打电话时,如下:
继续跟随
在大多数情况下,我们使用的是,如果使用第二个级别的缓存,下一篇文章将分析第二个缓存。插头 - 插入处理,并将在稍后分析特殊文章。
快来看看,Baseexecutor持有缓存以管理缓存。查询的逻辑如下:
代码逻辑相对清晰,首先检查缓冲区,然后检查数据库而不会打击。PerpetualCache实际上是在本地缓存中持有地图。然后检查DB并更新缓存:
接口中有几个实现类,结构如下:
这些不同的实现类通过装饰模式彼此装饰以补充功能。例如,
初始化时,您可以通过其他一个缓存实现类以重复使用此类的功能。
特定的实施类不是本文的重点。
第一个级别的缓存在这里写。
参考
