博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hibernate延迟加载
阅读量:7077 次
发布时间:2019-06-28

本文共 1629 字,大约阅读时间需要 5 分钟。

延迟加载!

什么是延迟加载?

延迟加载时一种优化,避免无所谓的性能开销,只有在真正需要使用数据的时候才会进行数据加载操作。

延迟加载机制是为了避免一些无谓的性能开销而提出来的,所谓延迟加载就是当在真正需要数据的时候,才真正执行数据加载操作。在Hibernate中提供了 对实体对象的延迟加载以及对集合的延迟加载,另外在Hibernate3中还提供了对属性的延迟加载。

延迟加载的优势以及讲解:

1、延迟加载的过程中先根据构造方法以及参数建立一个代理对象,调用到一定属性的时候执行里面的getXXX(),当执行到的getXXX()无法查询到值的时候,执行数据加载操作,也就是访问数据库,给代理对象对应属性赋值。如果没有使用延迟加载,代理对象这里会直接加载数据库,就是生成的代理对象为“最终代理对象”。

2、当加载的对象长时间不被使用的时候,该对象会被垃圾回收机制所回收

延迟加载策略原理图片:

应用程序----->代理:装载对象

代理----->数据库:调用代理方法

代理----->垃圾回收:长时间不调用

 

延迟加载优势就是节省系统内存空间。

 

使用延迟加载

1、采用延迟加载策略封的方法实现延迟加载的功能。例如load方法

Student s=session.load(Student.class,1);//1System.out.println("name:"+s.getName());//2

   在1,2分别断点可以见到延迟加载的现象

2、通过映射文件中的属性实现延迟加载

2.1设置映射文件中的<property>元素中的lazy属性实现延迟加载

2.2设置<class>标签的lazy属性实现延迟加载

2.3集合类型的延迟加载

 集合类型的延迟加载:

在Hibernate的延迟加载机制中,针对集合类型的应用,意义是最为重大的,因为这有可能 使性能得到大幅度的提高,为此Hibernate进行了大量的努力,其中包括对JDK Collection的独立实现,我们在一对多关联中,定义的用来容纳关联对象的Set集合,并不是java.util.Set类型或其子类型,而是 net.sf.hibernate.collection.Set类型,通过使用自定义集合类的实现,Hibernate实现了集合类型的延迟加载。为了 对集合类型使用延迟加载,我们必须如下配置我们的实体类的关于关联的部分:

…..
通过将
元素的lazy属性设置为true来开启集合类型的延迟加载特性。我们看下面的代码:User user=(User)session.load(User.class,”1”);Collection addset=user.getAddresses(); (1)Iterator it=addset.iterator(); (2)while(it.hasNext()){Address address=(Address)it.next();System.out.println(address.getAddress());}

 

关于延迟加载的源码分析:

我没有深入,别人的链接:http://superleo.iteye.com/blog/243322/

 

延迟加载时代理模式的一种应用。

 

转载地址:http://vkcml.baihongyu.com/

你可能感兴趣的文章
iOS 多线程 NSOperation、NSOperationQueue
查看>>
delphi执行查询语句时的进度条怎么做
查看>>
CF 335A(Banana-贪心-priority_queue是大根堆)
查看>>
python的memcache使用如果对key设置了一个int型
查看>>
173. Binary Search Tree Iterator
查看>>
[python基础知识]python内置函数map/reduce/filter
查看>>
HDU2089 ------不要62(数位dp)
查看>>
hdu4756 Install Air Conditioning(MST + 树形DP)
查看>>
Android爬坑之旅之FileProvider(Failed to find configured root that contains)
查看>>
网络安全与机器学习(一):网络安全中的机器学习算法
查看>>
linux 用户和用户组命令
查看>>
WordPress 主题开发:从入门到精通(必读)
查看>>
Vue入坑记
查看>>
SpringBoot使用AOP+注解实现简单的权限验证
查看>>
Android 8.0 系统和API的变化
查看>>
js 时间对象的常规操作
查看>>
Centos 7 Yum方式安装Mongdb 3.4
查看>>
遇见大数据可视化 : 【云图】让数据可见
查看>>
Mac Docker 创建第一个Django 应用,Part 1
查看>>
zendAPI 的 CMake 参数详解
查看>>