当前位置: 首页 > 编程笔记 >

Hibernate懒加载之标签上的lazy

冯枫
2023-03-14
本文向大家介绍Hibernate懒加载之 标签上的lazy,包括了Hibernate懒加载之 标签上的lazy的使用技巧和注意事项,需要的朋友参考一下

本文研究的主要是

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

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

总结

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

 类似资料:
  • 引入 Lazyload 是 Vue 指令,使用前需要对指令进行注册。 import { createApp } from 'vue'; import { Lazyload } from 'vant'; const app = createApp(); app.use(Lazyload); // 注册时可以配置额外的选项 app.use(Lazyload, { lazyComponent:

  • main.js import Vue from "vue"; import { Lazyload } from "feui"; Vue.use(Lazyload, { lazyComponent: true, //失败时显示 error: "https://i.loli.net/2018/01/29/5a6e858413275.png", //loading图 l

  • LazyLoad 懒加载 平台差异说明 App H5 微信小程序 支付宝小程序 百度小程序 头条小程序 QQ小程序 √ √ √ √ √ √ √ 基本使用 通过image参数传入图片的src路径即可 注意 由于uni-app认给了image组件的height为225px,同时也只uni-appimage组件的mode参数为widthFix时,image才会自动计算出一个高度值 覆盖默认的height

  • 在模板文件头部加载标签库: <taglib name="app\portal\taglib\Portal"/> 多个标签库用英文逗号隔开: <taglib name="app\portal\taglib\Portal,app\blog\taglib\Blog"/> 把标签库放在公共头部文件头部,这样就不用每个模板文件写一次标签加载代码了

  • 我有一个数据表的问题-懒加载。我认为问题是在IdiomasBean.java(TableBean.java),如果我把: 我得到了正确的数据表,但是<代码>按排序、筛选和不起作用。 我得到:java。lang.NullPointerException这里是堆栈跟踪: 下面是代码的其余部分: 指数xhtml diomasBean.java 懒散的数据模型。JAVA IdiomasBo.java 习语

  • 本文向大家介绍Android开发技巧之Fragment的懒加载,包括了Android开发技巧之Fragment的懒加载的使用技巧和注意事项,需要的朋友参考一下 前言 所谓懒加载,就是当fragment完全可见的时候我们再去加载数据,我们在做应用开发的时候,一个Activity里面可能会以viewpager(或其他容器)与多个Fragment来组合使用,而如果每个fragment都需要去加载数据,或