Hibernate懒加载之<class>标签上的lazy

网友投稿 241 2023-02-18


Hibernate懒加载之<class>标签上的lazy

本文研究的主要是

lazy的概念:在真正使用某个对象的时候才去加载该对象。

Hibernate的lazy策略可以使用在:

1.标签上,可以取值:true/false。

2.标签上,可以取值:true/false,需要类增强工具,对字节码进行修改(这个没多大意义)。

3.标签上,可以取值:true/false/extra。

4.单端关联标签上,可以取值:false/proxy/noproxy

下面我们来体会一下在class标签上的lazy:

User.jhttp://ava:

public class User {

/* ID */

private int id;

/* 用户名 */

private String name;

/* 用户密码 */

private String password;

/* 创建时间 */

private Date createTime;

//省略setter和getter方法

}

User.hbm.xml:

"-//Hibernate/Hibernate Mapping DTD 3.0//EN"

"http://hibernate.sourceforge.net/hibernate-HJwqmmapping-3.0.dtd">

测试方法:

public void testLoad1(){

/*获取User,load本身就支持延迟加载(class标签的lazy对普通属性有效)*/

User user = (User) HibernateUtils.getSession().load(User.class, 1);

/*不会发出sql(因为ID你查询的时候就已经指定了,没必要再去查)http://*/

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());http://

/*不会发出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()的时候,就已经不会发出语句了,因为之前已经查询出了属性值。

注:标签上的lazy,只支持普通属性,不会影响类中集合的加载。

总结

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


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:接口测试 上传文件(接口测试上传图片)
下一篇:ES6 迭代器(Iterator)和 for.of循环使用方法学习(总结)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~