对象关系映射技术的发展与应用
摘要:首先本文基于J2EE体系结构介绍在开发中使用编程语言与数据库进行数据交互的三种方式:使用SQL/JDBC在业务中的硬编码、使用SQL/JDBC在单独的数据类中的硬编码和对象关系映射模式(ORM模式)。其次,介绍使用面向对象编程语言的一种设计模式用于实现对象关系映射技术——DAO设计模式和实现对象关系映射模式设计标准的四个级别。最后,介绍对象关系映射模式的一种实现框架——Hibernate以及它的核心接口和设计原则另外结合DAO设计模式和Hibernate框架建立数据持久层模型以及实现过程流程图。
关键词:JAVA;ORM;DAO;Hibernate
Development and application of object-relational
mapping technology
Yaoding Wang
Abstract: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的三层架构
J2EE的三层结构[1,2]是指表示层(Presentation),业务逻辑层(Businesss Login)以及基础架构层(Infrastruelure)。但是在实际项目中,往往会对三层体系结构做一些扩展为五层体系,即表示层(Presentation)、控制/中介层(Controller/Mediator)、领域层(Domain)、数据持久层(Data Persistence)和数据源层(Data Source)。五层体系实际上实在三层架构的中层增加了两个中间层。控制/中介层位于表示层和领域层之间,数据持久层位于领域层和基础架构层之间,体系结构如图1所示:
遵从J2EE的N层体系结构[3]的应用程序会因为减少了内部的耦合而提高其健壮性。如图1所示,如果用户接口层要获得信息,必须与业务层的对象交互,然后在通过业务层对象从持久层获得存储在持久机制中的对象。J2EE体系结构的一个重要特点是就是通过禁止用户层与持久结构解耦。通过将程序的业务逻辑封装到业务类中而不是用户接口
类中,可以在多处使用这些业务逻辑,从而提高应用程序的复用性。所以,合理设计持久层是一个至关重要的问题。
图1 J2EE的N层体系结构图
2、数据持久层的集中解决方案
2.1 使用SQL/JDBC在开发中的硬编码
使用SQL/JDBC[4]在开发中硬编码数据流示意图如图2所示,这种模式实际上是在开发语言中直接编写SQL语句对数据库[5]进行操作,这种模式的好处是写代码效率很高,对于小型应用程序或者原型是可行的。缺点是直接耦合了的业务类与关系数据库结构,这意味着任何一个小的改变(例如对某一列重命名或者移植到另外一种数据库)都导致源代码级的修改,使代码难于维护和扩展。
图2 SQL/JDBC对数据库的操作
2.2使用SQL/JDBC 在单独的数据类中硬编码。
用SQL/JDBC在单独的数据类中硬编码数据流示意如图3所示,在这种方法中,业务类的SQL/JDBC语句被封装在一个或者多个“数据类”中。这使得业务类不用直接跟数据库进行交互,但是在对数据进行改动后,仍然需要修改和重新编译数据类。这种方法也只适合原型或者小型(少于40或者50个业务类)的系统。
1
图3 抽象数据类对应的业务类
2.3对象关系映射模式(ORM模式)
对象关系映射模式[6](ORM模式)是Java应用中的对象到关系数据中的表的自动和透明的持久化,使用元数据描述了对象与数据库间的映射。本质上,ORM是将数据从一种表示(双向)装换为另一种。将对象映射到某种持久机制(在这里是关系数据库)并且对关系数据结构的简单改动并不影响面向对象代码的健壮的持久层。
这种方法的优点是应用程序开发者不需要了解关系数据库结构,甚至不需要知道对象是保存在关系数据库中。同时,这种方法支持大规模的针对关键业务的应用程序。
3、DAO和对象关系映射设计模型
设计模式这一概念源于建筑学领域, 目的是为重复出现的问题提供一种最佳解决方案。在软件开发领域, 设计模式表现为一组精心安排的通用的类和对象, 再经过定制和实现就可用来解决特定上下文中的问题。
3.1 DAO设计模式
DAO(Data Access Object)模式称为数据访问对象模式。通常应用于数据库操作的业务逻辑代码中。该模式的本质是向外部提供一个访问数据源的统一接口, 对外隐藏操作数据源的实现细节。这是因为在实际的应用过程中, 应用程序所面对的数据源往往是多种多样的。不同数据源的连接方式、数据访问方式会有明显的差异。这就导致了需要访问数据源的组件的代码实现方式与数据源的类型有着密切的关系。组件和数据源之间的这种紧耦合关系也就导致了整个应用系统难以在不同数据源之间进行迁移。使用DAO模式后, 即使系统需要进行数据源的迁移, 也只需在DAO模式内部进行数据源访问代码的修改, 而不会涉及上层调用代码, 这样就提高了软件的可维护性。
2