Hibernate学习(5)- session的get与load方法对比
1、共同点:get和load都是根据Id单条查询获取对象
org.hibernate.Session.get(Class<User> entityType, Serializable id)
不难看出,两者的调用方式一样
2、不同点:
这里先引入结论,再验证:
get方法
根据id直接查询对应的数据,首先在session缓存中查找,然后在二级缓存中查找,还没有就查询数据库,数据库中没有就返回null。
load方法
根据id直接查询对应的数据,首先查询session缓存,如果session中有对应对象,则直接返回该对象,若没有就创建代理对象,实际使用数据其他属性(非标识符)时才查询二级缓存和数据库。(如果只用到标识符,那么便不会去做后续的查询)
使用load方法,hibernate认为该id对应的对象(数据库记录)在数据库中是一定存在的,所以它可以放心的使用,它可以放心的使用代理来延迟加载该对象。在用到对象中的其他属性数据时才查询数据库,但是万一数据库中不存在该记录,那没办法,只能抛异常ObjectNotFoundException;
由于session中的缓存对于hibernate来说是个相当轻量的资源,所以在load时会先查一下session缓存看看该id对应的对象是否存在,不存在则创建代理。所以如果你知道该id在数据库中一定有对应记录存在就可以使用load方法来实现延迟加载。
下面做一个简单的测试对比:
使用get()来根据ID进行单条查询:
@Test
public void getTest() {
Session session = null;
try {
session = HibernateUtil.currentSession();
User user = session.get(User.class, 1L); System.out.println(user.getName());
}catch (Exception e) {
e.printStackTrace();
}finally {
HibernateUtil.closeSession();
}
}
断点调试一下:

现在看一下user对象

看一下控制台:(已经打印出查询语句)

接下来继续程序:

使用load()来根据ID进行单条查询:
@Test
public void loadTest() {
Session session = null;
try {
session = HibernateUtil.currentSession();
User user = session.load(User.class, 1L); System.out.println(user.getName());
}catch (Exception e) {
e.printStackTrace();
}finally {
HibernateUtil.closeSession();
}
}
断点调试一下:

看一下user

这里发现虽然load已经执行,但是user对象是一个User_$$_jvst7b1_0
我们打开handler 看看:(这里只保存了id,tartget还是为null,说明实际并未查询,而是先用代理类把id记录下来)

再看一下控制台:(并未执行select查询)

接下来继续运行

发现这时执行了select语句;
对比一下我们发现差别了;
再深入的测试,请自行验证;
PS:源码地址 https://github.com/JsonShare/hibernate-demo
PS:原文地址 http://www.cnblogs.com/JsonShare/p/8686887.html
Hibernate学习(5)- session的get与load方法对比的更多相关文章
- Hibernate中Session之get和load方法的真正区别
最近在学习SHH框架中的hibernate,对Session的get和load方法,有点混不清楚,不知道区别在哪,或者对它们的区别感触不深.所以百度了一下,结果问题来了.百度的结果和实际测试的结果出入 ...
- Hibernate学习---用Session实现CURD
我们使用Hibernate的目的是什么?对数据库进行操作,所有接下来我们就用Hibernate来进行CURD. 前边我们已经分析过了Configuration,SessionFactory和Sessi ...
- Hibernate学习(四)get和Load比较
package cn.lonecloud.test.crud; import org.hibernate.HibernateException; import org.hibernate.Sessio ...
- Hibernate中Session.get()方法和load()方法的详细比较
一.get方法和load方法的简易理解 (1)get()方法直接返回实体类,如果查不到数据则返回null.load()会返回一个实体代理对象(当前这个对象可以自动转化为实体对象),但当代理对象被调用 ...
- Hibernate的Session的get()和load()方法区别
hibernate中Session接口提供的get()和load()方法都是用来获取一个实体对象,在使用方式和查询性能上有一些区别. get Session接口提供了4个重载的get方法,分别通过“持 ...
- session get和load方法对比
get测试代码如下: public class Test { public static void main(String[] args) { // TODO Auto-generated metho ...
- jQuery 学习05——AJAX:定义、load()方法、get()/post()方法
AJAX = 异步 JavaScript 和 XML(Asynchronous JavaScript and XML). load() 方法:从服务器加载数据,并把返回的数据放入被选元素中. 语法:$ ...
- hibernate中session的get和load方法的区别和联系:
1. get:及时加载,调用到get方法时立即向数据库查询(在没有session缓存的请况). 2. load:默认使用懒加载,当用到数据的时候才向数据库查询(在没有session缓存的请况). 3. ...
- Hibernate学习三----------session详解
© 版权声明:本文为博主原创文章,转载请注明出处 如何获取session对象 1. openSession 2. getCurrentSession - 如果使用getCurrentSession需要 ...
随机推荐
- kettle_Spoon 修改共享DB连接带汉字引发的错误
win10下: kettle_Spoon 修改共享DB连接带汉字引发的错误: Unexpected problem reading shared objects from XML file : nul ...
- CSS3在线实战
作者声明:本博客中所写的文章,都是博主自学过程的笔记,参考了很多的学习资料,学习资料和笔记会注明出处,所有的内容都以交流学习为主.有不正确的地方,欢迎批评指正. 本节课视频网站:https://www ...
- Spark Shuffle之Hash Shuffle
源文件放在github,如有谬误之处,欢迎指正.原文链接https://github.com/jacksu/utils4s/blob/master/spark-knowledge/md/hash-sh ...
- QThread安全的结束线程
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QThread安全的结束线程 本文地址:http://techieliang.com/ ...
- perf的采样模式和统计模式
perf的采样模式和统计模式 统计模式和采样模式使用寄存器的方法不相同; 在统计模式下,每次调度之前设置寄存器,调度之后清理寄存器,留个下个进程使用;PMU寄存器的使用方法; 在采样模式下,每次 pm ...
- Java NIO:IO与NIO的区别 -阿里面试题
一.概念 NIO即New IO,这个库是在JDK1.4中才引入的.NIO和IO有相同的作用和目的,但实现方式不同,NIO主要用到的是块,所以NIO的效率要比IO高很多.在Java API中提供了两套N ...
- Linux 查看端口占用情况
转自:http://www.cnblogs.com/fabulousyoung/p/4071150.html 例子,查看80端口的占用情况: lsof -i:80 或者: netstat -apn ...
- Netty系列学习
Netty系列之Netty高性能之道 Netty系列之Netty线程模型 Netty系列之Netty 服务端创建 Netty系列之Netty编解码框架分析 Netty系列之Netty百万级推送服务设计 ...
- 阿里巴巴分布式数据库服务DRDS研发历程
淘宝TDDL研发历史和背景 分布式关系型数据库服务(Distribute Relational Database Service,简称DRDS)是一种水平拆分.可平滑扩缩容.读写分离的在线分布式数据库 ...
- js中关于array的常用方法
最近总结了一些关于array中的常用方法, 其中大部分的方法来自于<JavaScript框架设计>这本书, 如果有更好的方法,或者有关于string的别的常用的方法,希望大家不吝赐教. 第 ...