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);
//发出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(懒加载)属性的更多相关文章
- 018 关联映射文件中<class>标签中的lazy(懒加载)属性
Lazy(懒加载): 只有在正真使用该对象时,才会创建这个对象 Hibernate中的lazy(懒加载): 只有我们在正真使用时,它才会发出SQL语句,给我们去查询,如果不使用对象则不会发SQL语句进 ...
- 020 <one-to-one>、<many-to-one>单端关联上的lazy(懒加载)属性
<one-to-one>.<many-to-one>单端关联上,可以取值:false/proxy/noproxy(false/代理/不代理) 实例一:所有lazy属性默认(支持 ...
- vue中页面卡顿,使用懒加载
为给客户更好的客户体验,首屏组件加载速度更快一些,解决白屏问题. 懒加载简单来说就是延迟加载或按需加载,即在需要的时候的时候进行加载. 常用的懒加载方式有两种:即使用vue异步组件 和 ES中的imp ...
- hibernate 中 fetch=FetchType.LAZY 懒加载失败处理
对这种懒加载问题,最后的做法是利用Spring提供的一个针对Hibernate的一个支持类,其主要意思是在发起一个页面请求时打开Hibernate的Session,一直保持这个Session,使得Hi ...
- hibernate之xml映射文件关系维护,懒加载,级联
一:关系维护 --->inverse默认值false,表示不放弃关系的维护. --->inverse="true"配置在那一端,表示那一端xml对应的po放弃关系的 ...
- hibernate中的懒加载和急加载
懒加载(FatchType.LAZY)是Hibernate为提高程序执行效率而提供的一种机制,简单说就是只有正真使用其属性的时候,数据库才会进行查询. 具体的执行过程就是:Hibernate从数据库获 ...
- Angular中懒加载一个模块并动态创建显示该模块下声明的组件
angular中支持可以通过路由来懒加载某些页面模块已达到减少首屏尺寸, 提高首屏加载速度的目的. 但是这种通过路由的方式有时候是无法满足需求的. 比如, 点击一个按钮后显示一行工具栏, 这个工具栏组 ...
- spring 加载属性(properties)文件
在开发的过程中,配置文件往往就是那些属性(properties)文件,比如使用properties文件配置数据库文件,又如database-config.properties 代码清单:databas ...
- html文件在head标签中引入js地址和直接写js代码,所用时间是不同的,因为引入js地址,文件加载的时候需要通过通讯协议去解析地址,读取外部文件
html文件在head标签中引入js地址和直接写js代码,所用时间是不同的,因为引入js地址,文件加载的时候需要通过通讯协议去解析地址,读取外部文件
随机推荐
- iOS 文件下载和打开
最近的项目要用到一个在线报告的下载,于是完成后自己在理一下思路,大体的实现了我要得需求. 话不多说,直接上代码 首先,取到网络文件的链接,进行判段是否需求再次下载还是直接打开 #pragma mark ...
- jQ伪类选择器
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...
- ViewPager—02图片无限轮播
布局文件 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:t ...
- Reflux中文教程——概览
翻译自github上的reflux项目,链接:https://github.com/reflux/refluxjs 〇.安装及引入 安装: npm install reflux 引入: var Ref ...
- Webdriver API之操作(一)
一. 控制浏览器 1. 控制浏览器大小 driver.set_window_size(480,800) #浏览器宽480,高800显示 dirver.maximize_window() #浏览器最大化 ...
- Broker节点
在druid集群环境中 broker节点的作用是查询.它知道metadata 通过zookeeper发送到了集群中的哪个节点,从而能够准确的查询到.broker也把各个节点的结果汇聚到一个节点中.On ...
- 浅谈C#抽象类
抽象类 先说个事,一个类实例化为一个实例.就是一只狗,实例化一下,就成了一只哈士奇(具体的二哈).但是,一个动物类实例化呐,成了啥? 压根就不能实例化.这,就是抽象类的概念引入. 概念:C#允许把类和 ...
- SQL基础增删改查
一.基础语句介绍 SQL 可以分为两个部分:数据操作语言(DML)和数据定义语言(DDL) 1.数据操作语言(DML)基本指令: select 从数据表中获取数据(现阶阶段,二次开发常用) ...
- lua 运算符
lua 运算符 算术运算符 操作符 描述 + 加 - 减 * 乘 / 除 % 求模 ^ 求幂 示例程序 local a, b = 1, 2 print(a + b) print(a - b) prin ...
- jQuery修炼心得-DOM节点的删除
要移除页面上节点是开发者常见的操作,jQuery提供了几种不同的方法用来处理这个问题. 1.empty empty 顾名思义,清空方法,但是与删除又有点不一样,因为它只移除了 指定元素中的所有子节点. ...