018 关联映射文件中<class>标签中的lazy(懒加载)属性

Lazy(懒加载):

只有在正真使用该对象时,才会创建这个对象

Hibernate中的lazy(懒加载):

只有我们在正真使用时,它才会发出SQL语句,给我们去查询,如果不使用对象则不会发SQL语句进行查询。

Hibernate中lazy(懒加载)的实现:

采用了第三方组件的库,这个库叫cglib.jar(比较流行),这个库对我们的类生成代理类(JDK的动态代理,只能对JDK中实现了接口的类进行代理),代理可以控制源对象并且可以对源对象的功能进行增强,而cglib.jar可以对类进行代理(cglib对我们的类进行继承,生成一个子类,这个子类作为代理类返回给你)。

只有你正真代理类的方法,则会查看你有没有加载目标对象,如果没有则会加载目标对象。

Lazy(懒加载)在hibernate何处使用:

1、<class>标签上,可以取值:true/false,(默认值为:true)

2、<property>标签上,可以取值:true/false,需要类增强工具

3、<set>、<list>集合上,可以取值:true/false/extra,(默认值为:true)

4、<one-to-one>、<many-to-one>单端关联上,可以取值:false/proxy/noproxy

Session.load()方法支持lazy,而session.get()不支持lazy;

 

Hibernate的lazy生效期:

生效期和session一样的,session关闭,lazy失效

hibernate支持lazy策略只有在session打开状态下有效。

 

<class>标签上,可以取值:true/false,(默认值为:true):

实例一:设置<class标签上的lazy=true(默认)

session = HibernateUtils.getSession();

tx = session.beginTransaction();

//执行此语并不会发SQL语句,只是返回一个代理类

Group group =(Group)session.load(Group.class, 1);

//不会发SQL语句,使用上面输入的1值

System.out.println("group.id=" + group.getId());

//此处使用对象,会发出SQL语句

System.out.println("group.name=" + group.getName());

//提交事务

tx.commit();

实例二:设置<class标签上的lazy=true(默认)

Session session = null;

Transaction tx = null;

Group group = null;

try {

session = HibernateUtils.getSession();

tx = session.beginTransaction();

group =(Group)session.load(Group.class, 1);

System.out.println("group.name=" + group.getName());

//提交事务

tx.commit();

} catch (Exception e) {

e.printStackTrace();

tx.rollback();

} finally {

HibernateUtils.closeSession(session);

}

//不能正确输出,抛出了LazyInitalizationException异常,因为session已经关闭

//hibernate支持lazy策略只有在session打开状态下有效。

System.out.println("group.name=" + group.getName());

    注:<class>标签上的lazy只影响到对象的普通属性。对其它(集合)属性不影响

时间: 2024-08-08 07:00:56

018 关联映射文件中<class>标签中的lazy(懒加载)属性的相关文章

020 &lt;one-to-one&gt;、&lt;many-to-one&gt;单端关联上的lazy(懒加载)属性

<one-to-one>.<many-to-one>单端关联上,可以取值:false/proxy/noproxy(false/代理/不代理) 实例一:所有lazy属性默认(支持懒加载) session = HibernateUtils.getSession(); tx = session.beginTransaction(); //不发出SQL语句,支持lazy(懒加载) User user = (User) session.load(User.class, 3); //发出SQL

019 关联映射文件中集合标签中的lazy(懒加载)属性

<set>.<list>集合上,可以取值:true/false/extra,(默认值为:true) 实例一:(集合上的lazy=true(默认))class默认lazy=true(默认) session = HibernateUtils.getSession(); tx = session.beginTransaction(); //不会发出SQL语句 Classes classes = (Classes)session.load(Classes.class, 1); //发出SQ

系统管理模块_部门管理_设计(映射)本模块中的所有实体并总结设计实体的技巧_懒加载异常问题_树状结构

系统管理模块_部门管理_设计本模块中的所有实体并总结设计实体的技巧 设计实体流程 1,有几个实体? 一般是一组增删改查对应一个实体. 2,实体之间有什么关系? 一般是页面引用了其他的实体时,就表示与这个实体有关联关系. 3,每个实体中都有什么属性? 1,主键.推荐使用代理主键 2,关联关系属性.在类图中,关联关系是一条线,有两端,每一端对应一个表达此关联关系的属性.有几个端指向本类,本类中就有几个关联关系属性. 3,一般属性.分析所有有关的页面,找出表单中要填写的或是在显示页面中要显示的信息等.

iOS中的懒加载

iOS开发中 我们经常使用懒加载 1.懒加载的好处,让控件和对象在最需要加载的时候加载.这样可以节省内存空间,因为我们移动的设备资源还是比较宝贵的.所谓懒加载 就是推迟他的getter方法的执行. 比如.一个view的子控件 ,只有当这个view被显示的时候才去加载.一个tableViewCell中,给他设置了图片,他的content View里面才包含imageView的图片,只有设置了textLabel的内容,才会加载这个textLabel. //collectionView的数据源--属性

mybatis懒加载特性详解,以及多对多映射详解

注意讲解都在代码中 准备数据库,测试数据,各位自己添加,因为是多对多,所以使用中间表: 用到的实体: 学生类: public class Student { private Integer sid; private String name; private Integer age; //一个学生有多个老师,一个老师有多个学生 private List<Teacher> teachers=new ArrayList<Teacher>(); setter.. getter.... to

spring 加载属性(properties)文件

在开发的过程中,配置文件往往就是那些属性(properties)文件,比如使用properties文件配置数据库文件,又如database-config.properties 代码清单:database-config.properties jdbc.database.driver=com.mysql.cj.jdbc.Driver jdbc.database.url=jdbc:mysql://localhost:3306/springmvc?useSSL=false&serverTimezone=

在xml文件的Preference标签中,用&lt;extra&gt;给&lt;intent&gt;标签加参数

在xml文件的Preference标签中,用<extra>给<Intent>标签加参数,以及<intent>标签的android:targetPackage和android:targetClass属性使用注意事项 <?xml version="1.0" encoding="utf-8"?> <PreferenceScreen xmlns:android="http://schemas.android.c

[刘阳Java]_MyBatis_映射文件的常用标签总结_第5讲

MyBatis中常用标签的总结,简单给出自己的总结 MyBatis映射文件中的标签使用介绍1.<select>:用于编写查询语句用的标签 id:表示当前<select>标签的唯一标识 parameterType:指定查询限制条件的输入类型,一般使用#{}实现的是向prepareStatement中的预处理语句中设置参数值 resultType:指定查询返回结果的输出类型,如果返回的结果是一个实体类,必须要求实体类的属性和表的字段名称相同 resultMap:也是一个输出类型,配合&

html中a标签中的onclick和href的使用

下面代码则执行了subgo()函数, <a href="javascript:void(0)" onclick="subgo()">点我</a> 在这里,javascript:void(0),没启实质上的作用,它仅仅是一个死链接,执行的函数是subgo(). <a href="#" onclick="subgo()">点我</a>与<a href="javascr