Hibernate一级缓冲
Hibernate的一级缓冲
什么是缓冲
缓冲概念:
数据存在数据库中,数据库本身就是一个文件系统,使用流的方式操作文件,但是文件中有很多的内容,用流的操作得效率就低。
解决办法:
- 把数据存在内存中,不需要使用流的方式,可以直接读取内存中的数据;
- 把数据放到内存中,提升读取效率;
Hibernate缓冲
1、Hibernate帮我们提供了很多优化的方式,hibernate的缓冲就是优化的一种方式;
2、Hibernate缓冲特点:
a) 第一类:Hibernate一级缓冲;
- Hibernate的一级缓冲默认就是打开的。
- Hibernate的一级缓冲有使用的范围,是session的范围(从创建session到关闭session)。
- Hibernate的一级缓冲中,存储的数据必须是持久状态。
b) 第二类:Hibernate二级缓冲;
- 目前已经不使用了,使用了替代技术redis
- 二级缓冲默认不是打开的,需要配置才能用
- 二级缓冲的使用范围不是session,而是整个sessionfactory的范围。
验证一级缓冲的存在
a) 验证方式
- 首先根据id=1查询,返回对象(第一次查询需要查询数据库)。
- 其次再根据id=1查询,返回对象(第二次不需要查询数据库)。
|
//根据id=4查询 //执行了第一次查询后是否查询数据库(是否有查询语句的输出) User user1 = session.get(User.class, 4); System.out.println(user1); //再一次根据id=4查询 //执行第二次查询是否有第二次的查询语句输出 User user2 = session.get(User.class, 4); System.out.println(user2); |
|
Hibernate: select user0_.ID as ID1_0_0_, user0_.USERNAME as USERNAME2_0_0_, user0_.PASSWORD as PASSWORD3_0_0_, user0_.ADDRESS as ADDRESS4_0_0_ from USER user0_ where user0_.ID=? User [id=4, username=hello, password=111111, address=shanxi] User [id=4, username=hello, password=111111, address=shanxi] |
|
第一次执行get方法后,发送了sql语句查询数据库; 第二次执行get方法后,没有发送sql语句,查询了以及缓冲; |
一级缓冲的执行过程
1、首先是去一级缓冲中找数据,而第一次发现没有要的数据,这个时候才会去数据库查询数据(这个时候是持久态对象)。其次把user1的持久态对象放到一级缓冲中。
2、执行了第二次查询,首先查询的是一级缓冲内容,发现以后需要的数据,直接返回。
说明:第一次查询结束的时候,放到缓冲中的数据是零散的,如id=1,username=xxx,再一次查询的时候找到对应的id后重新组装成了新的对象。

Hibernate一级缓冲特性
说明:持久态会自动更新数据库。
|
//1根据id查询 User user = session.get(User.class, 4); user.setUsername("qqqqq");//这里不需要调用更新 transaction.commit(); |
|
Hibernate: select user0_.ID as ID1_0_0_, user0_.USERNAME as USERNAME2_0_0_, user0_.PASSWORD as PASSWORD3_0_0_, user0_.ADDRESS as ADDRESS4_0_0_ from USER user0_ where user0_.ID=? Hibernate: update USER set USERNAME=?, PASSWORD=?, ADDRESS=? where ID=? |
下面进行讲解执行过程(了解)
Hibernate一级缓冲执行特性

接着上图继续解释(重点):
1、最后提交事务;
2、提交事务的时候,做的事情是:
比较
比较一级缓冲的内容和对应的快照区内容是否相同,如果不相同,把一级缓冲内容更新到数据库里面,如果相同就不做更新。
Hibernate一级缓冲的更多相关文章
- 关于hibernate一级缓冲和二级缓冲
关于一级缓冲和二级缓冲的内容,在面试的时候被问起来了,回答的不是很满意,所以有专门找了些有关这方面的文章加以理解 出自:http://blog.csdn.net/zdp072/article/deta ...
- hibernate一级缓存
理解 Hibernate 一级缓存 Hibernate 一级缓存默认是打开,不需要任何的配置.实际上,你无法强制禁止它的使用. 如果你理解了一级缓存实际上和会话是关联的,就很容易理解一级缓存.总所周知 ...
- Hibernate一级缓存(基于查询分析)
首先我们应该弄清什么是hibernate缓存:hibernate缓存是指为了降低应用程序对物理数据源的访问频次,从而提高应用程序的运行性能的一种策略.我们要将这个跟计算机内存或者cpu的缓存区分开. ...
- hibernate一级缓存及对象的状态
hibernate中实体类对象的状态 在hibernate中实体类对象有三种状态 (1)瞬时态(临时态) 瞬时态:即我们自己创建一个对象,还没有保存到数据库就叫临时态,其实也可以说是对像没有id值,跟 ...
- Hibernate一级缓存(补)
------------------siwuxie095 什么是缓存 缓存是介于应用程序和永久性数据存储源(如:硬盘上的 ...
- Hibernate一级缓存测试分析
Hibernate 一级缓存测试分析 Hibernate的一级缓存就是指Session缓存,此Session非http的session会话技术,可以理解为JDBC的Connection,连接会话,Se ...
- 说说自己对hibernate一级、二级、查询、缓存的理解。
说说自己对hibernate一级.二级.查询.缓存的理解. 2016-03-14 21:36 421人阅读 评论(0) 收藏 举报 分类: web开发(19) 版权声明:本文为博主原创文章,未经博 ...
- 转载 hibernate一级缓存和二级缓存的区别
文章来源:http://blog.csdn.net/defonds/article/details/2308972 hibernate一级缓存和二级缓存的区别 缓存是介于应用程序和物理数据源之 ...
- Hibernate一级缓存和三种状态
Hibernate一级缓存又称session缓存,生命周期很短,跟session生命周期相同. 三种状态:1.transient(瞬时态):刚new出来的对象,既不在数据库中,也不在session管理 ...
随机推荐
- Linux下网络设置
1.临时IP配置 # ifconfig eth0 192.168.110.118 netmask 255.255.255.0 gateway 192.168.110.2 up # ...
- [易学易懂系列|rustlang语言|零基础|快速入门|(6)|变量绑定]
[易学易懂系列|rustlang语言|零基础|快速入门|(6)] 有意思的基础知识 变量绑定 我们现在回过头来看看,一些基础知识. 因为理解了前面的重要概念:所有权,借用,生命周期. 我们现在看基础知 ...
- 解决Eclipse中新建jsp文件ISO8859-1 编码问题
看了许多的贴说是在eclipse --> window --> Preferences --> General --> Content Types --> text--& ...
- 【UOJ#450】[集训队作业2018] 复读机
题目链接 题目描述 群里有\(k\)个不同的复读机.为了庆祝平安夜的到来,在接下来的\(n\)秒内,它们每秒钟都会选出一位优秀的复读机进行复读.非常滑稽的是,一个复读机只有总共复读了\(d\)的倍数次 ...
- HDU-4185-Oil Skimming(最大匹配)
链接: https://vjudge.net/problem/HDU-4185 题意: Thanks to a certain "green" resources company, ...
- 【NOIP2016提高A组模拟9.15】Math
题目 分析 因为\((-1)^2=1\), 所以我们只用看\(\sum_{j=1}^md(i·j)\)的值模2的值就可以了. 易证,一个数x,只有当x是完全平方数时,d(x)才为奇数,否则为偶数. 那 ...
- UVA 11090 : Going in Cycle!! 【spfa】
题目链接 题意及题解参见lrj训练指南 #include<bits/stdc++.h> using namespace std; const double INF=1e18; ; ; in ...
- Ubuntu ssh秘钥生成
一,秘钥生成传送 ssh-keygen 选项: -b:指定密钥长度: -e:读取openssh的私钥或者公钥文件: -C:添加注释: -f:指定用来保存密钥的文件名: -i:读取未加密的ssh-v2兼 ...
- Mysql 连接路径 url 参数解析
1.mysql - url 参数解析 url:jdbc:mysql://127.0.0.1:3306/user?useUnicode=true&characterEncoding=utf8 u ...
- codevs2833 奇怪的梦境 x
2833 奇怪的梦境 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description Aiden陷入了一个奇怪的梦境:他被困在一个小房子中 ...