. 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是首选。
分享到:
相关推荐
Java持久化是编程领域中一个重要的概念,主要指的是将Java对象的数据存储到持久化存储介质,如数据库中,以便在程序运行的不同阶段都能访问这些数据。在Java中,Hibernate是一个常用的对象关系映射(ORM)框架,它为...
《Java精通Hibernate对象持久化技术权威指南》是一本深度探讨Java开发中如何高效地使用Hibernate进行对象持久化的专业书籍。本书旨在帮助Java开发者熟练掌握Hibernate框架,实现数据库操作的简化和自动化,提升软件...
1.1.5 Java应用的持久化层 1.2 软件的模型 1.2.1 概念模型 1.2.2 关系数据模型 1.2.3 域模型 1.2.4 域对象 1.2.5 域对象之间的关系 1.2.6 域对象的持久化概念 1.3 小结 1.4 思考题 第2章 Java...
Java对象的序列化是Java平台提供的一种持久化机制,它允许将对象的状态转换为字节流,以便存储在磁盘上或在网络中进行传输。这一过程称为序列化,而从字节流恢复对象状态的过程则被称为反序列化。Java序列化不仅仅是...
### 序列化与持久化的相同点与不同点 #### 一、持久化定义与应用场景 **持久化**是指将程序中的数据(如内存中的对象)保存到可长期存储的设备上,比如硬盘或者固态硬盘等。持久化的主要目的是确保即使在程序结束...
《精通Hibernate:Java對象持久化技術詳解》是一本深度解析Hibernate的教程,它旨在帮助Java开发者深入了解和掌握对象关系映射(ORM)技术,特别是通过Hibernate框架实现的持久化机制。Hibernate作为Java领域中广泛...
1.1.5 Java应用的持久化层 1.2 软件的模型 1.2.1 概念模型 1.2.2 关系数据模型 1.2.3 域模型 1.2.4 域对象 1.2.5 域对象之间的关系 1.2.6 域对象的持久化概念 1.3 小结 1.4 思考题 第2章 Java...
1.1.5 Java应用的持久化层 1.2 软件的模型 1.2.1 概念模型 1.2.2 关系数据模型 1.2.3 域模型 1.2.4 域对象 1.2.5 域对象之间的关系 1.2.6 域对象的持久化概念 1.3 小结 1.4 思考题 第2章 Java...
1.1.5 Java应用的持久化层 1.2 软件的模型 1.2.1 概念模型 1.2.2 关系数据模型 1.2.3 域模型 1.2.4 域对象 1.2.5 域对象之间的关系 1.2.6 域对象的持久化概念 1.3 小结 1.4 思考题 第2章 Java...
总的来说,Sentinel-Dashboard1.8 源码的持久化至 Nacos 是一个涉及到服务治理、配置管理以及微服务架构深度理解的实践过程。通过这个实践,你可以更好地掌握 Sentinel 和 Nacos 的使用,同时提升你在服务治理领域的...
《JActor的文件持久化组件JFile深度解析》 在Java编程领域,文件持久化是一项至关重要的技术,它使得程序中的数据能够在系统重启后依然保持,确保了数据的连续性和可靠性。JActor的文件持久化组件JFile正是这样一个...
12. **模块化系统(Jigsaw)**:Java 9引入的模块系统提高了大型应用的组织和封装,理解模块的概念和配置规则有助于构建可维护性更强的软件。 以上只是《Java深度历险》可能涵盖的一部分主题,通过深入学习这些知识...
Java深度探索之旅,是一场对这门强大编程语言的深入剖析。Java,作为一种广泛应用的面向对象的编程语言,以其跨平台、安全性、可移植性等特点,成为开发者的首选工具之一。在这个旅程中,我们将深入理解Java的核心...
Hibernate是一款强大的Java持久化框架,它极大地简化了数据库操作,使得开发者可以专注于业务逻辑的实现,而无需过多关注数据访问的细节。本篇文章将深入探讨Hibernate的核心概念、对象模型与关系数据库模型的差异...
10. **Java对象序列化**:对象序列化是将对象状态转换为字节流的过程,用于持久化存储或网络传输。反序列化则相反,恢复字节流为对象。了解序列化机制有助于实现跨进程或跨网络的对象共享。 以上内容是Java高级开发...
在Java中,实现串行化的主要目的是为了持久化数据,即将内存中的对象状态保存下来,以便在程序后续运行时或者在不同时间点能够恢复这些状态。 在Java中,一个类的对象如果需要被序列化,那么这个类需要实现`...
10. **持久化存储**:系统可能会使用关系型数据库(如MySQL)或NoSQL数据库(如MongoDB)来存储用户信息、音乐元数据和推荐历史,确保数据的安全性和可访问性。 综上所述,这个Java实现的深度学习音乐推荐系统涵盖...
《Android持久化技术:ORMLite库的深度解析》 在Android开发中,数据持久化是一项不可或缺的技术,它使得应用程序能够保存和恢复数据,即使在应用关闭后也能保持数据的状态。ORM(Object-Relational Mapping)作为...