mybatis二级缓存实现_mybatis源码深度解析

mybatis二级缓存实现_mybatis源码深度解析 二级缓存的作用域是全局,换句话说,二级缓存已经脱离SqlSession的控制了。在测试二级缓存之前,我先把结论说一下:二级缓存的作用域是全局的,二级缓存在SqlSession关闭或提交之后才会生效。在分析MyBatis的二级缓存之前,我们先简单看下MyBatis中一个关于二级缓存的类(其他相关的类和接口之前已经分析过):org.apache.ibatis.mapping.Ma…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

 

二级缓存的作用域是全局,换句话说,二级缓存已经脱离SqlSession的控制了。

在测试二级缓存之前,我先把结论说一下:

二级缓存的作用域是全局的,二级缓存在SqlSession关闭或提交之后才会生效。

在分析MyBatis的二级缓存之前,我们先简单看下MyBatis中一个关于二级缓存的类(其他相关的类和接口之前已经分析过):

org.apache.ibatis.mapping.MappedStatement:

MappedStatement类在Mybatis框架中用于表示XML文件中一个sql语句节点,即一个<select />、<update />或者<insert />标签。Mybatis框架在初始化阶段会对XML配置文件进行读取,将其中的sql语句节点对象化为一个个MappedStatement对象。

二级缓存跟一级缓存不同,一级缓存不需要配置任何东西,且默认打开。 二级缓存就需要配置一些东西。

其实二级缓存跟3个配置有关:

  1. mybatis全局配置文件中的setting中的cacheEnabled需要为true(默认为true,不设置也行)

  2. mapper配置文件中需要加入<cache>节点

  3. mapper配置文件中的select节点需要加上属性useCache需要为true(默认为true,不设置也行)

我们从在mapper文件中加入的<cache/>中开始分析源码,

1、XMLMappedBuilder(解析每个mapper配置文件的解析类,每一个mapper配置都会实例化一个XMLMapperBuilder类)的解析方法:解析完cache标签之后会使用builderAssistant的userNewCache方法,这里的builderAssistant是一个MapperBuilderAssistant类型的帮助类,每个XMLMappedBuilder构造的时候都会实例化这个属性,MapperBuilderAssistant类内部有个Cache类型的currentCache属性,这个属性也就是mapper配置文件中cache节点所代表的值:

2、现在mapper配置文件中的cache节点被解析到了XMLMapperBuilder实例中的builderAssistant属性中的currentCache值里。接下来XMLMapperBuilder会解析select节点,解析select节点的时候使用XMLStatementBuilder进行解析(也包括其他insert,update,delete节点):

3、最终mapper配置文件中的<cache/>被设置到了XMLMapperBuilder的builderAssistant属性中,XMLMapperBuilder中使用XMLStatementBuilder遍历CRUD节点,遍历CRUD节点的时候将这个cache节点设置到这些CRUD节点中,这个cache就是所谓的二级缓存!

现在我们发现使用二级缓存之后:查询数据的话,先从二级缓存中拿数据,如果没有的话,去一级缓存中拿,一级缓存也没有的话再查询数据库。有了数据之后在丢到TransactionalCache这个对象的entriesToAddOnCommit属性中。

 

org.apache.ibatis.cache.Cache是MyBatis的缓存接口,想要实现自定义的缓存需要实现这个接口。

MyBatis中关于Cache接口的实现类也使用了装饰者设计模式。

简单说明:

LRU – 最近最少使用的:移除最长时间不被使用的对象。

FIFO – 先进先出:按对象进入缓存的顺序来移除它们。

SOFT – 软引用:移除基于垃圾回收器状态和软引用规则的对象。

WEAK – 弱引用:更积极地移除基于垃圾收集器状态和弱引用规则的对象。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/193257.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • dumpbin用法

    dumpbin用法转自:http://www.cnblogs.com/lidabo/p/3482dumpbin用法:dumpbin/exports/out:d:\mfc90.txtd:\mfc90.lib在使用VC时,可以用DUMPBIN.EXE来得到某个DLL中所输出的符号的清单。如下面的命令:dumpbin-exportsCmpnt1.dll如:C:\WINDOWS\syste…

    2022年6月19日
    28
  • Could not download kotlin-compiler-embeddable.jar

    Could not download kotlin-compiler-embeddable.jar

    2021年10月1日
    39
  • Spring的IOC和AOP原理

    Spring的IOC和AOP原理Spring的IOC和AOP原理本文讲的是面试之Spring框架IOC和AOP的实现原理,IoC(InversionofControl)(1).IoC(InversionofControl)是指容器控制程序对象之间的关系,而不是传统实现中,由程序代码直接操控。控制权由应用代码中转到了外部容器,控制权的转移是所。IoC(InversionofControl)(1).IoC(InversionofControl)是指容器控制程序对象之间的关系,而不是传统实现中,由程序代码直接操控。

    2022年6月22日
    33
  • 最新QT下载和安装 指南教程「建议收藏」

    最新QT下载和安装 指南教程「建议收藏」原文地址:http://c.biancheng.net/view/3851.htmlQt体积很大,有1GB~3GB,官方下载通道非常慢,相信很多读者会崩溃,所以建议大家使用国内的镜像网站(较快),或者使用迅雷下载(很快)。作为Qt下载教程,本文会同时讲解以上三种下载方式。Qt官方下载(非常慢)Qt官网有一个专门的资源下载网站,所有的开发环境和相关工具都可以从这里下载,具体地址是:http://download.qt.io/图1:Qt官方下载网站截图对目录结构的…

    2022年5月17日
    34
  • idea打包java项目生成jar_idea打包项目

    idea打包java项目生成jar_idea打包项目Idea打包java项目、点击加号Artifacts工件一定要双击加入到左侧再运行jar包java-jardemo.jar包名.jar

    2022年9月27日
    0
  • Windows ping TCP端口工具之tcping「建议收藏」

    Windows ping TCP端口工具之tcping「建议收藏」ping这个小工具大家都非常熟悉,但是他不能ping端口,当我们需要知道目的地址的某端口是否开放时,这时需要用到这个tcping小工具了,Windows没有自带这个小工具,需要自己下载下来,放到指定目录里面。下载地址:点击打开链接X64下载链接放到C:\Windows\System32这个文件夹下现在在测试一下…

    2022年6月23日
    147

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号