hibernate学习(四)hibernate的一级缓存&快照
缓存:提高效率
硬件的 CPU缓存 硬盘缓存 内存
软件的 io流缓存
hibernate 的一级缓存 也是为了操作数据库的效率。
证明一级缓存在 :
Person p=session .get(Person.class, 1);
Person p1=session.get(Person.class,2);
Person p2=session.get(Person.class,3);
System.out.println(p=p1);
控制台输出为:
select * from person where id=1;
true
缓存原理:

快照
当代码变为:
注:原始数据库person表中的第一条数据的name值为 "张三"
Person p=session.get(Person.class,1);
p.setName("zhangsan");
p.setName("张三");
执行后控制台上显示为
select * from person where id=1;
查看数据库person表中的数据 id为1 name="张三"
这里就运用到了hibernate 的快照:

提高效率: 1.提高查询效率 (缓存原理) 2.减少不必要的修改语句发送 (快照)
从缓存上看 hibernate对象状态 :
1.瞬时状态 :没有id ,没有在session缓存中
2.持久化状态: 有id ,在session缓存中
3. 游离/托管 状态 :有id 没与在缓存中
对快照的更深一步了解 : 以下代码 截取测试方法中的部分主要的代码
.........
Person p=new Person(); // 瞬时状态
p.setId(1); // 游离状态 , 有id没有在session中缓存
session.update(p); // 持久化状态 ,有id 在session中缓存
Person p=session.get(Person.class, 1);
tx.commit();
.........
在person p =new Person(); 设置一个断点 ,debug模式执行查看控制台中的SQL语句显示
直至运行到Person p= session.get(Person.class ,1); 控制台输出 update Person set name=? age= ? sex=? where id=?
出现该现象的原因是 : 对象是通过update 变为持久化状态 ,没有通过get方法 把对象放入快照中 ,
当 事物提交中后 会执行 第九步:对象和快照中的对象进行比对, 如果不相同就执行update 语句 ; 没有快照也就不相同所以就执行update语句
hibernate学习(四)hibernate的一级缓存&快照的更多相关文章
- Hibernate学习(二)———— 一级缓存和三种状态解析
一.一级缓存和快照 什么是一级缓存呢? 很简单,每次hibernate跟数据库打交道时,都是通过session来对要操作的对象取得关联,然后在进行操作,那么具体的过程是什么样的呢? 1.首先sessi ...
- hibernate学习四 hibernate关联关系映射
在Hibernate中对象之间的关联关系表现为数据库中表于表之间的关系(表之间通过外键关联). 1 单向的一对一 主键关联 外键关联 2 单向的一对多 3 单向的多对一 4 单向的多对多 5 双向的 ...
- Hibernate学习(九)———— 二级缓存和事务级别详讲
序言 这算是hibernate的最后一篇文章了,下一系列会讲解Struts2的东西,然后说完Struts2,在到Spring,然后在写一个SSH如何整合的案例.之后就会在去讲SSM,在之后我自己的个人 ...
- hibernate学习 六 Hibernate缓存
缓存: 如果在集群环境下使用Hibernate时,(集群有节点A ,节点B) 当请求,发往A节点,A在数据库中修改了一条记录,然后节点B的缓存中如何实时的更新节点A修改的新数据 hi ...
- Hibernate学习四----------Blob
© 版权声明:本文为博主原创文章,转载请注明出处 实例 1.项目结构 2.pom.xml <project xmlns="http://maven.apache.org/POM/4.0 ...
- hibernate 学习 五 hibernate核心接口
一 Configuration接口 Configuration对象只存在于系统的初始化阶段.配置相关. 配置文件可以使用默认的路径,也可以指定路径. Configuration config = ne ...
- Hibernate学习0.Hibernate入门
Hibernate是什么 面向java环境的对象/关系数据库映射工具. 1.开源的持久层框架. 2.ORM(Object/Relational Mapping)映射工具,建立面向对象的域模型和关系数据 ...
- Hibernate学习之hibernate执行顺序
Hibernate 执行的顺序如下: (1) 生成一个事务的对象,并标记当前的 Session 处于事务状态(注:此时并未启动数据库级事务). (2) 应用使用 s.save 保存对象,这个时候 ...
- Hibernate学习5—Hibernate操作对象
第一节:Hibernate 中四种对象状态 删除状态:处于删除状态的Java 对象被称为删除对象.比如说session delete一个对象,这个对象就不处于session缓存中了, 已经从sessi ...
随机推荐
- zalenium 应用
zalenium是一个Selenium Grid扩展,用Docker容器动态扩展你的本地网格.它使用docker-selenium在本地运行Firefox和Chrome中的测试,如果需要不同的浏览器, ...
- vue1.0中$index一直报错的解决办法
原文链接:https://www.cnblogs.com/liqiong-web/p/8144925.html 看学习视频,因为年份比较早了,其实vue早已迭代到vue2.0了,遇到一些问题: v-f ...
- 洛谷 [P1113] 杂务
图论的做法是topsort 一看见有序我们就想到了DAG图,于是用topsort做,对于每一个加入队列的顶点,都用它的时间去更新它所指向的点的时间,本质上仍是DP的思想,dp[i]=max{dp[j] ...
- VUE2.0 elemenui-ui 2.0.X 封装 省市区三级
1. 效果图 2. 版本依赖 vue 2.X , elementui 2.0.11 使用element ui <el-form>标签 3. 源码 components/CityL ...
- 启动mysql遇到1067问题
最近安装sql的时候,出现一些问题:启动的时候出现1067错误 在网上找了很多方法,比如删除mysql安装目录下date的bdata1, ib_logfile0, .. 等innodb的文件, 比如修 ...
- R语言-主成分分析
1.PCA 使用场景:主成分分析是一种数据降维,可以将大量的相关变量转换成一组很少的不相关的变量,这些无关变量称为主成分 步骤: 数据预处理(保证数据中没有缺失值) 选择因子模型(判断是PCA还是EF ...
- Spring bean的生命周期详解
bean的生命周期1.实例化bean 即new2.按照spring上下文对实例化的bean进行配置 即填充属性,也就是IOC/DI(控制反转,依赖注入)3.如果这个bean实现了BeanNameAwa ...
- GitHub入门与实践
基本命令 git status 工作区状态 git add git commint 暂存区 git push gitHub客户端 下载网址:https://desktop.github.com/ 解决 ...
- href与src 区别
src 是可替换的文本支撑,将指向的内容引入文档当前标签所在的位置, 当浏览器解析到该标签时,将暂停其它资源的下载处理, 请求该标签的src ,下载指向的外部资源并应用到当前文档, 所以js 脚本一般 ...
- linux磁盘及分区详解
1.Linux 分区简介 1.1 主分区 vs 扩展分区 硬盘分区表中最多能存储四个分区,但我们实际使用时一般只分为两个分区,一个是主分区(Primary Partion)一个是扩展分区(extend ...