一、简述

MyBatis 的一级缓存是基于数据库会话(SqlSession 对象)的,默认开启。二级缓存是基于全局(nameSpace)的,开启需要配置。

对于JDBC操作,如果需要连续请求 id=1 的用户数据,那么就要进行两次的数据库连接,获取数据库中的数据。相同的数据,进行两次数据库连接,这肯定会造成资源的浪费。基于面向对象,可以把第一次获取的数据保存到一个对象中,下一次直接从对象中获取就行了,如图:

获取的内容保存在对象中,在一个请求期间,直接使用或者传递对象就可以了。对于 JDBC 的操作,可以自己定义类或者集合来保存数据库中的数据,来避免连续请求数据库的问题。这里用来保存数据的对象或者集合,也能称之为缓存。

但是使用了三层架构之后,Dao 层和 Dao 层之间有可能互相是不清楚的。如果有一个复杂的业务要在 Service 层中进行处理,需要分别调用不同 Dao 层中的数据,那这样简单的缓存还是不够看。

此时,要再去处理缓存问题,就会花费过多的精力,得不偿失。在这种层面上的缓存处理 MyBatis 框架已经做好了,就叫做一级缓存。

二、MyBatis 的主要层次结构

使用 MyBatis 对数据库操作的代码,能够看见的就是这个 SqlSession 对象。实际上,这只是 MyBatis 对外暴露的接口,整个 MyBatis 核心部件是下面的这么一堆接口和类:

1️⃣SqlSession:MyBatis 工作的主要顶层 API,表示和数据库交互的会话,完成必要数据库增删改查功能。
2️⃣Executor:MyBatis 执行器,整个 MyBatis 调度的核心,负责 SQL 语句的生成和查询缓存的维护。
3️⃣StatementHandler:封装了 JDBC Statement 操作,负责对 JDBC statement 的操作,如设置参数、将 Statement 结果集转换成 List 集合。
4️⃣ParameterHandler:负责对用户传递的参数转换成 JDBC Statement 所需要的参数。
5️⃣ResultSetHandler:负责将 JDBC 返回的 ResultSet 结果集对象转换成 List 类型的集合。
6️⃣TypeHandler:负责 Java 数据类型和 jdbc 数据类型之间的映射和转换。
7️⃣MappedStatement:MappedStatement 维护了一条节点的封装。
8️⃣SqlSource:负责根据用户传递的 parameterObject,动态地生成 SQL 语句,将信息封装到 BoundSql 对象中,并返回。
9️⃣BoundSql:表示动态生成的 SQL 语句以及相应的参数信息。

MyBatis 的一级缓存与二级缓存相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  9. MyBatis中的一级缓存和二级缓存介绍

    先说缓存,合理使用缓存是优化中最常见的,将从数据库中查询出来的数据放入缓存中,下次使用时不必从数据库查询,而是直接从缓存中读取,避免频繁操作数据库,减轻数据库的压力,同时提高系统性能. 一级缓存 一级 ...

  10. mybatis 详解------ 一级缓存、二级缓存(九)

    mybatis 为我们提供了一级缓存和二级缓存,可以通过下图来理解: ①.一级缓存是SqlSession级别的缓存.在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构(HashMa ...

最新文章

  1. 十大机器智能新型芯片:华为抢占一席,Google占比最多
  2. 特斯拉大半夜「见鬼」!空无一人的路上,它却看见「幽灵」秒刹车
  3. [LeetCode] Remove Duplicates from Sorted Array II
  4. ABAP中的F4帮助怎么用?
  5. 移动端HTML5长按图片会选中页面中某个位置的文字
  6. C++ 中的三种继承public , protected, private
  7. VMware虚拟机克隆CentOS后网卡修改方法
  8. 专访Docker大牛:说服传统应用程序使用者是Docker面临的最大难题
  9. 赛道二周冠分享:石头哥有些心里话要说一说
  10. linux下ssh/sftp配置和权限设置
  11. 大数据系统架构是什么
  12. 计算机英语潘雪峰,《小学三年级英语听力训练指导策略的研究》研究报告
  13. html合并边框线,css中border-collapse属性设置表格边框线的方法
  14. 易基因|3文解读:微量样本甲基化测序在肿瘤中的应用
  15. Ecshop各个页面文件介绍,主要文件功能说明
  16. java 父类构造_java 父类构造器
  17. Curl学习日记3 - 在Linux命令行中使用Curl
  18. linux中ll和ls的区别,分别是什么意思?
  19. 11月获得融资的区块链企业汇总
  20. 知到网课营养与食疗学题库及真题答案

热门文章

  1. linux用mame玩游戏,Ubuntu下用xmame玩街机游戏
  2. CSS CSS3 pdf 电子书大全 百度云
  3. 网易面试总结——面试案例5~面试案例8
  4. 齐聚一堂:共话网络安全人才培养新模式
  5. 美赛数模论文之表的格式
  6. Java - JDBC Best Practices
  7. CPU测温软件怎么读出来的内核温度?有什么简单靠谱的读取
  8. 用计算机对医学图像做后处理,医学影像学中图像数字化的运用
  9. 鸡汤_产品经理职责概要
  10. lilo是什么意思_Lilo_英文名Lilo是什么意思