在上一节分析了Mybatis的一级缓存的实现原理,也就是一个HashMap保存结果。 本节尝试分析下二级缓存的原理。
上章提到的Executor
接口的继承关系中还有一个很重要的类CacheExecutor
没有介绍,该类其实就是一个委派类。 他提供了Mybatis中的二级缓存功能,然后把实际查询委派给实际处理类。
MyBatis源码分析(5)- 缓存的实现原理(1)-一级缓存
在Mybatis的文档中,明确写出Mybatis有二级缓存。
MyBatis includes a powerful transactional query caching feature which is very configurable and customizable. A lot of changes have been made in the MyBatis 3 cache implementation to make it both more powerful and far easier to configure.
By default, just local sessión caching is enabled that is used solely to cache data for the duration of a sessión. To enable a global second level of caching you simply need to add one line to your SQL Mapping
Mybatis包含一个强大的事务查询缓存,Mybatis3做了很多改变使得它更加强大和易于配置。 默认情况下,只有
local cache
是开启的,这个缓存仅仅在一个Sqlsession
的生命周期里有效。 你必须手动开启二级缓存。
那么这两级缓存分别是如何实现的呢? 本节分析下默认的缓存 - local session
的具体实现。 事实上,这个缓存默认是打开的,并且没有配置可以关闭。
MyBatis源码分析(4)- SqlSession接口增删改查的实现原理(2)
上篇分析到了SimpleExecutor
接口, 这个接口中的doUpdate,doQuery
方法是Executor
体系中最终的实现。 本节分析下Executor
中具体的逻辑
MyBatis源码分析(3)- SqlSession接口增删改查的实现原理(1)
上篇文章说明了mapper接口最终是调用了SqlSession
的xml调用,那么Mybatis是如何执行mapper xml的, 一个xml是如何解析以及最终传达到数据库的,本节分析这个问题。
MyBatis源码分析(2)- 当我们调用接口时,我们调用了什么?
通过mapper interface使用Mybatis应该是最为通用的一种使用方式,通过这种方式阅读起来清晰明了,同时又合适的屏蔽了细节。 但是,Mybatis是如何让自定义接口可以实现种种数据库操作的功能,是一个非常有趣的问题。