现在的位置: 首页 > 综合 > 正文

第八章 Hibernate的入门

2012年03月05日 ⁄ 综合 ⁄ 共 3957字 ⁄ 字号 评论关闭

注:希望大家看后,请给我一点评价,无论写的怎么样,希望你们能给我支持。提出你宝贵的意见。我会继续完善。谢谢您。朋友。

   今天又很高兴可以和大家一块探讨一下有关hibernate的知识,好长时间没有写关于hibernate的文章了。今天就主要讲述一下hibernate的核心知识。

第八章 Hibernate的入门

O/R Mapping基础

1、模型

1)模型用来表示真实世界的实体

在科学和工程技术领域,模型是一个很有用途的概念,它可以用来模拟一个真实的系统。在软件开发领域,模型用来表示真实世界的实体。

2)不同类型的模型

在软件开发的不同阶段,需要为目标系统创建不同类型的模型。

l  在分析阶段----需要创建概念模型

l  在设计阶段----需要创建域模型和数据模型

ü  其中,域模型是面向对象的,数据模型是面向关系的

ü  域模型和数据模型之间存在一种对象-关系映射。

 

3)概念模型

l  概念模型清楚地显示了问题域中的实体

不管是技术人员还是非技术人员都能看得懂概念模型,他们可以很容易地提出模型中存在的问题,帮助分析人员及早对模型进行修改。

在软件设计域开发周期中,模型的变更需求提出得越晚,所耗费得开发成本就越大。

l  概念模型描述了每个实体的概念和属性,以及实体之间的关系:一对一、一对多和多对多

在现实生活中都可以找到相应的例子,例如一只母鸡有很多小鸡是一对多关系,一位客户选购了很多商品,而这些商品也可以被许多客户选购,这是多对多关系。

4)关系数据模型

    到目前为止,关系数据库仍然是使用最广泛的数据库,它存储的是关系数据。关系数据模型是在概念模型的基础上建立起来的,用于描述这些关系数据的静态结构,它由以下内容组成:

l  一个或多个表

l  表的所有索引

l  视图

l  触发器

l  表与表之间的参照完整性

5)域模型

    域模型由以下内容组成:具有状态和行为的域对象;域对象之间的关系。

2、域对象

1)实体域对象

代表人、地点、事物或概念。通常,可以把业务领域中的名词,例如客户、订单、商品,当然也包括前面提到过的母鸡,作为实体域对象;

2)过程域对象

代表应用中的业务逻辑或流程。它通常依赖于实体域对象。

3)事件域对象

代表应用中的一些事件,例如异常、警告或超时等。

 

3、域对象之间的关系

    在域模型中,类之间存在下面的的几种关系。

1)关联(Association)

关联指的是类之间的引用关系(它使一个类指到另一个类的属性),这是实体域对象之间最普遍的一种关系。关联可以分为一对一、一对多和多对多关联。

2)依赖(Dependency)

依赖指的是类之间的访问关系。如果类A访问类B的属性或方法,或者说是A负责实例化B,那么可以说类A依赖类B

依赖对象通过调用被依赖对象的方法来获得服务。一种比较松散的关系,并且是短期的。我们的业务处理过程与对象往往依赖于我们的实体域对象。如在struts action中调用模型层的方法。

3)聚集(Aggregation)

聚集指的是整体与部分之间的关系,在实体域对象之间也很常见。其实聚合关系是关联关系的一种,是强的关联关系。聚合同时也体现整体和部分之间的关系。

例如,人与手就是聚集关系,在Person类中由一个hands集合,它存放被聚集的Hand对象:

public class Person

{

      private Set hands = new HashSet();

      …………

}

4)组合

也叫合成关系,组成关系是关联关系的一种,是比聚合关系强的关系。对象负责代表部分的对象的生命周期。

5)一般化(Generalization)

    一般化指的是类之间的继承关系。

4、既然聚合,组合关系属于关联关系,那么如何区分一般关联关系,聚合关系和组合关系呢?

1)一般关联

只要一个对象联系到另外一个对象就形成了关联关系。如:人和他的猫,黑豹乐队和窦魏,pc机和显示器。

2)聚合关系

一种强关联关系,它要求有部分和整体的关系,并且没有了整体,部分也可以独立存在。

在上面例子中人和它的猫显然没有部分和整体的关系,所以只能是一般的关联关系。而黑豹乐队和窦魏,窦魏等人组成,了黑豹乐队即:窦魏和黑豹是整体和部分的关系。而窦魏脱离了黑豹(早就离开了)更或者黑豹不存在了那么窦魏仍然可以以音乐人的身份存在(即对象仍然可以独立存在)所以它属于聚合关系。

组成关系是可以共享的。(窦魏也可以加入其他乐队)。

3)组合关系

一种更强的整体和部分的关系。它并且要求代表整体的对象负责代表部分的对象的生命周期,组成关系是不能共享的。如:pc机和显示器的关系。

4)注意的问题

如果两个实体是整体和部分的关系,那么它们到底是聚合还是组合,这取决于你的需求。比如说:pc机和显示器的关系,如果你的系统中,显示器脱离了pc机就不存在意义了也可以说:所有显示器的访问都是通过pc机进行的,那么你可以把关系设定为组合(如你在为一个只买品牌机的代理商作系统你可能是可以这么作的)。

如果你的显示器脱离的pc机仍然可以独立存在,也就是说在系统中可以直接访问显示器对象,那么你可以将关系设为聚合(如你在为一个买散件的代理商作系统你可能是可以这么作的)

 

5、域对象的持久化概念

1)什么是持久化

     狭义的理解,“持久化”仅仅指把域对象永久保存到数据库中;广义的理解,“持久化”包括和数据库相关的各种操作。

2)为什么要进行持久化

当实体域对象在内存中创建后,它们不可能永远存在。最后,他们要么从内存中清除,要么被持久化到数据存储库中。内存无法永久地保存数据,因此必须对实体域对象进行持久化。否则,如果对象没有被持久化,用户在应用运行时创建地订单信息将在应用结束运行后随之消失。

3)什么域对象需要持久化

当然,并不是所有的域对象都需要持久化,通常只有实体域对象才需要持久化,另外,有些实体域对象也不需要持久化。

4)持久化类

持久化类是指其实例需要被Hibernate持久化到数据库中的类。持久化类通常都是域模型中的实体域类,同时持久化类符合JavaBean的规范,包含一些属性,以及与之对应的getXXX()setXXX()方法。

6、数据访问有哪些模式

1)业务逻辑层包含了业务数据和业务过程

l  实体域对象

在分层的软件结构中,业务逻辑层代表了业务数据和业务逻辑。域对象位于业务逻辑层,实体域对象代表应用运行时的业务数据,它存在于内存中,并借助于数据库实现用于存放永久性的业务数据。

业务数据在内存中表现为实体域对象形式,而在关系数据库中表现为关系数据形式。数据访问代码负责把实体域对象持久化到关系数据库中。

l  过程域对象

过程域对象代表应用的业务逻辑。

2)数据访问模式----业务逻辑和数据访问耦合

在此种模式种的过程域对象中,业务逻辑和数据访问代码混杂在一起,参见下图。


3)数据访问模式----主动域对象模式

由实体域对象负责自身的数据访问细节,这种实体域对象也被称为主动域对象,参见下图种的说明。J2EE平台中的BMP  EJB组件就是采用主动域对象模式的一种应用示例。

4)数据访问模式----ORM模式

在此种模式中,采用在单独的持久化层由ORM中间件封装数据访问细节,参见下图。而ORM中间件提供对象---关系映射服务,当向数据库保存一个域对象时,把业务数据由对象形式映射为关系数据形式;当从数据库加载一个域对象时,把业务数据由关系数据形式映射为对象形式。

5)数据访问模式---- JDO模式

Java Data ObjectsJDO)是SUN公司制定的描述对象持久化语义的标准API。因此采用JDO模式时,整个应用为四层应用结构,参见下图所示。

严格的说,JDO并不是对象-关系映射接口,因为它支持把对象持久化到任意一种存储系统中,包括: 关系数据库和面向对象的数据库。

 

6)数据访问模式----CMP模式

J2EE架构中,CMPContainer-managed Persistence)表示由EJB容器来管理实体EJB的持久化,EJB容器封装了对象-关系的映射以及数据访问细节。

CMPORM的相似之处在于,两者都提供对象-关系映射服务,都把对象持久化的任务从业务逻辑程序中分离出来;区别在于CMP负责持久化实体EJB组件,而ORM负责持久化POJO,它是普通的基于Java Bean形式的实体域对象。

CMPORM相比,前者有以下不足:

l  开发人员开发的实体EJB必须遵守复杂的J2EE规范,而多数ORM中间件不强迫域对象必须满足特定的规范。

l  实体EJB只能运行在EJB容器中,而POJO可以运行在任何一种Java环境中。

l  目前,对于复杂的域模型,EJB容器提供的对象-关系映射能力很有限。相比之下,许多ORM中间件提供了完善的对象-关系映射服务。

l  尽管按照J2EE的规范,EJB应该是一种可移植的组件,实际上却受到很大限制。因为不同厂商生产的CMP引擎差异很大,它们使用的对象-关系映射元数据各不相同,使得EJB不能顺利的从一个EJB容器移植到另一个EJB容器中。

使用ORM中间件就不存在这样的问题,以Hibernate为例,它可以无缝集成到任何一个Java系统中。在Java软件架构领域,在出现基于CMP的实体EJB之前,基于JavaBean形式的实体域对象早就存在了。但是把基于JavaBean形式的实体域对象称为POJO,却是最近才发生的事。

POJOPlain Old Java Object----又普通又古老的Java对象),它和基于CMP的实体EJB相比,既简单,又具有很高的可移植性,因此联合使用ORM映射工具和POJO,已经成为一种越来越受欢迎的,用于取代CMP的持久化方案。

 

今天先写到这,后面的内容以后再写。。。。。

 

    

抱歉!评论已关闭.