时间:2021-05-20
本文研究的主要是
lazy的概念:在真正使用某个对象的时候才去加载该对象。
Hibernate的lazy策略可以使用在:
1.<class>标签上,可以取值:true/false。
2.<property>标签上,可以取值:true/false,需要类增强工具,对字节码进行修改(这个没多大意义)。
3.<set>和<list>标签上,可以取值:true/false/extra。
4.<many-to-one>和<one-to-one>单端关联标签上,可以取值:false/proxy/noproxy
下面我们来体会一下在class标签上的lazy:
User.java:
public class User { private int id; private String name; private String password; private Date createTime; //省略setter和getter方法}User.hbm.xml:
<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> <!-- package表示实体类的包名 --> <hibernate-mapping package="com.lixue.bean"> <!-- class结点的name表示实体的类名,table表示实体映射到数据库中table的名称 --> <class name="User" table="t_user" lazy="true"> <id name="id"> <generator class="native" /> </id> <!-- 映射普通属性 --> <property name="name" /> <property name="password" /> <property name="createTime" /> </class> </hibernate-mapping>测试方法:
public void testLoad1(){ User user = (User) HibernateUtils.getSession().load(User.class, 1); System.out.println("user.id=" + user.getId()); System.out.println("user.name=" + user.getName()); System.out.println("user.password=" + user.getPassword()); 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()的时候,就已经不会发出语句了,因为之前已经查询出了属性值。
注:<class>标签上的lazy,只支持普通属性,不会影响类中集合的加载。
以上就是本文关于Hibernate懒加载之<class>标签上的lazy的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文总结了我在学习hibernate的过程中,解决hibernate懒加载问题的四种方式。所谓懒加载(lazy)就是延时加载,延迟加载。什么时候用懒加载呢,我只
浅谈hibernate中懒加载禁用操作懒加载的概念:懒加载就是hibernate中的延迟加载,在hibernate中的一对多,多对多关系中通过对象导航来查询对象
所谓延时加载就是懒加载(lazy),延迟加载。什么时候用懒加载呢,我只能回答要用懒加载的时候就用懒加载。至于为什么要用懒加载呢,就是当我们要访问的数据量过大时,
我们平时常用的是<ul><li>标签,不过dd、dt标签也蛮不错,特别是发布程序的时候功能模块列表什么的可以使用它来排版。</dl><dt></dt><dd><
懒加载---就是我们在spring容器启动的是先不把所有的bean都加载到spring的容器中去,而是在当需要用的时候,才把这个对象实例化到容器中。@Lazy在