mybatis的一级缓存和二级缓存

小污龟      2022-05-04     434

关键词:

一级缓存基于sqlSession默认开启,在操作数据库时需要构造SqlSession对象,不同的SqlSession之间的缓存数据区域是互相不影响的。

一级缓存的作用域是SqlSession范围的,当在同一个sqlSession中执行两次相同的sql语句时,第一次执行完毕会将数据库中查询的数据写到缓存(内存),

第二次查询时会从缓存中获取数据,不再去底层数据库查询,从而提高查询效率。

需要注意的是,如果SqlSession执行了DML操作(增删改),并且提交到数据库,MyBatis则会清空SqlSession中的一级缓存,这样做的目的是为了保证缓存中存储的是最新的信息,避免出现脏读现象。

当一个SqlSession结束后该SqlSession中的一级缓存也就不存在了。

 

二级缓存是mapper级别的缓存。使用二级缓存时,多个SqlSession使用同一个Mapper的sql语句去操作数据库,得到的数据会存在二级缓存区域,它同样是使用HashMap进行数据存储。相比一级缓存SqlSession,二级缓存的范围更大,多个Sqlsession可以共用二级缓存,二级缓存是跨SqlSession的。

二级缓存的作用域是mapper的同一个namespace。不同的sqlSession两次执行相同的namespace下的sql语句,且向sql中传递的参数也相同,即最终执行相同的sql语句,则第一次执行完毕会将数据库中查询的数据写到缓存,第二次查询会从缓存中获取数据,不再去底层数据库查询,从而提高效率。



作者:啦啦啦啦啦哈1
链接:https://www.jianshu.com/p/fdddea36eb22
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

mybatis的一级缓存和二级缓存

一级缓存是SqlSession级别的缓存,当使用了clearCache方法和,或者close方法的话,这个缓存失效,如果还有同样的查询,则还会发送一次查询SqlSessionsession=SqlSessionFactoryUtil.getSession();Empemp=session.selectOne("queryEmpByNo",7900);System.out... 查看详情

mybatis的一级缓存和二级缓存(代码片段)

一级缓存一级缓存在mybatis中默认是开启的并且是session级别,它的作用域为一次sqlSession会话。mybatis默认是开启了一级缓存的。一级缓存的作用域有两种:session(默认)和statment,可通过设置local-cache-scope的值... 查看详情

mybatis-一级缓存与二级缓存

 1.1  什么是查询缓存mybatis提供查询缓存,用于减轻数据压力,提高数据库性能。mybaits提供一级缓存,和二级缓存。 一级缓存是SqlSession级别的缓存。在操作数据库时需要构造sqlSession对象,在对象中有一个(内存区... 查看详情

mybatis学习--缓存(一级和二级缓存)

声明:学习摘要!MyBatis缓存  我们知道,频繁的数据库操作是非常耗费性能的(主要是因为对于DB而言,数据是持久化在磁盘中的,因此查询操作需要通过IO,IO操作速度相比内存操作速度慢了好几个量级),尤其是对于一些... 查看详情

mybatis缓存的使用和源码分析

Mybatis缓存使用在Mybatis中缓存分为一级缓存和二级缓存,二级缓存又称为全局缓存,默认一级缓存和二级缓存都是开启的,只是二级缓存的使用需要配置才能生效,在Mybatis中一级缓存是SqlSession级别也就是会话级别的,而二级缓... 查看详情

源码级mybatis缓存策略(一级和二级缓存)(代码片段)

...们可以避免频繁的与数据库进行交互,进而提高响应速度MyBatis也提供了对缓存的支持,分为一级缓存和二级缓存,可以通过下图来理解:①、一级缓存是SqlSession级别的缓存。在操作数据库时需要构造sqlSession对象,在对象中有一... 查看详情

mybatis一级缓存与二级缓存的区别你知道吗(代码片段)

前言Java面试经常问到Mybatis一级缓存和二级缓存,今天就给大家重点详解Mybatis一级缓存和二级缓存原理与区别。Mybatis缓存缓存就是内存中的数据,常常来自对数据库查询结果的保存,使用缓存可以避免频繁与数据库... 查看详情

mybatis一级缓存与二级缓存的区别你知道吗(代码片段)

前言Java面试经常问到Mybatis一级缓存和二级缓存,今天就给大家重点详解Mybatis一级缓存和二级缓存原理与区别。Mybatis缓存缓存就是内存中的数据,常常来自对数据库查询结果的保存,使用缓存可以避免频繁与数据库... 查看详情

mybatis的一级缓存和二级缓存

一级缓存基于sqlSession默认开启,在操作数据库时需要构造SqlSession对象,不同的SqlSession之间的缓存数据区域是互相不影响的。一级缓存的作用域是SqlSession范围的,当在同一个sqlSession中执行两次相同的sql语句时,第一次执行完毕会... 查看详情

mybatis的一级缓存和二级缓存

一级缓存基于sqlSession默认开启,在操作数据库时需要构造SqlSession对象,在对象中有一个HashMap用于存储缓存数据。不同的SqlSession之间的缓存数据区域是互相不影响的。一级缓存的作用域是SqlSession范围的,当在同一个sqlSessi... 查看详情

mybatis的一级缓存和二级缓存(代码片段)

文章目录缓存是什么?Mybatis提供的缓存一级缓存?一级缓存什么时候过期?什么时候清空?二级缓存?什么时候存?怎么配置?第一种配置:第二种配置:二级缓存什么时候过期?什么时候... 查看详情

mybatis延迟加载和缓存机制(一级二级缓存)

...息。所以这就是突出了懒这个特点。真是懒啊。    Mybatis中resultMap可以实 查看详情

mybatis缓存,包含一级缓存与二级缓存,包括ehcache二级缓存

...了提高性能。明白了这一点下面我们开始进入正题。二,mybatis缓存概要①、mybatis的缓存有两种,分别是一级缓存和二级缓存。两者都属于查询缓存,也就是只有执行查询操作的时候才起缓存作用,对于增删改操作无效。②、一... 查看详情

mybatis一级缓存与二级缓存

MyBatis一级缓存  MyBatis一级缓存默认开启,一级缓存为Session级别的缓存,在执行以下操作时一级缓存会清空  1.执行session.clearCache();  2.执行CUD操作  3.session.close();//不是同一个Session对象了 MyBatis二级缓存  需要配... 查看详情

mybatis一级缓存和二级缓存及ehcache整合

一级缓存什么是缓存??  缓存是存储在内存(cache)中的数据,一般情况都存在内存,在内存数据存储满了,会存储到硬盘上(disk),或是在我们进行一些操作和配置也可以把缓存存储到磁盘中。缓存的作用是什么??  缓存... 查看详情

mybatis缓存

资料来自一级缓存和二级缓存一级缓存和二级缓存注解mapper一级缓存一级缓存,是指SqlSession级别的缓存。一级缓存是一直开启的,在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据。不... 查看详情

mybatis一级缓存和二级缓存

缓存详细介绍,结果集展示https://blog.csdn.net/u013036274/article/details/55815104 配置信息http://www.pianshen.com/article/16399265/ ************详细介绍*************https://my.oschina.net/zjllovecode/blog/18175 查看详情

mybatis的二级缓存

文章目录MyBatis的二级缓存MyBatis默认是开启一级缓存的开启MyBatis的二级缓存为什么要开启二级缓存在mybatis的配置文件中进行配置在对应的mapper映射文件中声明相关的DO对象需要实现序列化测试动态代理接口执行更新方法后会清空... 查看详情