缓存:提高效率

硬件的 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. hiveql笔记(一)

    1.创建表 create table if not exists mydb.employees{ name String COMMENT 'Employee name', salary FLOAT C ...

  2. shell编程值之正则表达式与字符截取(6)

    正则表达式与通配符 正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配.grep.awk.sed等命令可以支持正则表达式 通配符用来匹配符合条件的文件名,通配符是完全匹配.ls.find.cp ...

  3. 金融&业务常识积累

    前言 在项目中遇到很多名词,不太明白其含义.这些名词都是和金融领域紧密相关并且与项目的业务有着直接的联系.因此,决定通过搜集资料和归纳总结,对经后的工作产生一定的帮助. 常见的金融知识 PDL: Pa ...

  4. nodejs开启服务器端口

    var http = require('http'); var server = http.createServer(function(req, res) { res.writeHead(200, { ...

  5. php正则判断字符串是否含有中文

    <?php $str = '若你安好便是晴天'; if (preg_match('/^[\x{4e00}-\x{9fa5}]+$/u', $str)>0) { echo '全是中文'; } ...

  6. egametang框架服务端运行流程

    et框架的构建块主要由entity和componet组成,类似unity的组件.一个Entity可以挂载多个不同Component.Entity和Component的共同基类Disposer用于提供对 ...

  7. maven配置全局的jdk和配置局部的jdk

    配置全局的jdk需要修改maven的setting.xml文件 <profile> <id>jdk17</id> <activation> <ac ...

  8. CEF小白人系列1-认识CEF

    手头上有个项目需要做浏览器的相关功能,评估了几个嵌入式方案最后选定CEF作为开发基础. 在入坑新技术的时候第一选择是去官网学习,这是一个非常好的习惯. CEF官网(请科学上网) https://bit ...

  9. Android查缺补漏(IPC篇)-- 进程间通讯基础知识热身

    本文作者:CodingBlock 文章链接:http://www.cnblogs.com/codingblock/p/8479282.html 在Android中进程间通信是比较难的一部分,同时又非常 ...

  10. hdu4143 A Simple Problem

    A Simple Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others) ...