1.mybatis一级缓存及二级缓存

区别:

  • 一级缓存的作用域是一个sqlsession内;
  • 二级缓存作用域是针对mapper(Namespace)进行缓存;

一级缓存:

在参数和SQL完全一样的情况下,我们使用同一个SqlSession对象调用一个Mapper方法,往往只执行一次SQL,因为使用SelSession第一次查询后,MyBatis会将其放在缓存中,以后再查询的时候,如果没有声明需要刷新,并且缓存没有超时的情况下,SqlSession都会取出当前缓存的数据,而不会再次发送SQL到数据库。

 缓存何时清空:

一级缓存时执行commit,close,增删改等操作,就会清空当前的一级缓存;当对SqlSession执行更新操作(update、delete、insert)后并执行commit时,不仅清空其自身的一级缓存(执行更新操作的效果),也清空二级缓存(执行commit()的效果)。

二级缓存:

二级缓存指的就是同一个namespace下的mapper,二级缓存中,也有一个map结构,这个区域就是一级缓存区域。一级缓存中的key是由sql语句、条件、statement等信息组成一个唯一值。一级缓存中的value,就是查询出的结果对象。

1、在配置文件中 开启二级缓存的总开关

<setting name="cacheEnabled" value="true" />

2、 在mapper映射文件中开启二级缓存

<cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/>

参数名属性:eviction收回策略、flushInterval刷新间隔、size引用数目、readOnly只读

3、实体类实现Serializable

2.springboot自动配置的原理

简单来说,Spring Boot通过@EnableAutoConfiguration注解开启自动配置,对jar包下的spring.factories文件进行扫描,这个文件中包含了可以进行自动配置的类,当满足@Condition注解指定的条件时,便在依赖的支持下进行实例化,注册到Spring容器中。

三大注解详解:

SpringBoot的核心注解@SpringBootApplication

@ComponentScan:

默认扫描该类所在包及其子包下所有带有指定注解的类,将它们自动装配到bean容器中;

会被自动装配的注解包括@Controller、@Service、@Component、@Repository等

@SpringBootConfiguration:

继承自Configuration,支持JavaConfig的方式进行配置

@EnableAutoConfiguration(核心重点)

             @AutoConfigurationPackage

             @Import(AutoConfigurationImportSelector.class)重点

详解@Import

1.AutoConfigurationImportSelector类中有一个selectImports()方法

@Overridepublic String[] selectImports(AnnotationMetadata annotationMetadata) {//检查自动配置功能是否开启,默认开启if (!isEnabled(annotationMetadata)) {return NO_IMPORTS;}//加载自动配置的元信息AutoConfigurationMetadata autoConfigurationMetadata = AutoConfigurationMetadataLoader.loadMetadata(this.beanClassLoader);AnnotationAttributes attributes = getAttributes(annotationMetadata);//获取候选配置类List<String> configurations = getCandidateConfigurations(annotationMetadata,attributes);//去掉重复的配置类configurations = removeDuplicates(configurations);//获得注解中被exclude和excludeName排除的类的集合Set<String> exclusions = getExclusions(annotationMetadata, attributes);//检查被排除类是否可实例化、是否被自动注册配置所使用,不符合条件则抛出异常checkExcludedClasses(configurations, exclusions);//从候选配置类中去除掉被排除的类configurations.removeAll(exclusions);//过滤configurations = filter(configurations, autoConfigurationMetadata);//将配置类和排除类通过事件传入到监听器中fireAutoConfigurationImportEvents(configurations, exclusions);//最终返回符合条件的自动配置类的全限定名数组return StringUtils.toStringArray(configurations);

2.如何得到候选的配置类

getCandidateConfigurations()得到,并最终由一个列表保存,候选的配置类还要经过一系列的去重、排除、过滤;

3.SpringFactoriesLoader.loadFactoryNames()

发现一个获取资源的地址:META-INF/spring.factories

spring.factories文件,Map<String,List<String>>其中Key:org.springframework.boot.autoconfigure.EnableAutoConfiguration,Value:各种XXXAutoConfiguration类;

简述以上过程就是:

getCandidateConfigurations()方法通过SpringFactoriesLoader加载器加载META-INF/spring.factories文件,首先通过这个文件获取到每个配置类的url,再通过这些url将它们封装成Properties对象,最后解析内容存于Map<String,List<String>>中。

面试题总结(mybatis一级缓存及二级缓存、springboot自动装配原理等)相关推荐

  1. 深入理解MyBatis一级缓存和二级缓存【超详细源码解析】

    视频地址:https://www.bilibili.com/video/BV1nP411A7Gu MyBatis的缓存是一个常见的面试题 一级缓存的作用域为何是 sqlSession.二级缓存的作用域 ...

  2. Mybatis一级缓存,二级缓存的实现就是这么简单

    介绍 又到了一年面试季,所以打算写一点面试常问的东西,争取说的通俗易懂.面试高级岗,如果你说熟悉Mybatis,下面这些问题基本上都会问 Mybatis插件的实现原理? 如何写一个分页插件? Myba ...

  3. mybatis高级(3)_延迟加载_深度延迟_一级缓存_二级缓存

    设置延迟加载需要在mybatis.xml中设置 注: 侵入式延迟加载为真时是延迟加载 侵入式延迟加载为假时是深度延迟加载 <!-- 延迟加载和深度延迟加载 --><settings& ...

  4. MyBatis框架:延迟加载策策略、一级缓存、二级缓存

    MyBatis框架:延迟加载策略和缓存 Mybatis 延迟加载策略 1.1 何为延迟加载? 1.2 实现需求 1.3 使用association实现延迟加载 1.3.1 账户的持久层DAO接口 1. ...

  5. 浅谈Mybatis的一级缓存和二级缓存

    MyBatis的缓存机制 缓存的引入 当我们大量执行重复的查询SQL语句的时候,会频繁的和数据库进行通信,会增加查询时间等影响用户体验的问题,可以通过缓存,以降低网络流量,使网站加载速度更快. MyB ...

  6. MyBatis】MyBatis一级缓存和二级缓存

    转载自  MyBatis]MyBatis一级缓存和二级缓存 MyBatis自带的缓存有一级缓存和二级缓存 一级缓存 Mybatis的一级缓存是指Session缓存.一级缓存的作用域默认是一个SqlSe ...

  7. Mybatis 详解--- 一级缓存、二级缓存

    2019独角兽企业重金招聘Python工程师标准>>> Mybatis 为我们提供了一级缓存和二级缓存,可以通过下图来理解: ①.一级缓存是SqlSession级别的缓存.在操作数据 ...

  8. Mybatis源码分析之(七)Mybatis一级缓存和二级缓存的实现

    文章目录 一级缓存 二级缓存 总结 对于一名程序员,缓存真的很重要,而且缓存真的是老生常谈的一个话题拉.因为它在我们的开发过程中真的是无处不在.今天LZ带大家来看一下.Mybatis是怎么实现一级缓存 ...

  9. 框架源码专题:Mybatis的一级缓存、二级缓存是什么?有什么作用?

    文章目录 1. Mybatis中缓存的作用 2. 一级缓存 3. 二级缓存 4. 一级缓存和二级缓存的区别 5. 通过代码观察Mybatis缓存工作的全过程 1. Mybatis中缓存的作用 首先缓存 ...

最新文章

  1. C++语言学习(十二)——C++语言常见函数调用约定
  2. matlab中任意两边之和大于第三边,无法赋值,左侧大小1*1,右侧1*3,代码报错,但是看不出来两边大小不相等啊...
  3. 第jiu届蓝桥杯单片机省赛真题_第九届蓝桥杯单片机组省赛试题.pdf
  4. 标题: Huffman树
  5. 程序包androidx.support.annotation不存在/import android.support.annotation.NonNull;报错
  6. 第十二届蓝桥杯模拟赛Python组(第一期)
  7. VB计算机中next是什么意思,VB程序的基本结构――循环结构之For-Next语句
  8. 明辰智航发布流量分析审计系统
  9. Sass 入门(基础知识点汇总)
  10. C++ 复数计算器 简单代码
  11. 全面理解面向对象的 JavaScript(转载)
  12. 深信服edr终端漏洞
  13. wordpress采集插件-wordpress关键词插件-wordpress百度推送插件-wordpress蜘蛛统计分析插件
  14. 人工智能和计算机视觉(5)-边缘检测
  15. 大话数据结构笔记-图
  16. SLE46C-40.K44P-M12安全传感器
  17. zynq 烧写W25Q256FV Flash步骤
  18. 基于自适应最优多评价神经模糊控制的MIMO人体肌肉骨骼臂模型
  19. 如何留住vscode运行框?
  20. SQL DML 数据操纵语句

热门文章

  1. 创建用户注册接口时的两个小问题
  2. SQL 删除数据库文件,删除SQL文件 无法删除 文件‘NEWDB2021‘,因为它不为空
  3. 星球日报 | 英伟达70亿美元收购同行公司;XRPL Labs推出针对WooCommerce项目开发人员的奖励基金...
  4. neosemantics的bug汇总
  5. Tiktok免越狱群控 分享Tiktok引流变现矩阵玩法
  6. jdbc 的连接方式 thin, oci
  7. 数据分析手把手入门:打造自己的股票分析系统
  8. 软件测试的基本过程共有几个步骤?
  9. 04-CSS选择器:伪类
  10. Python实验四 Python序列结构