缓存:提高效率

硬件的 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的一级缓存&快照的更多相关文章

  1. Hibernate学习(二)———— 一级缓存和三种状态解析

    一.一级缓存和快照 什么是一级缓存呢? 很简单,每次hibernate跟数据库打交道时,都是通过session来对要操作的对象取得关联,然后在进行操作,那么具体的过程是什么样的呢? 1.首先sessi ...

  2. hibernate学习四 hibernate关联关系映射

    在Hibernate中对象之间的关联关系表现为数据库中表于表之间的关系(表之间通过外键关联). 1 单向的一对一 主键关联  外键关联 2 单向的一对多 3 单向的多对一 4 单向的多对多 5 双向的 ...

  3. Hibernate学习(九)———— 二级缓存和事务级别详讲

    序言 这算是hibernate的最后一篇文章了,下一系列会讲解Struts2的东西,然后说完Struts2,在到Spring,然后在写一个SSH如何整合的案例.之后就会在去讲SSM,在之后我自己的个人 ...

  4. hibernate学习 六 Hibernate缓存

    缓存: 如果在集群环境下使用Hibernate时,(集群有节点A ,节点B) 当请求,发往A节点,A在数据库中修改了一条记录,然后节点B的缓存中如何实时的更新节点A修改的新数据          hi ...

  5. Hibernate学习四----------Blob

    © 版权声明:本文为博主原创文章,转载请注明出处 实例 1.项目结构 2.pom.xml <project xmlns="http://maven.apache.org/POM/4.0 ...

  6. hibernate 学习 五 hibernate核心接口

    一 Configuration接口 Configuration对象只存在于系统的初始化阶段.配置相关. 配置文件可以使用默认的路径,也可以指定路径. Configuration config = ne ...

  7. Hibernate学习0.Hibernate入门

    Hibernate是什么 面向java环境的对象/关系数据库映射工具. 1.开源的持久层框架. 2.ORM(Object/Relational Mapping)映射工具,建立面向对象的域模型和关系数据 ...

  8. Hibernate学习之hibernate执行顺序

    Hibernate 执行的顺序如下:  (1) 生成一个事务的对象,并标记当前的 Session 处于事务状态(注:此时并未启动数据库级事务).  (2) 应用使用 s.save 保存对象,这个时候  ...

  9. Hibernate学习5—Hibernate操作对象

    第一节:Hibernate 中四种对象状态 删除状态:处于删除状态的Java 对象被称为删除对象.比如说session delete一个对象,这个对象就不处于session缓存中了, 已经从sessi ...

随机推荐

  1. MySQL dump简单使用

    首先确保MySQL的bin目录已经添加到path中,在cmd中运行@echo %path%查看. 1.基本的mysqldump使用: mysqldump -uroot -pOSSDB123 nnm5 ...

  2. bzoj 4873: [Shoi2017]寿司餐厅 [最小割]

    4873: [Shoi2017]寿司餐厅 题意:略 唯一会做的... 一眼最小割 就是最大权闭合子图呀 \(s\rightarrow d_{positive} \rightarrow -d_{negt ...

  3. (python功能定制)复杂的xml文件对比,产生HTML展示区别

    功能的设计初衷: 处理复杂的xml对比,屏蔽同节点先后顺序的影响 主要涉及知识点: 1.xml解析 ------- ElementTree库 2.文件比对差别 ------- difflib库 3.获 ...

  4. youtube视频字幕下载

    视频下载 安装TamperMonkey插件 字幕下载 http://mo.dbxdb.com/setting.html https://zhuwei.me/y2b/

  5. 音乐之声——midi制作原理

    实际发出声音需要4项必备的条件 1 发生的装置 Sequencer     把sequencer想成CD播放机 (plays) 2 要演奏的乐曲 Sequence     sequence就好像是单曲 ...

  6. centos 6.8 下安装redmine(缺陷跟踪系统)

    一.实验环境 centos6.8 64位 所需安装包: ruby-2.3.4.tar.gz.rubygems-1.8.25.tgz.redmine-2.3.2.tar.gz 二.安装步骤 1.安装必要 ...

  7. C/C++语言简介之运算符

    比较特别的是,比特右移(>>)运算符可以是算术(左端补最高有效位)或是逻辑(左端补 0)位移.例如,将 11100011 右移 3 比特,算术右移后成为 11111100,逻辑右移则为 0 ...

  8. scp的简单记忆方法

    scp虽然只有把文见发送到远端和从远端copy文件俩功能,但是常常把俩功能的先写什么给计混了,所以我就用通俗的大白话给总结了下,十分容易记忆,这里给大家分享一下.scp 我们常用的两个功能: (1)把 ...

  9. C语言_来了解一下GCC编译器编译C可执行脚本的过程

    GCC简介    Linux系统下的gcc(GNU C Compiler)是GNU推出的功能强大.性能优越的多平台编译器,是GNU的代表作品之一.gcc是可以在多种硬体平台上编译出可执行程序的超级编译 ...

  10. DxPackNet 3.音频捕捉(录音)

    用DxpackNet捕捉音频其实很简单 1.初始化控件 IDxMicrophCapture microphone; private void Form1_Load(object sender, Eve ...