hibernate中的一级缓存
hibernate中的一级缓存
Hibernate提供了两种缓存,这里主要写一级缓存。
第一级缓存是session的缓存,由于Session对象的生命周期通常对应一个数据事务或者一个应用事务,因此它的缓存是事务范围的缓存,第一级缓存是必需的,不允许而且事实上也无法被卸除,在第一级缓存中,持久化类的每一个实例都具有唯一的OID。
Session的缓存是通过集合来实现的,在hibernate中封装了list和map的各种集合,用来为Session服务。
上面的有点繁琐,看着看着都不想看了
所以举个例子:
Student student=session.get(Student.class,1);
上面这个红色代码会将student的引用也就是DB中的数据放到一级缓存。也就是说当执行了get方法后DB中的数据就会加载到session的一级缓存中。
流程详解:
1. 将引用数据从DB中取出来
2. 将引用的数据对象化,并保存到堆内存中
3. 将对象的id放入session缓存的map的key中,将对象的引用放入session缓存map的value中。
4.将对象的详情放入快照中。当执行session.getTransaction().commit()时,hibernate同时会清理session中的一级缓存(flush),也就是将堆内存中的数据与快照中的数据进行对比,如果不一致,则会执行同步(update)操作,若相同,则不执行。
这就牵扯到一个什么是快照:
Hibernate中对的快照
1. 快照是数据的副本,
2. 快照属于一级缓存,
3. 快照是在堆内存中
4. 快照的作用:保证数据的一致性
所以当我们执行
student.setName(“张三”);
的时候,堆内存中的数据便发生了变化,这样导致与快照中的不相符,所以快照执行update操作,得以让数据保存一直。
分析得出:
hibernate向一级缓存放入数据时,同时保存快照数据(堆内存中),当修改一级缓存的时候,在flush操作时,对比 缓存和快照,如果不一致,自动更新。
一级缓存默认打开,缓存区和快照区都属于一级缓存上面写的这些系统流程基本就属于一级缓存。
hibernate和mybatis的一级缓存都属于Session的缓存!
hibernate中的一级缓存相关推荐
- 在Spring、Hibernate中使用Ehcache缓存
前一篇http://blog.csdn.net/ibm_hoojo/article/details/7739181介绍了Ehcache整合Spring缓存,使用页面.对象缓存:这里将介绍在Hibern ...
- Mybatis中的一级缓存
像大多数的持久化框架一样,Mybatis也提供了缓存策略,通过缓存策略来减少数据库的查询次数,从而提高性能. Mybatis中缓存分为一级缓存,二级缓存. 证明一级缓存的存在 一级缓存是SqlSess ...
- Mybatis 中的一级缓存与二级缓存
一,Mybatis中为什么要有缓存 缓存的意义是将用户经常查询的数据放入缓存(内存)中去,用户去查询数据的时候就不需要从磁盘(关系型数据库)中查询,直接从缓存中查询,从而提高了查询效率,解决了高并 ...
- Hibernate学习之一级缓存
© 版权声明:本文为博主原创文章,转载请注明出处 Hibernate缓存: - 缓存是为了降低应用程序对物理数据源访问的频次,从而提供应用程序的运行性能的一种策略 - Hibernate缓存是提升和优 ...
- MyBatis中的一级缓存和二级缓存介绍
先说缓存,合理使用缓存是优化中最常见的,将从数据库中查询出来的数据放入缓存中,下次使用时不必从数据库查询,而是直接从缓存中读取,避免频繁操作数据库,减轻数据库的压力,同时提高系统性能. 一级缓存 一级 ...
- java mysql 二级缓存_深入理解MyBatis中的一级缓存与二级缓存
http://blog.csdn.net/weixin_36380516/article/details/73194758 先说缓存,合理使用缓存是优化中最常见的,将从数据库中查询出来的数据放入缓存中 ...
- CPU中的一级缓存,二级缓存,三级缓存
缓存又叫高速缓冲存储器,其作用在于缓解主存速度慢.跟不上CPU读写速度要求的矛盾. 缓存的实现原理,是把CPU最近最可能用到的少量信息(数据或指令)从主存复制到CACHE中,当CPU下次 ...
- mybaits中的一级缓存和二级缓存使用
什么是延迟加载 resultMap中的association和collection标签具有延迟加载的功能. 延迟加载的意思是说,在关联查询时,利用延迟加载,先加载主信息.使用关联信息时再去加载关联信息 ...
- 多级缓存中的一级缓存全网流量分发CDN
鸡蛋不要放在一个篮子里,篮子摔了就都没了. httpdns 浏览器访问一个域名的过程:先去操作系统的hosts文件中寻找域名对应的ip地址,存在就拿来使用,直接向该ip地址发起网络请求.如果没有就去操 ...
最新文章
- IDEAWebstorm使用
- mysql connection闪退重连_玩家排位巅峰赛开局闪退,重连失败,10分钟后一个提示让他懵了...
- Struts框架核心技术小小班
- 【EventBus】Subscribe 注解分析 ( Subscribe 注解属性 | threadMode 线程模型 | POSTING | MAIN | MAIN_ORDERED | ASYNC)
- Utils.toDip()的用法
- c语言cin改scanf,我的代码用scanf输入wa了,改成cin就ac了 ?
- 【转载】C++读写ini配置文件GetPrivateProfileString()WritePrivateProfileString()
- java调用qq接口_用java代码怎么去请求腾讯接口并返回值
- python文件夹中的__init__.py的作用
- pls-00302: 必须声明 组件_vue组件
- 酷炫的外部开启Activity新姿势
- Unity3D资源分享
- Could not resolve com.huawei.agconnect:agcp
- Xposed框架Xposed安装器|Xposed for Android 5.0/5.1/6.0|详细安装教程
- 如何配置无线WiFi短信认证登录?
- UVALive 4126 Password Suspects(AC自动机+dp)
- 江苏省盐城中学信息竞赛队(YZOI)队规
- python 根据网易云歌曲的ID 直接下载歌曲
- 互联网人:我太太太太太太太太太太难了!
- 如何学习无线电通联字母解释法和通联术语
热门文章
- 聊聊JVM(一)相对全面的GC总结
- Html基础知识详解
- BZOJ 1079: [SCOI2008]着色方案 记忆化搜索
- 合并多个wordpress到一个
- 【.Net Micro Framework PortingKit – 12】SysTick驱动开发
- PHP 入门 - 8.数据库
- JS 判断URL中是否含有 http:// 如果没有则自动为URL加上
- 前端技术公众号运营心得记录
- Element UI的Table用法
- Codeforces.1110E.Magic Stones(思路 差分)