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 ...
随机推荐
- ABP官方文档翻译 3.7 领域事件(事件总线)
领域事件(事件总线) 事件总线 注入IEventBus 获取默认实例 定义事件 预定义事件 处理异常 实体更改 触发事件 处理事件 处理基础事件 处理者异常 处理多个事件 注册处理者 自动 手动 取消 ...
- Eclipse去掉对JS文件的Validation
Eclipse不去掉对JS文件的Validation,编译时会花费很长的时间,有时甚至会导致编译失败. 可以按照如下的方式去掉对JS文件的Validation. 一.window->prefer ...
- EasyUI实现更换主题能过样式添加id实现
EasyUI实现更换主题能过样式添加id实现,将原来的样式值添加到cookie中保存,这样下次浏览器访问时,就是我们原来选择的样式! 首先将easyui的样式文件加入一个ID,这里命名为easyuiT ...
- 【模板小程序】求第n个质数
#include <iostream> #include <vector> using namespace std; int nth_prime(int n) { vector ...
- python语言基础汇总
注释 代码中添加注释是一个良好的编程习惯,python语言的注释才用井号'#'作为注释开头的,可以是任意内容,解释器会忽略掉这部分内容.其他每一行都是语句,当语句以冒号':'结尾时,缩进的语句视为代码 ...
- selenium+requests访问微博
import requests from selenium import webdriver from selenium.webdriver.support import expected_condi ...
- Install Centrifugo and quick start
Install Centrifugo and quick start Go is a perfect language - it gives developers an opportunity to ...
- 使用Nginx实现灰度发布
灰度发布是指在黑与白之间,能够平滑过渡的一种发布方式.AB test就是一种灰度发布方式,让一部分用户继续用A,一部分用户开始用B,如果用户对B没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到B ...
- 手把手教你树莓派实现简易室内监控系统(C)之BOA服务器的搭建
本篇主要讲利用BOA服务器做室内监控系统的服务器端. 古人云:万事开头靠百度,实在不行就Google.小编也是一步一步的,亲自搭建成功,不能说是万全之策,仅仅是给大家一个参考就满足了. 第一步: 1. ...
- Windows系统上Redis的安装
Redis 安装 Window 下安装 下载地址:https://github.com/MSOpenTech/redis/releases. Redis 支持 32 位和 64 位.这个需要根据你系统 ...