对于一些我们经常查询的并且不经常改变的数据,如果每次查询都要与数据库进行交互,那么大大降低

了效率,因为我们使用缓存,将一些对结果影响不大且经常查询的数据存放在内存中,从而减少与数据

库的交互来提高效率,这就是缓存的优势

MyBatis缓存的分类:

1. 一级缓存:同一个 SqlSession 对象, 在参数和 SQL 完全一样的情况下, 只执行一次 SQL 语句

(前提缓存没有过期)

2. 二级缓存:Mybatis的二级缓存是指mapper映射文件。二级缓存的作用域是同一个namespace下

的mapper映射文件内容,多个SqlSession共享

一级缓存

同一个 SqlSession 对象, 在参数和 SQL 完全一样的情况下, 只执行一次 SQL 语句(前提缓存

没有过期)

在日志和输出中:

第一次查询发送了 SQL 语句, 后返回了结果;

第二次查询没有发送 SQL 语句, 直接从缓存中获取了结果。

第一次的对象和第二次的对象是相同的

而不同的 SqlSession两次查询都从数据库中取出了数据,虽然结果相同, 但是是两个不同的对象

一级缓存

1. 同一个 SqlSession 中, Mybatis 会把执行的方法和参数通过算法生成缓存的键值, 将键值和结果

存放在一个 Map 中, 如果后续的键值一样, 则直接从 Map 中获取数据;

2. 不同的 SqlSession 之间的缓存是相互隔离的;

3. 用一个 SqlSession , 可以通过代码或配置在查询前清空缓存;

4. insert、update、delete 语句会清空缓存

二级缓存

二级缓存指的是 mybatis中SqlSessionFactory对象的缓存 ,由同一个SqlSessionFactory对象 创

建的SqlSession共享缓存

在配置文件 mybatis-conf.xml 中配置,让mybatis支持二级缓存

在映射配置文件Mapper.xml中 开启支持二级缓存: <cache/>

让当前操作支持二级缓存,在select标签 加上 useCache="true"

在缓存的时候要注意

1. 由于在更新时会刷新缓存, 因此需要注意使用场合:查询频率很高, 更新频率很低时使用, 即经

常使用 select, 相对较少使用insert, update,delete

2. 缓存是以 namespace 为单位的,不同 namespace 下的操作互不影响。但刷新缓存是刷新整个namespace 的缓存, 也就是你 insert, update,delete 了一个, 则整个缓存都刷新了

3. 最好在 「只有单表操作」 的表的 namespace 使用缓存, 而且对该表的操作都在这个namespace 中,否则可能会出现数据不一致的情况

My Batis缓存相关推荐

  1. My Batis 的XML 映射配置文件详解

    My Batis 支持SQL查询,是一些高级映射在持久层的完美展示.他更多的使用简单的XML或注解用于配置和原始映射,摒除了大量的JDBC代码.手工设置参数和结果集封装,提高了开发效率. MyBati ...

  2. Spring中启用Hibernate二级缓存步骤

    1.在applicationContext.xml配置文件中SessionFactory  bean中配置缓存 <!-- 配置会话工厂对象 --> <bean id="se ...

  3. Redis 预防缓存穿透“神器” — 布隆过滤器

    1. 布隆过滤器 1.1 概念 在架构设计时有一种最常见的设计被称为布隆过滤器,它可以有效减少缓存穿透的情况.其主旨是采用一个很长的二进制数组,通过一系列的 Hash 函数来确定该数据是否存在. 布隆 ...

  4. 缓存击穿、缓存穿透、缓存雪崩

    文章目录 多级缓存架构 缓存击穿 缓存穿透 缓存雪崩 多级缓存架构 在项目架构中,前端发送请求,服务器会先从缓存中获取数据,如果找到数据则直接返回,如果在缓存中没有找到则会去从数据库中获取,数据库取到 ...

  5. Redis缓存穿透击穿雪崩

    目录 1.缓存穿透 2.缓存击穿 3.缓存雪崩 1.缓存穿透 概述: 缓存穿透的概念很简单,用户想要査询一个数据,发现redis内存数据库没有,也就是缓存没有命中,于是向持久层数据库査询.发现也数据库 ...

  6. CPU三级缓存技术解析

    CPU三级缓存技术解析 cpu存取数据 cpu存取数据大致可以认为是下图的流程(此处图比较简单) cpu拿到需要的内存地址,之后这个地址会被mmu转换成真正的物理地址,接下来会去查接下来查L1 cac ...

  7. Glide的缓存机制

    Glide的缓存分为两个模块,一个是内存缓存,一个是硬盘缓存. 内存缓存的作用是防止应用重复将图片数据读取到内存当中: 硬盘缓存的作用是防止应用重复从网络或其他地方下载和读取数据. Glide的缓存K ...

  8. 内存缓存LruCache的简单使用

    LruCache算法(Least Recently Used),也叫近期最少使用算法. 这个类非常适合用来缓存图片,它的主要算法原理是把最近使用的对象用强引用存储在 LinkedHashMap 中,并 ...

  9. 最全面的缓存架构设计

    一.缓存技术和框架的重要性 互联网的一些高并发,高性能的项目和系统中,缓存技术是起着功不可没的作用.缓存不仅仅是key-value的简单存取,它在具体的业务场景中,还是很复杂的,需要很强的架构设计能力 ...

最新文章

  1. 【 FPGA 】状态机,FPGA的灵魂
  2. ERROR 1222 (21000): The used SELECT statements have a different number of columns :
  3. SpringBoot+SweeAlert实现alert提示与前后端数据交互
  4. 移动平台作业——天气预报——天气数据的获得——为应用申请百度ak码
  5. 3种纯CSS实现中间镂空的12色彩虹渐变圆环方法
  6. excel vba 从入门到精通_VBA词汇-基本元素篇
  7. Androud 如何有效减少重复代码
  8. 伊万卡·特朗普的迈阿密豪华公寓楼接受加密付款
  9. 数据分析报告应该包含的内容
  10. Bailian2700 字符替换【字符串】
  11. IBM Rational Appscan使用之扫描结果分析
  12. 牛顿插值 | MATLAB源码
  13. 微型计算机系统教案,微型计算机硬件系统教案
  14. flutter ios打包_Flutter 的Android 、iOS 打包
  15. 浅谈打开网页速度慢的原因和解决方法
  16. Python pass语句及其作用
  17. 浅谈CAS,一篇就够了
  18. 编写一个python程序判断用户输入的8位银行卡_用Python编写的程序,提示用户输入一个由7位数字组成的帐号?...
  19. 自动添加控件,一次提交多条记录。
  20. 中国Linux发展前景怎么样?

热门文章

  1. ORA-16000: 打开数据库以进行只读访问
  2. Intel史上最能超频的10款CPU
  3. 高通QSEE中使用qsee_stor_write_sectors函数存储数据到emmc的RPMB分区
  4. 物联网控制技术课内实验-NUAA-matlab2020a安装以及考试碎碎念
  5. Javap与JVM指令
  6. KNIME二次开发之环境搭建
  7. css项目符号编号,CSS重新定义项目符号和编号_css
  8. canvas画图-钟表
  9. Mathematica做拟合
  10. linux下网卡team的配置