`
Lincoln
  • 浏览: 81091 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

持久曾设计与ORM笔记

阅读更多
持久曾设计与ORM
ORM概述
     ORM可以说是目前比较热点的话题,所谓ORM-Object/Releational Mapper(这里请注意与建模领域中的Object Role Modeling相区分。另外注意这里出现的术语时“O/R Mapper”,而非最常见的“O/R Mapping”。相对来讲,O/R Mapping描述的是一种设计思想或者实现机制,在这一点上,与我们上面所说的“O/R”的含义实际上一致。而“O/R Mapper”一般指 根据O/R原理设计的持久化框架,其中包含了除O/R本身之外的更多内容,如SQL自生成,事务管理,Cache管理等。),从字面上来理解,即“对象-关系型数据映射组件”。
     首先来看O/R,这其中包含两个关键词:Object(对象)和Rational(关系型数据)。在目前的应用系统中,大多数情况下,我们都必须同时面对对象和关系型数据进行开发。
     在业务罗辑层和表示层,我们将系统中的各参与失蹄进行面向对象的封装,并籍此将现实世界中的逻辑进行高度抽象后,以计算机语言实现。而另一方面,在数据持久层,迫于目前数据库技术发展的现实,我们必须在现有的关系型数据库模型上进行持久化实现。
一个问题自然浮现,我们应该如何面向对象的设计与传统关系型数据进行整合?
之前讨论“解耦合”思想与DAO模式的时候,实际上我们已经面对这个问题。回忆一下之前的描述:
DAO模式实际上是两个模式的组合,即Data Accessor模式和Active Domain Object模式,其中Data Accessor模式实现了数据访问和业务逻辑的分离,而Active Domain Object实现了业务数据的对象化封装。
在前面的例子中,Customer类,即所谓的Domian Class/Object,对系统中的“用户”对象进行了抽象封装。系统运行过程中,Customer对象实例作为”用户”的抽象代表,扮演着虚拟世界中的一个角色。
同时,在我们的系统中,还需要将Customer实例的信息,也就是所谓的”用户数据”进行持久化,保存到数据库以供日后之用。于是,在上面的就绝方案中,我们引入Data Accessor(数据访问类),实现对象到关系型数据库之间的持久化。
上述设计中,Customer类的属性信息与数据库表字段之间的对应,也就是O/R关系得一个实例。
从这个简单实例中,我们可以看到,为了实现持久化支持,我们必须编写对应得Data Accessor以实现数据的增删改查(CRUD-Create Retrieve Update Delete)。繁琐的JDBC代码难以避免。
O/R Mapper的出现则解决了这一问题。

持久层实现类型

一般来讲,持久层实现有3种类型。

混杂模式
混杂模式是持久化功能的原始实现模式。即在业务类中混杂JDBC访问代码,从而提供所需的持久化功能。
在前面“解耦合思想的自然演进”一节的第一个实例中,我们已经看到了这样的例子。
业务代码中混杂了基于JDBC编码的持久化实现。
那么,这种方式的持久层实现,这里就称之为混杂模式,如图 所示。


这种模式的优点在于开发的迅速便捷。对于原型系统或者小型应用而言显得别具意义。但我们也应该看到,基于这种模式开发的系统,其维护性和扩展性较差,对象属性,数据库结构的变动都将直接导致业务逻辑代码的修改。
实际上,在这种模式中,我们并不能清晰地分辨出所谓“持久层”的逻辑层次。

基于Data Class 的持久层实现模式
在这种模式中,数据类(Data Class) 作为业务类与持久层沟通的桥梁,起着承上起下的作用。
之前所讨论的DAO模式案例,实际上就是这种模式的一个典型实现。Data Class实际上包含了DAO模式中的Domian Class/Object 和Data Accessor Class。
Domian Class作为对现实世界的抽象,起着信息携带者的作用。而Data Accessor Class则通过JDBC代码将 Domian Class与数据库表相关联。

这种模式如图1-10所示。



在这种模式中,我们实现了业务逻辑与底层数据结构之间的分离。Data Class作为一个相对独立里的逻辑层次,较为清晰的体现了所谓持久层的概念。底层关系数据的结构变化,可以较好地屏蔽在数据类这个层次,从而避免对上层的业务逻辑造成影响。

实际上,目前正在运行的很多Java企业应用系统中,基于这种类型的设计占了很大比重。
而这种模型的缺陷也显而易见,随着设计层次的增多,编码量的增加相当可观。相对第一种混杂模式而言,系统结构上得到较大提升的同时,项目设计和开发成本也相应增高。

繁杂的JDBC代码总得有人去编写,单纯依靠自身力量进行设计和编码,这样的问题难以避免。
所幸,我们不是孤身作战。Sun J2EE 规范制定小组以及开源群体中的众多力量已经深刻的体会到了这一点,于是我们拥有了Entity Bean,JDO,Hibernate,iBatis,Apache OJB
这些杰出的持久层框架。而基于这些成熟可靠的第三方框架,我们得以从设计与工作量之间的平衡难点中解脱。于是,有了下面的第三种解决方案。

基于现有持久层框架的实现模式
实际上,这种模式是第二种模式的延伸。Data Classes所包含的Data Accessor和Domain Class数量并没有减少。
只是,我们把其中最为繁琐的工作——基于JDBC的OR映射工作,交由第三方完成。
Data Accessor中的繁琐编码工作因此得到了空前简化,而与此同时,伴随持久层框架而来的辅助工具也大大减轻了Domain Class的编码负担。
这种实现模式如图1-11所示。
[img] http://hiphotos.baidu.com/wanjin/abpic/item/8e46123be9e02aea14cecb50.jpg[/img]
分享到:
评论
1 楼 zengqiang 2008-12-15  

相关推荐

    学习笔记之什么是持久化和对象关系映射ORM技术

    学习笔记之什么是持久化和对象关系映射ORM技术,什么是所谓的持久化,什么是ORM

    课程设计云笔记系统SSH

    在这个"课程设计云笔记系统SSH"中,SSH框架被用来实现一个云笔记系统,提供了一个完整的解决方案,包括视图、控制和持久层。 1. **Struts2**:Struts2是MVC(模型-视图-控制器)架构模式的一种实现,负责处理用户的...

    持久层框架ibatis学习笔记

    ### 与 Spring 框架整合,完成 MVC 设计结构 iBatis 可以轻松地与 Spring 框架集成,构建出典型的 MVC 架构。具体步骤如下: 1. **配置 DataSource**:在 Spring 配置文件中定义 DataSource。 2. **配置 ...

    hibernate培训笔记.docx

    Hibernate不仅仅是一个ORM框架,它还包含了丰富的持久层设计模式,如单位-of-work、数据访问对象(DAO)、贫血模型和富模型等。这些模式帮助开发者更好地组织和管理数据库操作。 ### 持久层设计 持久层是应用程序...

    SpringMVC+mybatis+mysql的云笔记

    本篇文章将深入探讨如何使用这三大核心技术构建一个功能完善的云笔记系统,包括发布文本、视频和图片笔记,以及实现收藏笔记等功能,并介绍一个采用扁平化设计的后台管理系统。 一、SpringMVC框架 SpringMVC作为...

    Struts2笔记+Hibernate3.6笔记+Spring3笔记

    Struts2是MVC(模型-视图-控制器)设计模式的一个实现,它为Java Web开发提供了强大的控制层。Struts2的核心是Action类,它处理用户请求并调用业务逻辑。以下是一些关键知识点: 1. **FilterDispatcher**: Struts2...

    达内的全部笔记达内的全部笔记

    笔记可能涉及实体管理、配置文件、对象持久化、HQL语言、一对多、多对一、多对多的关系映射等。 5. **10_1. HTML note.txt**:HTML(超文本标记语言)是网页的基础。笔记可能包括HTML元素、标签、属性、表格、图像...

    hibernate个人学习笔记完整版

    【hibernate个人学习笔记完整版】是一份详尽的资料,涵盖了Hibernate框架的基础到高级应用,旨在帮助学习者深入理解和掌握这一强大的Java对象关系映射(ORM)工具。Hibernate作为Java开发中的主流ORM框架,它极大地...

    毕业论文jsp108笔记本管理系统(ssm).doc

    Spring框架提供了一个灵活的框架来管理业务逻辑,Struts框架提供了一个基于MVC模式的表现层框架,Hibernate框架提供了一个基于ORM(Object-Relational Mapping)的持久层框架。 需求分析 笔记本管理系统的需求...

    Hibernate笔记完整版

    《Hibernate笔记完整版》 在Web开发领域,Hibernate作为三大框架之一,扮演着至关重要的角色。本文将全面介绍Hibernate,包括其数据持久化的概念、优缺点对比,以及Hibernate的核心概念和编程步骤。 对象持久化是...

    云笔记项目

    在云笔记项目中,Hibernate用于将笔记对象持久化到数据库中,实现数据的存储和检索。 项目的【压缩包子文件的文件名称列表】包括`cloudnote`和`cloud_note`。这可能是项目源代码的主目录和相关资源文件,例如配置...

    hibernate培训笔记.pdf

    Hibernate,一个著名的Java ORM(对象关系映射)框架,自2001年发布以来,已经成为Java开发中持久层设计的重要工具。它的出现旨在解决JDBC和实体Bean在处理对象与关系数据时的局限性,提供更高效、灵活的持久化机制...

    传播智客-mybatis课堂笔记(2天)

    这个“传播智客-mybatis课堂笔记(2天)”文件是专为1222班学员设计的,旨在深入理解和掌握MyBatis的核心概念和实用技术。以下是对笔记内容的详细概述: 1. MyBatis简介:MyBatis是由Clinton Begin创建的,它不是一...

    最全SSH笔记汇总

    在数据访问方面,Spring JDBC和ORM模块支持与各种持久化技术集成,包括Hibernate。Spring MVC是Spring提供的Web MVC框架,它与Struts2类似,但更强调组件的可配置性和可测试性。 本笔记汇总将详细阐述这三个框架的...

    SSH-框架笔记

    **Hibernate框架**:Hibernate是一个对象关系映射(ORM)工具,它将Java对象与数据库表进行映射,简化了数据层的操作。开发者可以通过操作Java对象,而无需编写SQL语句,Hibernate会自动完成数据的持久化。它支持...

    SSH学习笔记3 SSH学习笔记3

    HIBERNATE负责与数据库交互,通过ORM机制将Java对象持久化到数据库中。 学习SSH框架,你需要掌握以下几个关键知识点: 1. STRUTS的配置文件解析,理解Action和ActionForm的工作原理。 2. SPING的IoC和AOP概念,...

    Node.js-萌音云笔记-一个高效的在线云笔记专注技术文档在线创作阅读分享和托管

    **API设计与RESTful原则** 萌音云笔记的后端API应该遵循RESTful架构风格,这意味着每个资源都有一个唯一的URI,通过HTTP方法(GET、POST、PUT、DELETE)进行操作。这有助于保持接口清晰,易于理解和使用。 **安全...

    云笔记源码含数据库

    3. **Hibernate3.2.6.ga**:Hibernate是一个对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间的交互。在这个项目中,Hibernate负责将Java对象映射到数据库表,实现了数据持久化。通过阅读源码,你可以...

    hibernate 超级经典笔记

    笔记首先介绍了ORM的概念,解释了为什么我们需要ORM,以及Hibernate在Java应用中的重要地位。 笔记详细讲解了Hibernate的安装与配置,包括设置环境变量、创建Hibernate配置文件以及连接数据库。这部分内容对于初次...

    【狂神说】mybatis学习总结笔记(全)PDF格式文档 MyBatis.pdf

    * 提供映射标签,支持对象与数据库的ORM字段关系映射 * 提供对象关系映射标签,支持对象关系组建维护 * 提供XML标签,支持编写动态SQL * 使用的人多 MyBatis的历史: * iBatis是Apache的一个开源项目 * 2010年,...

Global site tag (gtag.js) - Google Analytics