什么事延迟加载?

     当真正需要数据时才执行SQL语句,其本意是减少不必要的性能开销!

之前提到过一个延迟加载的例子:

  load();结果集不能为空

  当真正去打印对象属性时,sql语句才执行!

  

hibernate的lazy属性:

  lazy属性

    类级别:true(默认)/false

    一对多关联级别:true(默认)/extra(加强延迟加载)/false

    多对一关联级别:proxy(默认)/no-proxy(无代理加载)/false

  下面用代码来区别他们:

  类级别: 

    这里使用load()属性,get()属性在操作类级别时不具备延迟加载特性 

 /**
* 测试延迟加载
*/
public void get(){
session=factory.openSession();
session.beginTransaction();
//类加载
Student stu=(Student)session.load(Student.class,2);
//测试
System.out.println("--输出了--");
//输出姓名
System.out.println(stu.getName());
session.close();
} /**
*--输出了--
*Hibernate:
* select
* student0_.stuno as stuno1_0_,
* student0_.name as name1_0_,
* student0_.gradeid as gradeid1_0_
* from
* student student0_
* where
* student0_.stuno=?
*小芳
*
**/

  可以看到延迟加载了!

  现在我修改class lazy属性为false;

/**
*<class name="Student" table="student" dynamic-update="true" *lazy="false">
**/
/**get()方法里面代码不变**/
/**
*Hibernate:
* select
* student0_.stuno as stuno1_0_,
* student0_.name as name1_0_,
* student0_.gradeid as gradeid1_0_
* from
* student student0_
* where
* student0_.stuno=?
*--输出了--
*小芳
*
**/

一对多关联级别:

  现在我们将类级别去掉,一对多关联获取一遍,使用session.get()方法测试

   

 /**
* 一对多延迟加载
*/
public void getByone2more(){
session=factory.openSession();
session.beginTransaction();
//类加载
Grade grade=(Grade)session.load(Grade.class,2);
Set<Student> stu=grade.getStu(); //测试
System.out.println("--输出了--");
//输出集合大小
System.out.println(stu.size());
//输出姓名
for(Student st:stu){
System.out.println(st.getName()); }
session.close(); }

默认配置下:

  跟前面的一样,先查询年级。打印”输出了“;

  先执行了get()发起的select语句!

更改lazy 属性为 extra:

输出结果:

  

  注释掉打印学生那句:

  会发现查询总记录时,select count(stuno),我们在将extra改为true,这时候查询语句select stuno,name......

  总结:

    有的时候我们只需要知道集合中元素的个数,或者集合是否为空,并不需要知道都有哪些数据时,可以使用extra提高效率。

可见加强延迟加载采用了特定的语句查询必要的语句

--多对一

  默认的lazy属性值为proxy;

  设置为proxy时,延迟加载,同上,当查询 id时,不会执行sql去查询!

Hibernate关联映射之延迟加载的更多相关文章

  1. 第六章 Hibernate关联映射

    第六章 hibernate关联映射一.本章知识点分为2部分:1.关联关系:单向多对一关联关系,双向一对多关联关系(含一对多关联关系),多对多关联关系2.延迟加载:类级别加载策略,一对多加载策略,多对一 ...

  2. 【学习笔记】Hibernate关联映射(Y2-1-6)

    Hibernate关联映射 关联映射就是将关联关系映射到数据库里,在对象模型中就是一个或多个引用. 1.单向多对一关联 准备数据库 部门表和员工表 其中部门表有两列 部门编号和名称 员工表有三列 员工 ...

  3. 第三章Hibernate关联映射

    第三章Hibernate关联映射 一.关联关系 类与类之间最普通的关系就是关联关系,而且关联是有方向的. 以部门和员工为列,一个部门下有多个员工,而一个员工只能属于一个部门,从员工到部门就是多对一关联 ...

  4. Hibernate关联映射关系

    Hibernate关联映射关系 一.双向一对多关联映射关系:当类与类之间建立了关联,就可以方便的从一个对象导航到另一个或另一组与它关联的对象(一对多双向关联和多对一双向关联是完全一样的) 1.1创建实 ...

  5. Oracle primary,unique,foreign 区别,Hibernate 关联映射

    Oracle primary,unique,foreign 区别 转:http://www.cnblogs.com/henw/archive/2012/08/15/2639510.html NOT N ...

  6. (转)Hibernate关联映射——对象的三种关系

    http://blog.csdn.net/yerenyuan_pku/article/details/70148618 Hibernate关联映射——对象的三种关系 Hibernate框架基于ORM设 ...

  7. (转)Hibernate关联映射——一对多(多对一)

    http://blog.csdn.net/yerenyuan_pku/article/details/70152173 Hibernate关联映射——一对多(多对一) 我们以客户(Customer)与 ...

  8. Hibernate关联映射(一对多/多对多)

    版权声明:翀版 https://blog.csdn.net/biggerchong/article/details/843401053.  Hibernate关联映射上接Hibernate持久化类:h ...

  9. Java三大框架之——Hibernate关联映射与级联操作

    什么是Hibernate中的关联映射? 简单来说Hibernate是ORM映射的持久层框架,全称是(Object Relational Mapping),即对象关系映射. 它将数据库中的表映射成对应的 ...

随机推荐

  1. http://highscalability.com/blog/2015/5/18/how-mysql-is-able-to-scale-to-200-million-qps-mysql-cluster.html

    http://highscalability.com/blog/2015/5/18/how-mysql-is-able-to-scale-to-200-million-qps-mysql-cluste ...

  2. PHP环境下Memcache的使用方法

    原文:PHP环境下Memcache的使用方法 原文地址:http://www.2cto.com/kf/201503/384967.html 如今互联网崛起的时代,各大网站都面临着一个大数据流问题,怎么 ...

  3. java 虚拟机--新生代与老年代GC

    Heap: JVM只有一个为所有线程所共享的堆,所有的类实例和数组都是在堆中创建的. Method area: JVM只有一个为所有的线程所共享的方法区.它存储类结构,例如运行时常量池,成员和方法数据 ...

  4. CSS之cssText

    更改元素样式 <div style="width:100px;height:100px;text-align:center;line-height:100px;"> T ...

  5. http://bbs.tianya.cn/post-stocks-1665898-1.shtml

    http://bbs.tianya.cn/post-stocks-1295707-1.shtml 写过交易计划吗?有没有提前关注过某些板块或者某些股票呢?自选股里边有多少只股票?你平时复盘都是什么习惯 ...

  6. [PCL]FPFH描述子

    fpfh_est.setSearchSurface(data); 如果没有设置SearchSurface,使用input数据集作为查找的表面 // If no search surface has b ...

  7. dubbo源码分析3-service bean的创建与发布

    dubbo源码分析1-reference bean创建 dubbo源码分析2-reference bean发起服务方法调用 dubbo源码分析3-service bean的创建与发布 dubbo源码分 ...

  8. MVC+EF 自定义唯一性验证

    最近悟出来一个道理,在这儿分享给大家:学历代表你的过去,能力代表你的现在,学习代表你的将来. 十年河东十年河西,莫欺少年穷 学无止境,精益求精    本篇提供二种方法,希望大家喜欢 1.自定义验证属性 ...

  9. NSFileManager 遍历目录

    NSFileManager *fileManager = [NSFileManager defaultManager]; NSString *documentPath = [NSHomeDirecto ...

  10. discuz 二次开发

    discuz 框架也算是比较流行的社区论坛框架,discuz 的基础架构采用世界上最流行的 web 编程组合 PHP + MySQL 实现,是一个经过完善设计,适用于各种服务器环境的高效论坛系统解决方 ...