4.
懒加载:
在前面我们已经对懒加载有所提及,现在再借助一个简单的实例(它们均位于lazyLoad
项目下)再来重新认识懒加载:先看下面的代码:
package
com.asm.hibernate.test;
public
class
UserTest2 {
public
static
void
main(String[] args) {
addUser
();
User u = getUser
(1);
System.
out
.println(
"return type:"
+ u +
"\t
name="
+ u.getName());
}
static
User getUser(
int
id) {
Session s =
null
;
try
{
s = HibernateUtil.getSession
();
User user = (User) s.load(User.
class
, id);
//
以下的两种方式都可以让懒加载去真正连接数据库。
Hibernate
.initialize
(user);
// System.out.println(user.getName());
System.
out
.println(
"load--User:"
+ user.getClass());
return
user;
}
finally
{
if
(s !=
null
)
s.close();
}
}
static
void
addUser() {
省略内容:此方法的作用就是插入一条记录到数据库中,以使我们的查询操作可以进行。
}
}
执行后,打印结果如下:
load--User:class com.asm.hibernate.domain.User$$EnhancerByCGLIB$$212cbff4
return
type:com.asm.hibernate.domain.User@1f6ba0f
name=jack
注意到上面第一行打印结果,可以发现返回的是User
的一个子类,借此来看看懒加载的实现,懒加载的意思是只有当我们真正要查询的数据时,它才真正去连接数据库,为什么要提出懒加载呢,我们知道数据库的连接是非常耗资源的,有了懒加载可以从一定程度上降低数据库连接资源
的消耗。
懒加载本质
是借助asm.jar
和cglib.jar
这两个jar
包,来生成User
的一个子类,这就是前面提到“使用懒加载时实体类不能是final
”的原因,从这里我们知道hibernate
用构建实体类的子类来实现一个更强大的操作功能,这样即使数据库无记录,查询返回的结果对象也永远不会为null
,即是说“返回的结果对象==null
”永远不能成立,但这并不表示一定查询出了结果。其实如果我们以懒加载查询的结果为空,而我们再对这个对象进行操作时,是会报错得。
概述要点
:(1
)hibernate
构造了实体类的子类来查询(2
)要使用赖加载,实体类不能声明为final (3)
查询结果对象永不为空。
(4
)只要连接未关,如果我们想获知此对象的任何属性信息都会引起懒加载去连接数据库,但是如果我们是企图获取它的id
时,却不能让hibernate
去连接数据库。
补充说明
:其实这种懒加载的使用很少,它通常在需要关联两个实体对象时使用,比如我们希望把查询出的User user
对象关联到部门中去时,即我们 Employee emp=new Employee(); emp.setUser(user);
在这种情况下我们并不关心它的查询内容,只是想关联到部门中去,所以此时使用懒加载是一个节省“数据库连接资源”的好方法。
分享到:
相关推荐
【hibernate入门小例子】是一个适合初学者的教程,主要涵盖了如何在JavaWeb项目中使用Hibernate框架与MySQL数据库进行集成。在这个例子中,我们将会深入理解Hibernate的核心概念,包括实体映射、对象关系映射(ORM)...
**Hibernate入门** Hibernate是一款强大的Java持久化框架,它简化了数据库与Java对象之间的交互,使得开发者无需编写大量的SQL语句,就能实现数据的增删改查。本教程将分为五个部分,逐步深入Hibernate的世界。 **...
在这个“hibernate入门--第一个实例”中,我们将了解如何设置Hibernate环境,创建实体类,配置映射文件,以及执行基本的CRUD(创建、读取、更新和删除)操作。 1. **环境搭建** - **下载与安装**: 首先,你需要从...
12. **性能优化**:如批处理、延迟加载、懒加载、缓存策略等提高Hibernate应用性能的方法。 通过这个详细的教程,学习者不仅可以了解Hibernate的基础知识,还能通过实例深入理解并掌握其在实际项目中的应用。这将为...
13. **懒加载(Lazy Loading)**:Hibernate支持懒加载机制,即关联的对象在需要时才从数据库加载,这通过`@OneToMany`, `@ManyToOne`, `@OneToOne`等注解的`fetch = FetchType.LAZY`实现。 14. **缓存(Caching)*...
Hibernate 是一个开源的对象关系映射(ORM)框架,它允许Java开发者在Java应用程序中操作数据库,而无需直接编写SQL语句。ORM框架如Hibernate简化了数据持久化的过程,通过将对象模型与数据库模型进行映射,实现了...
【hibernate入门与概述】 Hibernate 是一个流行的Java对象关系映射(ORM)框架,它允许开发者使用面向对象的方式操作数据库,将Java类与数据库表进行映射,从而简化数据库操作。本文主要涵盖以下几个核心概念: 1....
【hibernate helloworld入门级代码】是针对初学者的一个简单示例,旨在帮助理解Hibernate这一流行...对于进一步学习,可以深入研究Hibernate的高级特性,如懒加载、缓存、级联操作以及 Criteria API 和 Criteria 查询。
9. **懒加载和级联操作**: 懒加载允许延迟加载关联的对象,减少内存消耗;级联操作可以在父对象上直接操作子对象,简化编程。 10. **缓存机制**: Hibernate提供了一级缓存(Session级别)和二级缓存...
在这个“最经典的Hibernate教程_从入门到精通_第三篇”中,我们将深入探讨Hibernate的核心概念和关键功能。 1. **Hibernate核心组件与配置**: Hibernate的核心组件包括SessionFactory、Session、Transaction和...
**hibernate系列(一)hibernate入门** 在Java世界中,ORM(Object-Relational ...随着深入学习,你会发现Hibernate提供了很多高级特性,如二级缓存、懒加载、事件监听等,这些都是提高应用性能和灵活性的重要工具。
在这个“Java基础入门之Hibernate入门”中,我们将深入理解Hibernate的核心概念,包括实体、配置、会话和查询等,以帮助初学者快速上手。 ### 一、Hibernate简介 1. **ORM概念**:对象关系映射(Object-Relational...
11. 高级主题:包括关联映射(一对一,一对多,多对一,多对多),懒加载,集合映射,以及时间戳和版本字段等。 12. Hibernate与Spring的整合:如果教程深入,可能会涉及如何在Spring框架中集成Hibernate,使用...
9. **懒加载和立即加载**:Hibernate支持对象的懒加载和立即加载策略,懒加载只在真正需要时加载关联的对象,而立即加载会在获取主对象时一起加载关联对象。 10. **联合主键**:对于拥有多个字段作为主键的情况,...
本教程旨在帮助初学者逐步掌握Hibernate的核心概念和技术,从入门到精通,使您能够更高效地在Java项目中应用Hibernate。 在“最经典的hibernate教程_从入门到精通_第四篇”中,我们将会深入探讨以下几个关键知识点...
在这个“hibernate入门的小例子”中,我们将探讨如何利用Hibernate进行基本的数据操作,包括实体类的创建、配置文件的设定、Session的使用以及查询操作。 1. **实体类的创建**: 在Hibernate中,实体类是代表...
Hibernate 是一个流行的开源对象关系映射(ORM)框架,它为 Java 应用程序提供了便捷的数据持久化服务。本教程将引导你逐步了解 Hibernate 的基本概念、安装配置以及核心功能,帮助你快速入门。 **一、Hibernate ...
本教程详细介绍了Hibernate的核心概念、配置、对象关系映射(ORM)以及实际开发中的应用。下面将对其中的关键知识点进行详细阐述。 一、Hibernate简介 Hibernate是一款开源的Java ORM框架,它简化了数据库操作,...
本篇内容将围绕“Hibernate入门”这一主题,深入浅出地介绍Hibernate的基本概念、核心功能以及如何在实际项目中应用。 1. **Hibernate简介** Hibernate是一个开源的ORM框架,它提供了一种在Java应用程序中持久化...
【hibernate】是Java开发领域中一个非常重要的对象关系映射(ORM)框架,它允许开发者用面向对象的方式操作数据库,从而简化了数据库应用程序的开发。本教程将引导你从零基础开始,逐步深入理解并掌握Hibernate的...