`
zhuzhiguosnail
  • 浏览: 110414 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Java持久化深度理解

阅读更多
. 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是首选。
0
0
分享到:
评论

相关推荐

    java持久化.pdf

    Java持久化是编程领域中一个重要的概念,主要指的是将Java对象的数据存储到持久化存储介质,如数据库中,以便在程序运行的不同阶段都能访问这些数据。在Java中,Hibernate是一个常用的对象关系映射(ORM)框架,它为...

    Java 精通Hibernate对象持久化技术权威指南

    《Java精通Hibernate对象持久化技术权威指南》是一本深度探讨Java开发中如何高效地使用Hibernate进行对象持久化的专业书籍。本书旨在帮助Java开发者熟练掌握Hibernate框架,实现数据库操作的简化和自动化,提升软件...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part2

     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平台提供的一种持久化机制,它允许将对象的状态转换为字节流,以便存储在磁盘上或在网络中进行传输。这一过程称为序列化,而从字节流恢复对象状态的过程则被称为反序列化。Java序列化不仅仅是...

    序列化与持久化相同点跟不同点

    ### 序列化与持久化的相同点与不同点 #### 一、持久化定义与应用场景 **持久化**是指将程序中的数据(如内存中的对象)保存到可长期存储的设备上,比如硬盘或者固态硬盘等。持久化的主要目的是确保即使在程序结束...

    精通Hibernate:Java對象持久化技術詳解

    《精通Hibernate:Java對象持久化技術詳解》是一本深度解析Hibernate的教程,它旨在帮助Java开发者深入了解和掌握对象关系映射(ORM)技术,特别是通过Hibernate框架实现的持久化机制。Hibernate作为Java领域中广泛...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part4

     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...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part3

     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...

    精通 Hibernate:Java 对象持久化技术详解(第2版).part1.rar

     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源码

    总的来说,Sentinel-Dashboard1.8 源码的持久化至 Nacos 是一个涉及到服务治理、配置管理以及微服务架构深度理解的实践过程。通过这个实践,你可以更好地掌握 Sentinel 和 Nacos 的使用,同时提升你在服务治理领域的...

    JActor的文件持久化组件 JFile.7z

    《JActor的文件持久化组件JFile深度解析》 在Java编程领域,文件持久化是一项至关重要的技术,它使得程序中的数据能够在系统重启后依然保持,确保了数据的连续性和可靠性。JActor的文件持久化组件JFile正是这样一个...

    《java 深度历险》

    12. **模块化系统(Jigsaw)**:Java 9引入的模块系统提高了大型应用的组织和封装,理解模块的概念和配置规则有助于构建可维护性更强的软件。 以上只是《Java深度历险》可能涵盖的一部分主题,通过深入学习这些知识...

    java深度入险

    Java深度探索之旅,是一场对这门强大编程语言的深入剖析。Java,作为一种广泛应用的面向对象的编程语言,以其跨平台、安全性、可移植性等特点,成为开发者的首选工具之一。在这个旅程中,我们将深入理解Java的核心...

    Java开源项目Hibernate深度探险

    Hibernate是一款强大的Java持久化框架,它极大地简化了数据库操作,使得开发者可以专注于业务逻辑的实现,而无需过多关注数据访问的细节。本篇文章将深入探讨Hibernate的核心概念、对象模型与关系数据库模型的差异...

    java深度历险

    10. **Java对象序列化**:对象序列化是将对象状态转换为字节流的过程,用于持久化存储或网络传输。反序列化则相反,恢复字节流为对象。了解序列化机制有助于实现跨进程或跨网络的对象共享。 以上内容是Java高级开发...

    【IT十八掌徐培成】Java基础第16天-03.串行化-深度复制.zip

    在Java中,实现串行化的主要目的是为了持久化数据,即将内存中的对象状态保存下来,以便在程序后续运行时或者在不同时间点能够恢复这些状态。 在Java中,一个类的对象如果需要被序列化,那么这个类需要实现`...

    基于Java实现深度学习的智能音乐推荐系统源码.zip

    10. **持久化存储**:系统可能会使用关系型数据库(如MySQL)或NoSQL数据库(如MongoDB)来存储用户信息、音乐元数据和推荐历史,确保数据的安全性和可访问性。 综上所述,这个Java实现的深度学习音乐推荐系统涵盖...

    android持久化 ormlite-android-4.31.jar

    《Android持久化技术:ORMLite库的深度解析》 在Android开发中,数据持久化是一项不可或缺的技术,它使得应用程序能够保存和恢复数据,即使在应用关闭后也能保持数据的状态。ORM(Object-Relational Mapping)作为...

Global site tag (gtag.js) - Google Analytics