`
forhope
  • 浏览: 360369 次
  • 性别: Icon_minigender_1
  • 来自: 帝都
社区版块
存档分类
最新评论
阅读更多
三. java中常用域对象持久化技术的比较 
  目前java中共有5种常用的实现持久化的模式: 
    1 jdbc直接访问数据库 
    2 主动域对象模式 
    3 cmp模式 
    4 orm模式 
    5 jdo模式

1、 jdbc实现数据库访问的方式是在业务方法中直接嵌入sql语句,sql语句是面向关系的,依赖于关系模型。所以jdbc方式的优点是简单直接,特别是对于小型应用十分方便。 
但是jdbc这种实现方式也给应用程序带来以下缺点: 
(1)、实现业务逻辑的代码和数据库访问代码掺杂在一起,使程序结构不清晰,可读性差。 
(2)、在程序代码中嵌入面向关系的sql语句,使开发人员不能完全运用面向对象的思维来编写程序。 
(3)、业务逻辑和关系数据模型绑定,如果关系数据发生变化,必须手工修改代码中所有相关的sql语句,这曾经了维护软件的难度。 
(4)、如果程序代码中sql语句包含语法错误,在编译时不能检查这种错误,只有在运行时才能发现这种错误,这增加了调试程序的难度。 
正是由于上述的缺点,为了使业务逻辑和数据访问细节分离,出现了下面的几种模式。 

2、主动域对象模式 
主动域对象是实体域对象的一种形式,它在实现中封装了关系数据模型和数据访问的细节。在 j2ee 架构中,ejb组件分为会话ejb和实体ejb。会话ejb通常实现业务逻辑,而实体ejb表示业务实体。实体ejb又分为两种:由ejb本身管理持久化,即bmp(bean-managed persistence);由ejb容器管理持久化,即cmp(container-managed persistence)。bm p就是主动域对象模式的一个例子,bmp 表示由实体 ejb 自身管理数据访问细节。 
主动域对象模式有以下优点: 
(1)、在实体域对象中封装自身的数据访问细节,过程域对象完全负责业务逻辑,使程序结构更加清晰。 
(2)、如果关系数据模式发生变化,只需要修改主动域对象的代码,不需要修改过程域对象的业务方法。 
主动域对象模式有以下缺点: 
(1)、在实体域对象的实现中仍然包含sql语句。 
(2)、每个实体域对象都负责自身的数据访问实现。把这一职责分散在多个对象中,这会导致实体域对象重复实现一些共同的数据访问操作,从而造成重复编码。 
主动域对象本身位于业务逻辑层,因此采用主动域对象模式时,整个应用仍然是三层应用结构,并没有从业务逻辑层分离出独立的持久化层。 
3.cmp模式 
在j2ee架构中,cmp(container-managed persistence)表示由ejb容器来管理实体ejb 的持久化,ejb容器封装了对象-关系的映射及数据访问细节。cmp 和orm的相似之处在于,两者都提供对象-关系映射服务,都把对象持久化的任务从业务逻辑中分离出来。区别在于cmp负责持久化实体ejb组件,而orm负责持久化 pojo,它是普通的基于 java bean 形式的实体域对象。 
cmp模式的优点在于: 
(1)、他是基于ejb技术,是sun j2ee体系的核心部分,获得了业界的普遍支持,包括各大厂商和开源组织等。如果选择它作企业级开发,技术支持会非常完备。 
(2)、功能日趋完善,包括了完善的事务支持,ejbql查询语言,透明的分布式访问等等 
cmp模式的缺点在于: 
(1)、开发人员开发的实体必须遵守复杂的j2ee规范,而多少orm中间件没有类似要求。 
(2)、实体域ejb只能运行在ejb容器中,而pojo可以运行在任何一种java环境中。 
(3)、尽管按照j2ee的规范,ejb应该是一种可移植组件,实际应用时确受到很大限制。而orm中间件就不存在这样的问题。 
4.orm模式 
orm-object/relational mapper,即“对象-关系型数据映射组件”。对于o/r,即 object(对象)和 relational(关系型数据),表示必须同时使用面向对象和关系型数据进行开发。建模领域中的 orm 为 object/role modeling(对象角色建模)。另外这里是“o/r mapper”而非“o/r mapping”。相对来讲,o/r mapping 描述的是一种设计思想或者实现机制,而 o/r mapper指以o/r原理设计的持久化框架(framework),包括 o/r机制、sql自生成、事务处理和cache管理等。 
一般把基于 java bean 形式的实体域对象称为 pojo(plain old java object),意为又普通又古老的 java 对象的意思。随着各种 orm 映射工具的日趋成熟和流行,pojo有重现光彩,它和基于 cmp 的实体 ejb 相比,既简单又具有很高的可移植性,因此联合使用orm 映射工具和 pojo,已经成为一种越来越受欢迎的且用来取代 cmp 的持久化方案。pojo的缺点就是无法做远程调用,不支持分布式计算。 
常用的orm中间件有:hibernate、apache ojb、cayenne、jaxor、toplink等。其中 hibernate 的轻量级 orm 模型逐步确立了在 java orm 架构中领导地位,甚至取代复杂而又繁琐的 ejb 模型而成为事实上的 java orm 工业标准。而且其中的许多设计均被 j2ee 标准组织吸纳而成为最新 ejb 3.0 规范的标准。 
5.jdo模式 
jdo是近几年新兴的数据持久性技术,java data objects(jdo)是 sun 公司制定的描述对象持久化语义的标准api。严格的说,jdo 并不是对象-关系映射接口,因为它支持把对象持久化到任意一种存储系统中,包括关系数据库、面向对象的数据库、基于xml的数据库,以及其他专有存储系统。由于关系数据库是目前最流行的存储系统,许多jdo的实现都包含了对象-关系映射服务。 jdo模式的优点是: 
(1)、简单易用,不需要写大量无用的接口,不需要继承什么特殊的类,唯一所要做的就是对你的class文件做一下enhance。 
(2)、真正面向对象。用了jdo的java程序是真正的面向对象,无需再理会数据库里面有什么表格,存取都是以java object为对象,所有数据库表格都是自动生成的。 
(3)、方便的数据库移植。应用程序换数据库时候除了换一个jdbc driver, 换一下数据库url,无需对程序做任何改动。 
jdo模式的缺点是: 
由于是新兴技术,一些it巨头还没有给予足够的支持,其中包括ibm、oracle、bea。 
四. 总结 
关于这些技术优劣之争从它们刚刚出生那天起从来就没有停止过,而各家各派也从来没有能够说服过对方。对于应用开发者而言,撇开应用纯粹来争论技术优劣并没有多大意义。没有最好的,只有最合适的。在做开发的时候能够选择一个最合适于自己应用的技术,那就足够了。总的来说,jdbc面向rdbms,比较适合关系数据库模式驱动的应用,例如统计表格数据,生成报表之类的应用。ejb 技术以j2ee应用服务器为中心,如果应用确实需要灵活的可声明的事务边界,需要支持大容量的访问和不间断的服务,需要应用服务器的集群,那么选ejb吧。jdo则面向对象,对于以域对象为中心的应用,包含图,树模型的应用,jdo是首选。
分享到:
评论

相关推荐

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

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

    JPA学习笔记-EJB-05JPA实体对象状态和实体对象的高级操作

    虽然持久化实体的状态在ORM中是一个老生常谈的问题,但是说实在的,我们在开发过程中真的不太在意实体的状态。在Web一般情况下也都是交给Spring去管理实体管理器(EntityManager),所以我们还是有必要啰嗦一下,...

    [java]读书笔记整理:一切都是对象

    在“持久化对象”中,对象被存放于磁盘上,因此,即使程序终止,它们仍可以保持自己的状态。这种存储方式的技巧在于:把对象转化成可以存放在其他媒介上的事物,在需要时,可恢复成常规的,基于RAM的对象。Java 提供...

    hibernate笔记

    hibernate笔记学习笔记 主要内用 :对象持久化,映射,对象状态管理HQL,批处理,级联操作

    hibernate初学者笔记

    关于hibernate的Session,向数据插入时的事务隔离级别,持久化对象的状态,对应关系的映射文件,表与表之间的多种映射关系,以及hibernate的二级缓存的笔记。

    Hibernate笔记.doc

    《精通Hibernate:Java对象持久化技术详解》的第4章,第7,8,9,10,11章的笔记.

    Hibernate3 学习笔记.ppt

    Hibernate3 学习笔记.ppt 一、O/R Mapping 二、Hibernate入门 三、Hibernate映射申明(Mapping declaration) ...五、持久化对象的状态和生命周期 六、Hibernate查询 七、Hibernate最佳实践 八、Hibernate Tool

    Spring Data JPA笔记.zip

    JPA 的全称是 Java Persistence API, 即 Java 持久化 API,是 SUN 公司推出的一套基于 ORM 的规范,内部是由一系列的接口和抽象类构成。JPA 的查询语言是面向对象而非面向数据库的,它以面向对象的自然语法构造查询...

    javaMybatis个人整理(印象笔记导入即可)

    采用 ORM思想解决了实体和数据库映射的问题,对 Jdbc进行了封装,屏蔽了 Jdbc Api底层访问细节,使我们不用与 Jdbc Api 打交道,就可以完成对数据库的持久化操作。为了我们能够更好掌握框架运行的内部过程,并且有更...

    neo4j安装使用笔记.docx

    它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中。Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性。...

    Redis全套学习笔记

    Redis全套学习笔记,分享的是整理的《Redis 全套学习笔记.pdf》,图文并茂,特别详细,基本上涵盖了 Redis 所有知识点。...2、redis虽然数据的读取都存在内存当中,但是最终它是支持数据持久化到磁盘当中。

    Hibernate---我的Hibernate学习笔记

    数据表现层业务逻辑层数据持久层SUN的桌面应用SwingAWT普通Java类JDBCSUN的WEB基本应用JSP普通ServletJDBCSUN的WEB高级应用JSFSessionBeanPersistenceWEB国内流行开源StrutsSpringHibernate一、对象持久化的理论1....

    hibernate_上课笔记.zip

    Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的JaveEE架构中取代CMP,完成数据持久化的重任。

    学习笔记,hibernate框架入门

    Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的JaveEE架构中取代CMP,完成数据持久化的重任。

    JPA深度刘宝宝剖析版第一讲

    Java Persistence API:用于对象持久化的 API Java EE 5.0 平台标准的 ORM 规范,使得应用程序以统一的方式访问持久层 JPA的优势: 标准化: 提供相同的 API,这保证了基于JPA 开发的企业应用能够经过少量的修改就...

    hibernate 笔记

    Hibernate可以应用在任何使用JDBC的场合,既可以在Java的客户端程序使用,也可以在Servlet/JSP的Web应用中使用,最具革命意义的是,Hibernate可以在应用EJB的J2EE架构中取代CMP,完成数据持久化的重任。

    Java/JavaEE 学习笔记

    第四章 操纵持久化对象..................190 第五章 事务控制...191 第六章 高级映射...192 第七章 高级查询...196 HTML&java; script学习笔记.....................198 HTML: 超文本标记语言.......................

    NHibernate学习笔记

    NHibernate 是一个面向.NET 环境的对象/关系数据库映射工具。...NHibernate的目标是对于开发者通常的数据持久化相关的编程任务,解放其中的95%。并请记住NHibernate作为数据库访问层,是与你的程序紧密集成的。

    Java JDBC由浅入深

    当今orm等全自动针对对象持久化的框架越来越多并且也越来越成熟(ibatis,hibernate,ejb的jpa),但是无奈新东家需要使用jdbc(原始手工作坊)的模式和数据库打交道,用了几年的ibatis,再次使用jdbc发现有些细节和...

Global site tag (gtag.js) - Google Analytics