<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);
//发出SQL语句,因为在使用对象
System.out.println("classes.name=" + classes.getName()); //不会发SQL语句,只会返回一个代理类,因为没有使用对象
Set<Student> students = classes.getStudents();
//会发出SQL语句,因为使用了对象
for (Iterator<Student> iter = students.iterator();iter.hasNext();){
Student student = iter.next();
System.out.println(student.getName());
}
//提交事务 tx.commit();

实例二:集合上的lazy=true(默认)class已经设置懒加载,class默认lazy=true(默认)

session = HibernateUtils.getSession();

            tx = session.beginTransaction();
//不会发出SQL语句
Classes classes = (Classes)session.load(Classes.class, 1);
//发出SQL语句,因为在使用对象
System.out.println("classes.name=" + classes.getName());
//不会发SQL语句,只会返回一个代理类,因为没有使用对象
Set<Student> students = classes.getStudents();
//会发出SQL语句,发出查询全部数据的SQL,效率不高
System.out.println("student.count=" + students.size());
//提交事务 tx.commit();

实例三:集合上的lazy=false,其它保持默认class默认lazy=true(默认)

          //不会发出SQL语句,因为只设置了集合上的lazy为false,其它保持默认
Classes classes = (Classes)session.load(Classes.class, 1);
//发出两条SQL语句,分别加载classes和student
//并且把集合中的数据也加载上来(虽然并没有使用集合中的对象),因为设置了集合的lazy=false System.out.println("classes.name=" + classes.getName());
//不会发SQL语句,因为已经在前面加载了数据 Set<Student> students = classes.getStudents();
for (Iterator<Student> iter = students.iterator();iter.hasNext();){ Student student = iter.next(); System.out.println(student.getName()); }

实例四:集合上的lazy=false,其它保持默认class默认lazy=true(默认)

//不会发出SQL语句

        Classes classes = (Classes)session.load(Classes.class, 1);
//发出两条SQL语句,分别加载classes和student
//并且把集合中的数据也加载上来(虽然并没有使用集合中的对象),因为设置了集合的lazy=false
System.out.println("classes.name=" + classes.getName());
//不会发SQL语句,因为已经在前面加载了数据
Set<Student> students = classes.getStudents();
//不会发SQL语句,因为已经在前面加载了数据
System.out.println("student.count=" + students.size());

实例五:设置集合上lazy=extra,其它默认class默认lazy=true(默认)

session = HibernateUtils.getSession();

            tx = session.beginTransaction();
//不会发出SQL语句
Classes classes = (Classes)session.load(Classes.class, 1);
////发出两条SQL语句
System.out.println("classes.name=" + classes.getName()); //不会发出SQL语句,只返回代理类
Set<Student> students = classes.getStudents();
//会发出SQL语句
for (Iterator<Student> iter = students.iterator();iter.hasNext();){
Student student = iter.next();
System.out.println(student.getName());
}
//提交事务
tx.commit();

实例六:设置集合上lazy=extra,其它默认class默认lazy=true(默认)

session = HibernateUtils.getSession();
tx = session.beginTransaction()
//不会发出SQL语句
Classes classes = (Classes)session.load(Classes.class, 1);
//发出两条SQL语句
System.out.println("classes.name=" + classes.getName());
//不会发出SQL语句,只返回代理类
Set<Student> students = classes.getStudents();
//发出SQL语句,发出一条比较智能的SQL语句(select count(id) form t_student where classesid=?) //和lazy=true相比,效率高 System.out.println("student.count=" + students.size()); //提交事务 tx.commit();

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

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

    Lazy(懒加载): 只有在正真使用该对象时,才会创建这个对象 Hibernate中的lazy(懒加载): 只有我们在正真使用时,它才会发出SQL语句,给我们去查询,如果不使用对象则不会发SQL语句进 ...

  2. 020 <one-to-one>、<many-to-one>单端关联上的lazy(懒加载)属性

    <one-to-one>.<many-to-one>单端关联上,可以取值:false/proxy/noproxy(false/代理/不代理) 实例一:所有lazy属性默认(支持 ...

  3. vue中页面卡顿,使用懒加载

    为给客户更好的客户体验,首屏组件加载速度更快一些,解决白屏问题. 懒加载简单来说就是延迟加载或按需加载,即在需要的时候的时候进行加载. 常用的懒加载方式有两种:即使用vue异步组件 和 ES中的imp ...

  4. hibernate 中 fetch=FetchType.LAZY 懒加载失败处理

    对这种懒加载问题,最后的做法是利用Spring提供的一个针对Hibernate的一个支持类,其主要意思是在发起一个页面请求时打开Hibernate的Session,一直保持这个Session,使得Hi ...

  5. hibernate之xml映射文件关系维护,懒加载,级联

    一:关系维护 --->inverse默认值false,表示不放弃关系的维护.   --->inverse="true"配置在那一端,表示那一端xml对应的po放弃关系的 ...

  6. hibernate中的懒加载和急加载

    懒加载(FatchType.LAZY)是Hibernate为提高程序执行效率而提供的一种机制,简单说就是只有正真使用其属性的时候,数据库才会进行查询. 具体的执行过程就是:Hibernate从数据库获 ...

  7. Angular中懒加载一个模块并动态创建显示该模块下声明的组件

    angular中支持可以通过路由来懒加载某些页面模块已达到减少首屏尺寸, 提高首屏加载速度的目的. 但是这种通过路由的方式有时候是无法满足需求的. 比如, 点击一个按钮后显示一行工具栏, 这个工具栏组 ...

  8. spring 加载属性(properties)文件

    在开发的过程中,配置文件往往就是那些属性(properties)文件,比如使用properties文件配置数据库文件,又如database-config.properties 代码清单:databas ...

  9. html文件在head标签中引入js地址和直接写js代码,所用时间是不同的,因为引入js地址,文件加载的时候需要通过通讯协议去解析地址,读取外部文件

    html文件在head标签中引入js地址和直接写js代码,所用时间是不同的,因为引入js地址,文件加载的时候需要通过通讯协议去解析地址,读取外部文件

随机推荐

  1. !function 笔记

    一般看JQuery插件里的写法是这样的 (function($) { //... })(jQuery); 今天看到bootstrap的javascript组件是这样写的 !function( $ ){ ...

  2. 【 js 基础 】 深浅拷贝

    underscore的源码中,有很多地方用到了 Array.prototype.slice() 方法,但是并没有传参,实际上只是为了返回数组的副本,例如 underscore 中 clone 的方法: ...

  3. js 模板引擎

    template = document.querySelector('#template').innerHTML, result = document.querySelector('.result') ...

  4. 利用sub lr,lr,#4:程序是如何进行返回的?

    1: ARM采用的是3级流水线 ARM的流水线结构为:   取指 -----> 译码 ------> 执行 ARM代码:                  PC           PC- ...

  5. Mac OS平台下应用程序安装包制作工具Packages的使用介绍(补充)

    上一篇:Mac OS平台下应用程序安装包制作工具Packages的使用介绍 补充说明 上一篇文章中介绍了如何使用Packages如何创建mac下的安装包.但是这样制作出来的安装包只能安装到系统的文件路 ...

  6. Ajax 与 Comet

    Ajax技术的核心是XMLHttpRequest对象(简称XHR). XMLHttpRequest对象 在浏览器中创建XHR对象要像下面这样,使用XMLHttpRequest构造函数. var xhr ...

  7. Jsoup抓取、解析网页和poi存取excel综合案例——采集网站的联系人信息

    需求:采集网站中每一页的联系人信息 一.创建maven工程,添加jsoup和poi的依赖包 <!-- https://mvnrepository.com/artifact/org.apache. ...

  8. JavaScript中apply与call方法

    一.定义 apply:应用某一对象的一个方法,用另一个对象替换当前对象. call:调用一个对象的一个方法,以另一个对象替换当前对象. 二.apply //apply function Person( ...

  9. js 数字递增特效 仿支付宝我的财富 HTML5

    上周五应着公司临时需求,一天的时间解决掉官网(ps:比较简单哈哈),需求里面有一个特效就是数字递增到指定的数值,其实JS写也不复杂的,但是我发现一个js小插件,这个插件轻巧简单,用起来也非常简单实用. ...

  10. java实现对服务器的自动巡检邮件通知

    1.需求 之前一直是手动的巡检,然后贴图,最近服务器数量大增,有点忙不过来了.因为一直用的java,对shell脚本不是特别了解,所以这次用java写了个小项目,实现对多服务器,多任务的巡检,巡检结果 ...