Hibernate懒加载之& lt; class>标签上的懒惰

  

本文研究的主要是

  

<强>懒惰的概念:在真正使用某个对象的时候才去加载该对象。
  

  

Hibernate的懒惰策略可以使用在:
  

  

1。你们;class>标签上,可以取值:true/false。
  2。你们;property>标签上,可以取值:true/false,需要类增强工具,对字节码进行修改(这个没多大意义)。
  3灵活;set>和& lt; list>标签上,可以取值:true/false/额外。
  4灵活;many-to-one>和& lt; one-to-one>单端关联标签上,可以取值:false/代理/noproxy

  

下面我们来体会一下在课标签上的懒惰:
  

  

<强> User.java:

        公开课用户{   *//* ID   私人int id;/*用户名*/私人字符串名称;/*用户密码*/私人密码字符串;/*创建时间*/私人createTime日期;//省略setter和getter方法   }      

<强> User.hbm.xml:

        & lt; & # 63; xml version=" 1.0 " & # 63;比;   & lt; !DOCTYPE hibernate映射公共   ”——//Hibernate/Hibernate映射3.0 DTD//EN "   “http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd”在   & lt; !——包表示实体类的包名——比;   & lt; hibernate映射包=癱om.lixue.bean”比;   & lt; !——类结点的名字表示实体的类名,表表示实体映射到数据库表的中名称——比;   & lt;类名="用户"表=皌_user”懒=" true "比;   & lt; id name=" id "比;   & lt;生成器类=氨镜亍?比;   & lt;/id>      & lt; !——映射普通属性——比;   & lt;属性名="名称"/比;   & lt;属性名="密码"/比;   & lt;属性名=" createTime "/比;      & lt;/class>   & lt;/hibernate-mapping>之前      

<强>测试方法:

        公共空间testLoad1 () {/*获取用户负载本身就支持延迟加载(类标签的懒惰对普通属性有效)*/用户用户=(用户)HibernateUtils.getSession () .load(用户。类,1);/*不会发出sql(因为ID你查询的时候就已经指定了,没必要再去查)*/System.out.println(“用户。id=" + user.getId ());/*会发出sql,因为此时真正要获取属性了,所以会发出sql语句,并且发出的语句查出了所有属性,后面的属性就不会发出语句了*/System.out.println (" user.name=" + user.getName ());/*不会发出sql(在查名字的时候已经查出来了)*/System.out.println(“用户。密码=" + user.getPassword ());/*不会发出sql(在查名字的时候就已经查出来了)*/System.out.println(“用户。createTime=" + user.getCreateTime ());   }      

在<代码>用户用户=(用户)HibernateUtils.getSession () .load(用户。类,1),处打一个断点进行测试!

  

对象会出现在对象用户——在处理程序——→目标结点中,如图:

  

 Hibernate懒加载之& lt; class>标签上的懒惰

  

1。最开始目标为零,当执行了<代码> user.getId() 的时候,依然为null,因为ID在我们查询的时候就已经指定了,此时去查询就没什么意义。
  

  

2。执行<代码> user.getName() 的时候就发出了一条语句,如图:

  

 Hibernate懒加载之& lt; class>标签上的懒惰

  

从图中,我们可以看的出,查询ID的时候,并没有发出语句,这个我们刚才已经讲了,当我们查询名称属性的时候,就发了一条语句,并且这条语句的功能是查询所有的属性。
  

  

3。当执行<代码> user.getPassword() 和<代码> user.getCreateTime() 的时候,就已经不会发出语句了,因为之前已经查询出了属性值。
  

  

注:& lt; class>标签上的懒惰,只支持普通属性,不会影响类中集合的加载。

  

总结

  

以上就是本文关于Hibernate懒加载之& lt; class>标签上的懒惰的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Hibernate懒加载之& lt; class>标签上的懒惰