本文研究的主要是
在鹰手营子等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站设计、成都网站建设 网站设计制作按需求定制设计,公司网站建设,企业网站建设,高端网站设计,全网营销推广,外贸网站建设,鹰手营子网站建设费用合理。
lazy的概念:在真正使用某个对象的时候才去加载该对象。
Hibernate的lazy策略可以使用在:
1.
2.
3.标签上,可以取值:true/false/extra。
4.
下面我们来体会一下在class标签上的lazy:
User.java:
public class User {
/* ID */
private int id;
/* 用户名 */
private String name;
/* 用户密码 */
private String password;
/* 创建时间 */
private Date createTime;
//省略setter和getter方法
}User.hbm.xml:
<?xml version="1.0"?>
测试方法:
public void testLoad1(){
/*获取User,load本身就支持延迟加载(class标签的lazy对普通属性有效)*/
User user = (User) HibernateUtils.getSession().load(User.class, 1);
/*不会发出sql(因为ID你查询的时候就已经指定了,没必要再去查)*/
System.out.println("user.id=" + user.getId());
/*会发出sql,因为此时真正要获取属性了,所以会发出sql语句,并且发出的语句查出了所有属性,后面的属性就不会发出语句了*/
System.out.println("user.name=" + user.getName());
/*不会发出sql(在查name的时候已经查出来了)*/
System.out.println("user.password=" + user.getPassword());
/*不会发出sql(在查name的时候就已经查出来了)*/
System.out.println("user.createTime=" + user.getCreateTime());
}在User user = (User) HibernateUtils.getSession().load(User.class, 1);处打一个断点进行测试!
对象会出现在对象user-->handler--->target结点中,如图:

1.最开始target为null,当执行了user.getId()的时候,依然为null,因为ID在我们查询的时候就已经指定了,此时去查询就没什么意义。
2.执行user.getName()的时候就发出了一条语句,如图:

从图中,我们可以看出,查询ID的时候,并没有发出语句,这个我们刚才已经讲了,当我们查询name属性的时候,就发了一条语句,并且这条语句的功能是查询所有的属性。
3.当执行user.getPassword()和user.getCreateTime()的时候,就已经不会发出语句了,因为之前已经查询出了属性值。
注:
以上就是本文关于Hibernate懒加载之