Mybatis 二级缓存原理

1. MyBatis的缓存机制整体原理设计以及二级缓存的工作模式

MyBatis的二级缓存,可以提高对数据库查询的效率,以提高应用的性能。

    如上图所示,当开一个会话时,一个SqlSession对象会使用一个Executor对象来完成会话操作,MyBatis的二级缓存机制的关键就是对这个Executor对象做文章。如果用户配置了"cacheEnabled=true",那么MyBatis在为SqlSession对象创建Executor对象时,会对Executor对象加上一个装饰者:CachingExecutor,这时SqlSession使用CachingExecutor对象来完成操作请求。CachingExecutor对于查询请求,会先判断该查询请求在Application级别的二级缓存中是否有缓存结果,如果有查询结果,则直接返回缓存结果;如果缓存中没有,再交给真正的Executor对象来完成查询操作,之后CachingExecutor会将真正Executor返回的查询结果放置到缓存中,然后在返回给用户。

        CachingExecutor是Executor的装饰者,以增强Executor的功能,使其具有缓存查询的功能,这里用到了设计模式中的装饰者模式,CachingExecutor和Executor的接口的关系如下类图所示:

2 . MyBatis二级缓存的划分

      MyBatis并不是简单地对整个Application就只有一个Cache缓存对象,它将缓存划分的更细,即是Mapper级别的,即每一个Mapper都可以拥有一个Cache对象,具体如下:

           a.为每一个Mapper分配一个Cache缓存对象(使用<cache>节点配置)

           b.多个Mapper共用一个Cache缓存对象(使用<cache-ref>节点配置)如果你想让多个Mapper公用一个Cache的话,你可以使用<cache-ref namespace="">节点,来指定你的这个Mapper使用到了哪一个Mapper的Cache缓存。


转载这篇博客
https://blog.csdn.net/qq_33101675/article/details/78701270

实现+源码分析:

https://blog.csdn.net/garfielder007/article/details/84970772

原理理解:

https://blog.csdn.net/kevinxxw/article/details/77920479

猜你喜欢

转载自blog.csdn.net/sinat_41144773/article/details/88643792