Hibernate之数据加载方式

Hibernate 的数据加载方式:

在JDBC的操作中,利用SQL语句加载所需要的数据进行处理,当SQL提交之后,这些数据就被读取待用;

在Hibernate中,我们有更多的选择;HIbernate中的数据记载方式:

  • 及时加载(Immeddiate Loading)

当实体加载完后,立即加载其相关联数据;

  • 延迟加载(Lazy Loading)

实体加载时,并不会立即加载其数据,而是当第一次访问的时候,在进行读取;

  • 预先加载(Eager Loading)

实体与其关联对象同时读取,这与即时加载类似,不过实体及其相关数据是通过一条SQL语句读取到得!(基于外连接);

  • 批量加载(Batch Loading)

对于即时加载和延迟加载,可以采用批量加载方式进行性能上的优化;

 

测试:

及时加载:

private static void queryTest() {
		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		final String hql = "from TUser where name = 'keith'";
		List<TUser> users = session.createQuery(hql).list();
		System.out.println("query finished!!!");
		Iterator<TUser> it = users.iterator();
		while (it.hasNext()) {
			TUser user = it.next();
			System.out.println("user's name:"+user.getName());
			System.out.println("user's address:"+user.getAddresses().size());
		}
		session.getTransaction().commit();
	}

 看下SQL的执行顺序:

select   tuser0_.userid as userid1_, tuser0_.name as name1_  from    TUser tuser0_   where    tuser0_.name='keith'
select   addresses0_.user_id as user3_1_1_,addresses0_.addressId as addressId1_,addresses0_.addressId as addressId0_0_,addresses0_.info as info0_0_ from   TAddress addresses0_ where addresses0_.user_id=?

query finished!!!
user's name:keith
user's address:2

 首先会加载实体类的所有内容,然后在加载其相关的数据!

 


延迟加载:

在及时加载中,当Hibernate加载TUser对象时,即同时加载了其所关联的TAddress对象,这样就可能会导致性能的降低,例如:我们只想要TUser的信息,并不想要TAddress的信息,如果按照及时加载的话,就将TAddress又查询了,导致性能降低!如果用延迟加载就可以解决这一问题;

延迟加载只需要在<set />标签中加个属性即可:

		<set name="addresses" cascade="all" lazy="true">
			<key column="user_id" />
			<one-to-many class="TAddress"/>
		</set>

 看下SQL的执行顺序:

select  tuser0_.userid as userid1_, tuser0_.name as name1_ from   TUser tuser0_   where  tuser0_.name='keith'
query finished!!!
user's name:keith
select addresses0_.user_id as user3_1_1_,addresses0_.addressId as addressId1_,addresses0_.addressId as addressId0_0_,addresses0_.info as info0_0_ from  TAddress addresses0_ where addresses0_.user_id=?

什么时候需要它,什么时候才发SQL查询它!

预先加载:

预先加载通过outer-join完成关联数据的加载,这样,通过一条SQL即可完成实体及其关联数据的读取操作 ,如果要是多条数据的话,这样会节省很大的资源;不过在集合类型中(一对多,多对一,或者多对多关系中),不推荐采用预先加载方式,对于集合,如果条件允许,我们应该尽量避免延迟加载;以避免性能生的不必要开销!

一般来说,outer-join可以高效的处理关联数据。但在一些特殊的情况下,特别是比较复杂的关联关系情况下;如多层管理,hibernate生成的的outer-join可能复杂,此时我们应该根据情况判断采用预先加载在当前环境的可用性;同时也可以通过调整全局变量限定outer-join的层次;

 

批量加载 :

是通过批量提交多个限定条件,一次完成多个SQL的读取;

当我们在被查询的类上添加一个 batch-size="3"属性时,指定批量查询的数量;就可以进行批量查询;

我们对TUser进行批量查询,其*.hbm.xml这样:

<hibernate-mapping package="com.keith.dataLoad">
	<class name="TUser" table="TUser" batch-size="3">
		<id name="userid">
			<generator class="native" />
		</id>
		。。。。
	</class>
</hibernate-mapping>
 

我们的测试类这样写:

		Session session = HibernateUtil.getSessionFactory().getCurrentSession();
		session.beginTransaction();
		final String hql = "from TUser";
		List<TUser> users = session.createQuery(hql).list();
		Iterator it = users.iterator();
		while (it.hasNext()) {
			TUser user = (TUser) it.next();
			System.out.println(user);
		}
		session.getTransaction().commit();
	

 但是会发出2条SQL;(因为我的SQL里就有2条数据)

输出结果:

com.keith.dataLoad.TUser@8ae45a
com.keith.dataLoad.TUser@29c204
 

 

 

 

032、准谐振反激变换器(QR-Flyback)原理 文章摘要: 本文以65W PD快充炸管案例切入,解析准谐振反激变换器(QR-Flyback)原理。通过主动利用漏感与MOS结电容的谐振,在Vds波谷开通实现近似ZVS,显著降低开关损耗与电压应力。对比传统反激,QR模式轻载效率提升8%,Vds尖峰减少23%。关键设计要点包括:变压器漏感需<3%、谷底检测电路需抗干扰、启动阶段需防过冲。推荐NCP1340等专用控制芯片,并强调VCC电容优选低ESR陶瓷材质。QR适用于30W-150W场景,其核心优势在于轻载效率优化,但需平衡漏感控制与可靠性。作者结合实测数据与 阅读详情

相关推荐

使用【阿里云百炼】搭建自己的大模型

本文介绍阿里云百炼大模型平台,其为企业级服务平台,融合通义千问等模型,支持多模态能力,提供一站式工具降低开发门槛。重点讲解智能体应用及大模型搭建步骤,含进入创新应用界面、选模型配参数、输指令、导数据、加载知识库、获取API Key、加样例库、配置MCP,还提及模型调试与多平台发布,并附试用链接,助力企业与开发者快速搭建适配业务的AI模型。

Larry的博客 4738

Hibernate数据加载的方式

1. 即时加载(Immediate Loading) 当实体加载完成后,立即加载其相关数据。 我们在配置文件XX.hbm.xml 中设置为lazy=false;即这就可以作为即时加载。 2. 延迟加载(Lazy Loading) 实体加载时,其关联数据并非即刻获取,而是当关联数据第一次被访问时在进行读取;也就是在需要数据的时候,才真正执行数据的加载...

wang609128516的专栏 187

SAP 财务BAPI_ACC_DOCUMENT_POST批导的税务tax

最近遇到了关于SAP财务凭证批导要bapi:BAPI_ACC_DOCUMENT_POST增加税的功能要求,查阅了一众文献发现都不尽如人意,所以想着自己写一个趟过的雷吧。 一般前台sap的凭证是有自动计算税码的勾选框的,但是bapi却并没有这个字段。 实际操作过程中1.可以定义一个税额的结构,参考bapiactx09 2.在会计分录上传如果需要增加税码的时候,譬如总账gl,需要对应tax_code 3.通过CALCULATE_TAX_FROM_GROSSAMOUNT 计算出税额和acct_k...

qq_35640448的博客 3186

Hibernate数据加载方式——hibernate深入浅出

Hibernate数据加载方式:1、即时加载(Immediate Loading)   当实体加载完成后,立即加载与实体相关联的数据。即当实体加载完成后,Hibernate自动立即读取与实体相关联的数据,并且填充到实体对应的属性中。这种加载通常有多条select语句,即select实体数据后,同时select实体相关联的数据。2、延迟加载(Lazy Loading)   实体加载时,其关联数据并不...

想飞的鱼 264

SolidWorks 2022 学习(一)软件安装

接下来是安装SolidWorks,右键SolidWorks.2022.SP0.Premium.DVD.iso,选择装载。然后以管理员身份运行SolidWorks_Flexnet_Server目录下的server_install.bat。更改需要安装的产品,以及安装路径,并勾选接受条款,点击现在安装,会弹出如下窗口。然后以管理员身份运行setup.exe,开始安装solidworks。下载链接会在文章末尾给出,下载完成的文件如下图所示。双击注册表文件,然后点击确定。保持不动,点击确定,开始安装。

qq_38383364的博客 3128

Error: dependent ‘..\..\..\..\Qt\5.15.2\msvc2019\include\QtWidgets\QMainWindow‘ does not exist.

核心问题:修改 Build 目录为源码子目录后,MSVC 编译报错,本质是变量设置异常,导致 qmake 生成多余回溯路径;临时解决:在 .pro 文件添加;最优解决:将上述配置写入 Qt 的 msvc 对应 qmake.conf 全局文件,一劳永逸;禁止 qmake 计算路径时向上回溯,避免生成异常路径。

mumufan05的专栏 878

Hibernate查询数据的几种方式:

1.导航对象图查询:根据已经加载的对象,导航到其他对象。例如,对于已经加载的Customer对象,调用它getOrders().iterator()方法就可以导航到所有关联的Order对象,假如在关联级别使用了延迟加载检索策略,那么首次执行此方法时,Hibernate会从数据库中加载关联的Order对象,否则就从缓存中取得Order对象。2.OID方式:按照对象的OID来检索对象。Session的g

Mr.Sun 5653

LeRobot 入门教程(四)SO-101机械臂组装教程

《SO-101机器人组装与配置指南》详细介绍了旗舰机器人SO-101的完整搭建流程。从获取3D打印零件、安装LeRobot软件和FeetechSDK,到分步组装6个关节的机械臂结构(含夹爪/手柄选项),指南提供了清晰的螺丝规格和安装位置说明。重点包括:电机ID/波特率设置方法、USB端口识别技巧、领导者/跟随者臂的校准流程,以及故障排查建议。完成组装后,用户可通过配套Python脚本校准机器人,为后续的自主学习任务做好准备。文档附有视频演示和技术支持通道,确保用户顺利完成机器人部署。

2506_90492529的博客 2582

Hibernate的数据加载方式

Hibernate的数据加载方式 1.Immediate Loading(立即加载):lazy="false";outer-join="false" 当实体加载完成后,立即加载其关联数据.例如查询主表也会关联查询子表,两条SQL. 2.Lazy Loading(延迟加载):lazy="true";outer-join="false" 实体加载时,其关联数据并非即刻获取,而是当关联数据第...

中庸之道 364

RK3568笔记二:部署手写数字识别模型

部署手写数字识别模型,使用手写数字识别(mnist)数据集训练了一个 LENET 的五层经典网络模型。Lenet是我们的深度学习入门的必学模型,是深度学习领域中的经典卷积神经网络(CNN)架构之一。过程分为:训练,导出ONNX,转化RKNN,测试。

1170

YOLOv11【第一章:零基础入门篇·第1节】YOLOv11核心架构深度解析与环境配置,一文搞定!

🏆 本文收录于专栏 《YOLOv11实战:从入门到深度优化》。 本专栏围绕 YOLOv11 的改进、训练、部署与工程优化 展开,系统梳理并复现当前主流的 YOLOv11 实战案例与优化方案,内容目前已覆盖 分类、检测、分割、追踪、关键点、OBB 检测 等多个方向。

**My Coding Family** 5508

hibernate数据加载方式

在传统的JDBC操作里,通常通过sql语句查询加载所需要的数据,当sql提交之后,这些数据也就被读取待用了,而在hibernate里,我们拥有了更多的数据加载的方式。以实现不同种的需求。   hibernate支持以下四种数据加载方式: 1、及时加载(Immediate Loading)--实体加载后,立即加载其关联数据。 2、延迟加载(Lazy Loading)--实体加

phantomes的专栏 1042

使用 MATLAB/Simulink + Simscape Electrical 来构建一个CCHP微电网与新能源协同运行的模型

随着能源需求的增长和对环境保护要求的提高,冷热电联供(Combined Cooling, Heating and Power, CCHP)系统作为一种高效的分布式能源解决方案,越来越受到关注。CCHP系统通过利用一次能源同时产生电力、制冷和供热,实现了能源的梯级利用,提高了能源使用效率。结合太阳能、风能等可再生能源,可以进一步增强系统的灵活性和环保性。本文将详细介绍如何使用来构建一个CCHP微电网与新能源协同运行的模型,并通过仿真分析其性能表现。本文介绍了如何使用构建一个。

xiaoheshang_123的博客 141

Hibernate数据加载方式

Hibernate数据加载方式: 1、即时加载(Immediate Loading)    当实体加载完成后,立即加载与实体相关联的数据。即当实体加载完成后,Hibernate自动立即读取与实体相关联的数据,并且填充到实体对应的属性中。这种加载通常有多条select语句,即select实体数据后,同时select实体相关联的数据。 2、延迟加载(Lazy Loading)    实体加

gfangxiong的专栏 1429

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Hibernate加载数据的两种方式

Hibernate加载数据的两种方式: Session.get(Classarg0,Serializable arg1)方法 *arg0:需要加载对象的类,例如:User.class *arg1:查询条件(实现了序列化接口的对象); *此方法返回类型为Object对象,然后我们可以强制转换为需要加载的对象,如果数据不存在,则返回null 注:执行此方法时立即发出查询

csdn_lzg的博客 776

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Hibernate 数据加载方式

[size=medium]Hibernate数据加载方式 Hibernate支持以下几种数据加载方式: 即时加载(Immediate Loading) 当实体加载完成后,立即加载其关联数据 延迟加载(Lazy Loading) 实体加载时,其关联数据并非马上获取,而是当关联数据第一次被访问时再进行读取. 预先加载(Eager Loading) 预先加载时,实体及其关联对象同时读取...

hpjianhua的专栏 155

Hibernate的数据加载方式学习笔记

Hibernate支持以下几种数据加载方式: 1.即时加载(Immediate lOading) 当实体加载完成后,立即加载其关联数据。 2.延迟加载(Lazy Loading) 实体加载时,其关联数据并非即可获取,而是当关联数据第一次被访问时再进货读取数据 3.预先加载(Eager Loading) 预先加载时,实体及其关联对象同时读取,这与即时加载类似,只不过数据是通 过一条sq...

qq_39086936的博客 276

hibernate数据加载方式[及时,延时,预先,批量]

在传统的JDBC操作里,通常通过sql语句查询加载所需要的数据,当sql提交之后,这些数据也就被读取待用了,而在hibernate里,我们拥有了更多的数据加载的方式。以实现不同种的需求。   hibernate支持以下四种数据加载方式: 1、及时加载(Immediate Loading)--实体加载后,立即加载其关联数据。 2、延迟加载(Lazy Loading)--实体加载后,关...

phantomes的专栏 320

Hibernate两种加载数据的方式get()和load()

Hibernate加载数据的两种方式: Get(),load() 1.Session.get(Classarg0,Serializable arg1)方法 *arg0:需要加载对象的类,例如:User.class *arg1:查询条件(实现了序列化接口的对象); *此方法返回类型为Object对象,然后我们可以强制转换为需要加载的对象,如果数据不存在,则返回null 注:执行此方法时立...

数据库天地 183
上一篇: 改良程序的11技巧
下一篇: hibernate之实体对象生命周期
keithJava
博客等级 码龄16年 2粉丝 41原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值