已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
对象关系映射技术的发展与应用摘要:首先本文基于J2EE体系结构介绍在开发中使用编程语言与数据库进行数据交互的三种方式:使用SQL/JDBC在业务中的硬编码、使用SQL/JDBC在单独的数据类中的硬编码和对象关系映射模式(ORM模式)。其次,介绍使用面向对象编程语言的一种设计模式用于实现对象关系映射技术DAO设计模式和实现对象关系映射模式设计标准的四个级别。最后,介绍对象关系映射模式的一种实现框架Hibernate以及它的核心接口和设计原则另外结合DAO设计模式和Hibernate框架建立数据持久层模型以及实现过程流程图。关键词:JAVA;ORM;DAO;HibernateDevelopment and application of object-relational mapping technologyYaoding WangAbstract:Based on J2EE architecture first introduced the use of programming languages and database data interaction in development of three ways: using SQL / JDBC hard-coded in the business, using SQL / JDBC hardcoded and object-relational data in a separate class mapping modes (ORM mode). Secondly, the use of object-oriented programming language is a design pattern for implementing object-relational mapping technology -DAO design patterns and realization of the four-level object-relational mapping pattern design standards. Finally, an implementation framework -Hibernate object-relational mapping modes and interfaces as well as its core design principles combined with DAO design patterns and additional Hibernate data persistence layer framework for establishing a process flow diagram and model implementation.Key words: JAVA;ORM;DAO;Hibernate前言:面向对象是从软件工程基本原则(如耦合、聚合、封装)的基础上发展起来的,而关系数据库则是从数学理论发展而来的,两套理论存在显著的区别。为了解决这个不匹配的现象,对象关系映射技术应运而生。1、J2EE的三层架构这个是居中表示的吗?再核实一下,以下的234格式同样要核实下。已修改J2EE的三层结构1,2是指表示层(Presentation),业务逻辑层(Businesss Login)以及基础架构层(Infrastruelure)。但是在实际项目中,往往会对三层体系结构做一些扩展为五层体系,即表示层(Presentation)、控制/中介层(Controller/Mediator)、领域层(Domain)、数据持久层(Data Persistence)和数据源层(Data Source)。五层体系实际上实在三层架构的中层增加了两个中间层。控制/中介层位于表示层和领域层之间,数据持久层位于领域层和基础架构层之间,体系结构如图1所示:遵从J2EE的N层体系结构3的应用程序会因为减少了内部的耦合而提高其健壮性。如图1所示,如果用户接口层要获得信息,必须与业务层的对象交互,然后在通过业务层对象从持久层获得存储在持久机制中的对象。J2EE体系结构的一个重要特点是就是通过禁止用户层与持久结构解耦。通过将程序的业务逻辑封装到业务类中而不是用户接口类中,可以在多处使用这些业务逻辑,从而提高应用程序的复用性。所以,合理设计持久层是一个至关重要的问题。下面图1的说明请在图片外重新写,图片中的说明请删除。已修改图1 J2EE的N层体系结构图2、数据持久层的集中解决方案2.1 使用SQL/JDBC在开发中的硬编码使用SQL/JDBC4在开发中硬编码数据流示意图如图2所示,这种模式实际上是在开发语言中直接编写SQL语句对数据库5进行操作,这种模式的好处是写代码效率很高,对于小型应用程序或者原型是可行的。缺点是直接耦合了的业务类与关系数据库结构,这意味着任何一个小的改变(例如对某一列重命名或者移植到另外一种数据库)都导致源代码级的修改,使代码难于维护和扩展。下面图2的说明请在图片外重新写,图片中的说明请删除。已修改图2 SQL/JDBC对数据库的操作2.2使用SQL/JDBC 在单独的数据类中硬编码。用SQL/JDBC在单独的数据类中硬编码数据流示意如图3所示,在这种方法中,业务类的SQL/JDBC语句被封装在一个或者多个“数据类”中。这使得业务类不用直接跟数据库进行交互,但是在对数据进行改动后,仍然需要修改和重新编译数据类。这种方法也只适合原型或者小型(少于40或者50个业务类)的系统。下面图3的说明请在图片外重新写,图片中的说明请删除。前面的图1,图2,同样处理。你的图4,图5都是重新写在图片外的。已修改图3 抽象数据类对应的业务类2.3对象关系映射模式(ORM模式)对象关系映射模式6(ORM模式)是Java应用中的对象到关系数据中的表的自动和透明的持久化,使用元数据描述了对象与数据库间的映射。本质上,ORM是将数据从一种表示(双向)装换为另一种。将对象映射到某种持久机制(在这里是关系数据库)并且对关系数据结构的简单改动并不影响面向对象代码的健壮的持久层。这种方法的优点是应用程序开发者不需要了解关系数据库结构,甚至不需要知道对象是保存在关系数据库中。同时,这种方法支持大规模的针对关键业务的应用程序。3、DAO和对象关系映射设计模型设计模式这一概念源于建筑学领域, 目的是为重复出现的问题提供一种最佳解决方案。在软件开发领域, 设计模式表现为一组精心安排的通用的类和对象, 再经过定制和实现就可用来解决特定上下文中的问题。3.1 DAO设计模式DAO(Data Access Object)模式称为数据访问对象模式。通常应用于数据库操作的业务逻辑代码中。该模式的本质是向外部提供一个访问数据源的统一接口, 对外隐藏操作数据源的实现细节。这是因为在实际的应用过程中, 应用程序所面对的数据源往往是多种多样的。不同数据源的连接方式、数据访问方式会有明显的差异。这就导致了需要访问数据源的组件的代码实现方式与数据源的类型有着密切的关系。组件和数据源之间的这种紧耦合关系也就导致了整个应用系统难以在不同数据源之间进行迁移。使用DAO模式后, 即使系统需要进行数据源的迁移, 也只需在DAO模式内部进行数据源访问代码的修改, 而不会涉及上层调用代码, 这样就提高了软件的可维护性。图4 DAO模式类图在图4所示的DAO模式类图中, Business Object代表的是一个需用访问数据源的业务对象, 这个对象可以由EJB或JavaBean组件来实现。业务对象使用DAO模式来访问数据源。DataAccessObject包括接口和接口的实现类。接口中定义要访问数据源的抽象方法, 实现类中应用一种具体的数据源访问API来实现抽象方法。Transfer Object类代表了一个数据传输对象, 它负责在数据源和业务对象之间进行数据的封装和传输, 一般使用DTO(Data Transfer Object)模式实现3.2 对象关系映射ORM(Object Relationship Mapping)设计模式数据持久性之所以难以处理,是因为J2EE面向对象设计中使用的对象范例和关系数据库使用的关系范例这两种“文化”不匹配。对象范例基于软件工程的一些原理,例如耦合、聚合和封装:而关系范例则基于数学原理,特别是集合论的原理。两种不同的理论基础导致各自有不同的优缺点。对象范例侧重于从包含数据和行为的对象中构建应用程序,而关系范例则主要针对数据的存储。当为访问而寻找一种何时的方法时,这种“文化不匹配”的问题就成了主要的矛盾:使用对象范例,通过他们的关系来访问对象,而使用关系范例,则通过复制数据来连接表中的行。虽然两种范例进过努力可以结合,但这种基本“文化”的差异导致结合效果不理想。有人提出对象数据以希望解决这个问题,但是,关系数据库技术已经发展得相当成熟,占据了数据库市场的90%以上的份额,对象数据库的普及尚需时日。ORM的出现作为两个体系的借口或者过渡层,为数据持久层设计提供了良好的解决方案,并迅速得到业界的认可。3.3 ORM实现的四个级别ORM有四种不同级别的具体实现,这四个级别的特性决定了一个好的ORM实现工具的设计标准。3.3.1纯关系整个应用程序,包括用户接口,都是根据关系模型和基于SQL的关系操作进行设计的。如果低水平的代码重用是可以容忍的,不考虑它对大型系统的不足,这种方法对于简单的应用不失为一种优秀的解决方案。直接的SQL可以在每一方面进行微调,但是存在缺乏可移植性和可维护性,这些缺点在应用程序需要长期运行的时候是非常突出的,而且这种类型的应用经常大量的使用存储过程,将业务层的许多工作移动到数据库中。3.3.2轻量对象映射实体作为类来表示,而类又被手工的映射到关系表。手工编码的SQL/JDBC使用众所周知的设计模式对业务逻辑进行了隐藏。这种方法非常普遍,对于那些只有少量实体的应用或者(那些)使用普通的元数据-驱动的数据模型的应用来说是很成功的。3.3.3中等对象映射这种应用是根据对象模型设计。SQL在编译时使用代码生成工具生成,或者在运行时由框架代码生成。对象间的关联由持续性机制支持,并且查询可能使用面向对象的表达式语言指定。对象被持续层缓存。很多的ORM产品和自制的持续层至少支持这一级别的功能。它非常适合于包含一些复杂事物的中等规模的应用,特别是当不同的数据库产品间的移植性非常重要时,这些应用通常不适用存储过程。3.3.4完全的对象映射完全的对象映射支持复杂的对象模型:组合、继承、多态和“可达的持续性”。持续层实现了透明的持续性;持续类不继承任何特定的基类或必须实现特定的接口。高效的存储策略(懒惰和急切存取)和缓存策略都对应用透明的实现了。这一级别的功能很难由自制的持续层达到它相当于数月或数年的开发时间。许多商业的和开源的Java ORM工具已经到达了这一级别的品质。完全的对象-关系/映射工具需要处理一个相当长的问题列表,而Hibernate7正是这样的一个工具。目前,Hibernate是一种开源的ORM实现,作为ORM最好的开源工具,得到了众多程序员的用户和支持。4、Hibernate4.1 Hibernate简介Hibernate是一个优秀的开源代码的Java对象持久层轻量级封装框架,它既可以用来在Java应用程序中取代大部分JDBC代码,也可以整合到J2EE系统中作为持久层框架。Hibernate是JDBC的轻量级的对象封装,它是一个独立的对象持久层框架,与App Server和EJB没有什么必然的联系。Hibernate可以用在任何JDBC可以使用的场合,例如Java应用程序的数据库访问代码,DAO接口的实现类,甚至可以是BMP里面的访问数据库的代码。从这个意义上来说,Hibernate和EJB不是一个范畴的东西,也不存在非此即彼的关系。Hibernate的兼容性于JDBC比密切关联的框架,所以Hibernate得兼容性与JDBC驱动和数据库都有一定的关系,但是和使用它的Java程序和App Server没有任何关系,也不存在兼容性问题。Hibernate不能用来直接和Enitiy Bean作对比,只有放在整个J2EE项目的框架中才能比较。并且及时是放在软件整体框架中来看,Hibernate也是作为JDBC的替代者出现的,而不是Entity Bean的替代者出现的。图5 Hibernate核心接口4.2Hibernate核心接口利用Hibernate进行数据持久化操作, 至少会用到如图5所示的核心接口8,9 。Configuration接口用来配置和引导Hibernate。Hibernate应用程序通过Configuration实例来指定对象-关系映射文件的位置与Hibernate的特定属性, 然后创建SessionFactory实例。SessionFactory基于工厂模式而建立, 它是产生Session实例的工厂类。SessionFactory在初始化过程中将从Hibernate的配置文件中读取对当前数据库所定义的所有映射文件, 并将它们编译后保存在内存中。为了节省系统资源, 在程序初始化的过程中只产生一个SessionFactory实例, 多个线程可以并发调用以实现SessionFactory实例的共享。Session接口是Hibernate进行持久化操作的基础, 相当于JDBC中的Connection对象所起的作用。Session提供了一系列的持久化操作方法, 例如save()、update()、delete()和find()等。Session还包含了一个针对持久化对象的一级缓存, 在遍历持久化对象或者根据持久化标识查找对象的时候将会使用到。Transaction接口实现对数据库中事务的控制, 它为用户提供了进行持久化操作的原子操作单元范围的设置功能。通过Transaction接口, 用户可以将多个持久化操作组合成一个原子操作, 使这些操作要么全部执行, 要么全部不执行。Query和Criteria接口是Hibernate的查询接口, 用于查询持久化对象, 以及控制执行查询的过程。4.3 Hibernate数据持久化层设计原则与模型4.3.1数据持久化层设计原则数据持久化层的设计目标是为整个系统提供一个高层、统一、安全和并发的数据持久化机制。从目前JavaEE多层结构的可维护性和灵活性考虑, 完善的数据持久化层应该达到以下目标10 :(1)完成对各种数据进行持久化的编程工作, 并为系统业务逻辑层提供访问数据持久化层的接口。(2)如果需要的话, 能够支持多种数据源平台。即数据存储方式的变化, 不会影响持久层的实现。(3)尽量减小数据库访问对整个应用产生的性能瓶颈。为了达到上述目标, 构建一个可扩展性强、可维护性高的数据持久化层, 本文结合DAO模式与Hibernate框架构建了一个数据持久化层模型。4.3.2数据持久化层模型由于Hibernate支持与几乎所有主流的关系型数据库之间的映射, 采用面向对象的查询语言-HQL来操作关系型数据库。在HQL语言中不会出现像SQL语法差别的情形, 因为Hibernate在配置文件中提供了与具体某一关系型数据库SQL“方言”转换的配置方法。通过这种配置, Hibernate会自动将HQL语言转化为具体关系型数据库所使用的SQL语言。所以在数据存储采用关系型数据库的应用中, 可以在DAO实现类中封装HibernateAPI来完成与持久化类相关的业务逻辑操作。图6为本文所建立的数据持久化层模型。图6数据持久化层模型数据持久化层的业务流程为:业务逻辑模块调用DAOFactory, DAOFactory生成相应的DAO,DAO里通过HQL语句操作PO11。Hibernate把HQL转换为SQL, 通过O/R映射文件实现对关系型数据库的操作。结语:ORM是基于关系数据库的面向对象数据持久层设计的一种良好的解决方案,它能为对象-关系数据库之间提供一个成功的企业级别的映射解决方案,尽最大可能弥补对象范例和关系范例之间的差异。Hibernate是比较流行的一种ORM的实现工具,实现
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论