Hibernate关联映射之延迟加载
什么事延迟加载?
当真正需要数据时才执行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关联映射之延迟加载的更多相关文章
- 第六章 Hibernate关联映射
第六章 hibernate关联映射一.本章知识点分为2部分:1.关联关系:单向多对一关联关系,双向一对多关联关系(含一对多关联关系),多对多关联关系2.延迟加载:类级别加载策略,一对多加载策略,多对一 ...
- 【学习笔记】Hibernate关联映射(Y2-1-6)
Hibernate关联映射 关联映射就是将关联关系映射到数据库里,在对象模型中就是一个或多个引用. 1.单向多对一关联 准备数据库 部门表和员工表 其中部门表有两列 部门编号和名称 员工表有三列 员工 ...
- 第三章Hibernate关联映射
第三章Hibernate关联映射 一.关联关系 类与类之间最普通的关系就是关联关系,而且关联是有方向的. 以部门和员工为列,一个部门下有多个员工,而一个员工只能属于一个部门,从员工到部门就是多对一关联 ...
- Hibernate关联映射关系
Hibernate关联映射关系 一.双向一对多关联映射关系:当类与类之间建立了关联,就可以方便的从一个对象导航到另一个或另一组与它关联的对象(一对多双向关联和多对一双向关联是完全一样的) 1.1创建实 ...
- Oracle primary,unique,foreign 区别,Hibernate 关联映射
Oracle primary,unique,foreign 区别 转:http://www.cnblogs.com/henw/archive/2012/08/15/2639510.html NOT N ...
- (转)Hibernate关联映射——对象的三种关系
http://blog.csdn.net/yerenyuan_pku/article/details/70148618 Hibernate关联映射——对象的三种关系 Hibernate框架基于ORM设 ...
- (转)Hibernate关联映射——一对多(多对一)
http://blog.csdn.net/yerenyuan_pku/article/details/70152173 Hibernate关联映射——一对多(多对一) 我们以客户(Customer)与 ...
- Hibernate关联映射(一对多/多对多)
版权声明:翀版 https://blog.csdn.net/biggerchong/article/details/843401053. Hibernate关联映射上接Hibernate持久化类:h ...
- Java三大框架之——Hibernate关联映射与级联操作
什么是Hibernate中的关联映射? 简单来说Hibernate是ORM映射的持久层框架,全称是(Object Relational Mapping),即对象关系映射. 它将数据库中的表映射成对应的 ...
随机推荐
- 使用 JavaScript 实现基本队列、优先队列和循环队列
1.基本队列的实现 基本队列的方法中,包含了 ①向队列(尾部)中添加元素(enqueue).②(从队列头部)删除元素(dequeue).③查看队列头部的元素(front).④查看队列是否为空(isEm ...
- 利用Sonar规则结合WebStorm进行Code Inspect
1.目的 在编写代码时会受到公司Sonar规则的限制,不想在编写完成后再对代码进行Inspect,回头再来一个个修正,费时费力. 那么,下面将通过优秀的WebStorm开发工具自身的CodeInspe ...
- phpcmsv9的评论分表策略
comment_table表 comment表 comment_data_x表 我们留意到: comment_table表统计每个comment_data_x表里面有多少条记录, comment表只是 ...
- dubbo 试用全过程
概述: dubbo服务容器是一个standalone的启动程序,因为后台服务不需要Tomcat或JBoss等Web容器的功能,如果硬要用Web容器去加载服务提供方,增加复杂性,也浪费资源. 服务容器只 ...
- iOS:搭建本地的服务器
一.介绍 作为一个专业的程序员,不管你是前端还是移动端或者是后台,能够自己试着搭建一个本地的服务器还是很有必要的,有的时候,我们可以自己测试一些数据,很方便开发.其实,mac是自带有本地的服务器的,用 ...
- 打开VS调试不进入开发的网站直接跳转到主页
重启了熟悉有卸载IE11的,搞了好几个小时 最后把电脑管家里的锁定主页打开就好了! 很久之后 我再锁上 也没有这问题了
- cocoa pods报错The dependency `Reveal-iOS-SDK` is not used in any concrete target.
Podfile错误写法,会报错The dependency `Reveal-iOS-SDK` is not used in any concrete target. platform:ios,'7.0 ...
- c++网络编程错误(WSAStartup)
在使用CodeBlocks编译C++程序时, 编译程序的时候出现如下错误: undefined reference to `inet_addr@4'undefined reference to `ge ...
- Centos 安装 Java
建立文件夹 进入/usr/文件夹下,建立一个文件,我这里是java文件夹,将jdk-8u45-linux-x64.tar.gz复制到/usr/java文件夹下 解压文件 解压指令为:tar -zxvf ...
- Scrum4.0+5.0
1.题目: 1.准备看板. 形式参考图4. 2.任务认领,并把认领人标注在看板上的任务标签上. 先由个人主动领任务,PM根据具体情况进行任务的平衡. 然后每个人都着手实现自己的任务. 3.为了团队合作 ...