概括Hibernate属性延迟加载

Hibernate有很多值得学习的地方,这里我们主要介绍Hibernate属性延迟加载,包括介绍CGLIB是Apache的一个开源工程等方面。

创新互联公司坚持“要么做到,要么别承诺”的工作理念,服务领域包括:成都网站设计、网站建设、企业官网、英文网站、手机端网站、网站推广等服务,满足客户于互联网时代的江津网站设计、移动媒体设计的需求,帮助企业找到有效的互联网解决方案。努力成为您成熟可靠的网络建设合作伙伴!

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

Hibernate属性延迟加载

在Hibernate3中,引入了一种新的特性——Hibernate属性延迟加载,这个机制又为获取高性能查询提供了有力的工具。在前面我们讲大数据对象读取时,在User对象中有一个resume字段,该字段是一个 java.sql.Clob类型,包含了用户的简历信息,当我们加载该对象时,我们不得不每一次都要加载这个字段,而不论我们是否真的需要它,而且这种大数据对象的读取本身会带来很大的性能开销。在Hibernate2中,我们只有通过我们前面讲过的面性能的粒度细分,来分解User类,来解决这个问题(请参照那一节的论述),但是在Hibernate3中,我们可以通过Hibernate属性延迟加载机制,来使我们获得只有当我们真正需要操作这个字段时,才去读取这个字段数据的能力,为此我们必须如下配置我们的实体类:

 
 
 
  1.  name=”com.neusoft.entity.User” table=”user”
  2. ……
  3.  name=”resume”type=”java.sql.Clob”column=”resume” lazy=’true’/>

通过对元素的lazy属性设置true来开启Hibernate属性延迟加载,在Hibernate3中为了实现属性的延迟加载,使用了类增强器来对实体类的Class文件进行强化处理,通过增强器的增强,将CGLIB的回调机制逻辑,加入实体类,这里我们可以看出属性的延迟加载,还是通过CGLIB来实现的。CGLIB是Apache的一个开源工程,这个类库可以操纵java类的字节码,根据字节码来动态构造符合要求的类对象。根据上面的配置我们运行下面的代码:

 
 
 
  1. String sql=”from User user where user.name=’zx’ ”;
  2. Query query=session.createQuery(sql)
  3. List list=query.list();
  4. for(int i=0;i();i++){
  5. User user=(User)list.get(i);
  6. System.out.println(user.getName());
  7. System.out.println(user.getResume());
  8. }

当执行到第二行时,会生成类似如下的SQL语句:

 
 
 
  1. Select id,age,name from user where name=’zx’;

这时Hibernate会检索User实体中所有非延迟加载属性对应的字段数据,当执行到第七行时,会生成类似如下的SQL语句:

 
 
 
  1. Select resume from user where id=’1’;

这时会发起对resume字段数据真正的读取操作

本文标题:概括Hibernate属性延迟加载
链接地址:http://www.shufengxianlan.com/qtweb/news12/256912.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联