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 ...
随机推荐
- python基础 列表 的用法及介绍
列表 首先定义一个列表 声明列表 列表名字=[值1,值2] list=[1,2,3,4,5] 这是一个列表,列表中有五个元素(1,2,3,4,5) 显示list列表 print list 输出 ...
- 2018/2/14 设计模式学习笔记(一) 自己实现ArrayList,LinkedList和Iterator,以及在此过程中对于面向对象,面向接口,还有抽象类的一些思考感悟
因为本人目前为止学习编程不过七个月,所以后面的感悟对于一些大神来说可能嗤之以鼻,但对于一些刚刚入门的萌新来说在理解面向对象的思想上,以及抽象类和接口应该怎么设计等方面应该还是会有所帮助的 首先我们定义 ...
- 【模板小程序】求小于等于N范围内的质数
//筛法求N以内的素数(普通法+优化),N>=2 #include <iostream> #include <cmath> #include <vector> ...
- Matlab中图论工具箱的应用
Matlab图论工具箱的命令见表1 表1 matlab图论工具箱的相关命令 命令名 功能 graphallshortestpaths 求图中所有顶点对之间的最短距离 graphconncomp 找无 ...
- b继承a
有下面这样的一段代码: function a(){ this.foo = function(){ console.log('foo'); } } var b = {}; 请问如何让b继承a? b.__ ...
- typedef struct 的用法
typedef struct stu { int age; char name[20]; }stu,*pstu; stu stu1;相当于struct stu stu1; pstu pstu1;相当于 ...
- EL表达式多条件判断方式
<td> <c:forEach items="${cityMap}" var="entry"> <hr> <input ...
- 爬虫(Spider),反爬虫(Anti-Spider),反反爬虫(Anti-Anti-Spider)
爬虫(Spider),反爬虫(Anti-Spider),反反爬虫(Anti-Anti-Spider),这之间的斗争恢宏壮阔... Day 1小莫想要某站上所有的电影,写了标准的爬虫(基于HttpCli ...
- angular-file-upload封装为指令+图片尺寸限制
不了解angular-file-upload基础使用 请先参考http://blog.csdn.net/lai_xu/article/details/49535847 博客地址 下文如果有更好的建议请 ...
- 使用JS代码实现点击按钮下载文件
有时候我们在网页上需要增加一个下载按钮,让用户能够点击后下载页面上的资料,那么怎样才能实现功能呢?这里有两种方法: 现在需要在页面上添加一个下载按钮,点击按钮下载文件. 题外话,这个下载图标是引用的 ...