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 ...
随机推荐
- CF 235C. Cyclical Quest [后缀自动机]
题意:给一个主串和多个询问串,求询问串的所有样子不同的周期同构出现次数和 没有周期同构很简单就是询问串出现次数,|Right| 有了周期同构,就是所有循环,把询问串复制一遍贴到后面啊!思想和POJ15 ...
- Dapper入门教程(二)——执行非查询语句
描述 你可以从任意实现IDbConnection的类对象中调用Dapper的扩展方法"Execute".它能够执行一条命令(Command)一次或者多次,并返回受影响的行数.这个方 ...
- market1501的学习,跟着苏同学的博客学习
先看看官方文档:然后附上苏的博客链接http://bigbrothersue.com/index.php/2017/12/20/person-re-id/ The Market-1501 datase ...
- 【模板小程序】求第n个质数
#include <iostream> #include <vector> using namespace std; int nth_prime(int n) { vector ...
- ACE在windows下的编译及配置(VS2010)
ACE在windows下的编译及配置(VS2010) 分类: -[小西南]- 2013-08-06 16:17 2354人阅读 评论( ...
- LNMP搭建04 -- 配置Nginx支持PHP
首先建立存放网页文件的目录,执行 mkdri /usr/local/server/www 然后进入到该目录中 cd /usr/local/server/www 然后创建一个测试文件: phpinfo ...
- 插入排序Insertion Sort
插入排序:将一个数据插入到一个已经排好序的有序数据序列中,从而得到一个新的.个数+1的有序数列:插入排序适用于少量数据排序,时间复杂度为O(n^2). 实现思路:1.对于一个无序数组,选取第一个元素, ...
- wampserve部署
全名 WampServer 来自法国的软件 http://www.wampserver.com/en/ 一.下载方法: 1.一级导航点击download(发现只不过是本页的跳转,硕大的 wampser ...
- mybatis3:Invalid bound statement (not found)
最近在玩ssm框架搭建,突然发现最后的时候mybaits和SpringMvc进行整合的时候出现错误 Invalid bound statement (not found) 这个错误有可能出现在以下几个 ...
- yii2自带的backend,frontend不够用,添加一个后台模块怎么做?
在复杂项目里,高级模板中的fontend.backend application明显不够,可以再添加另外的application. 例如添加一个seller application .步骤如下: 1, ...