`
zhuzhiguosnail
  • 浏览: 107845 次
  • 性别: 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
分享到:
评论

相关推荐

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

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

    java 编程入门思考

    12.2.9 使克隆具有更大的深度 12.2.10 为什么有这个奇怪的设计 12.3 克隆的控制 12.3.1 副本构建器 12.4 只读类 12.4.1 创建只读类 12.4.2 “一成不变”的弊端 12.4.3 不变字串 12.4.4 String和StringBuffer类 12.4....

    毕业设计Java网络爬虫(蜘蛛)源码

    - **持久化存储**:支持将抓取的数据存储到MySQL、MongoDB等数据库,或者保存为本地文件,如CSV、JSON格式。 - **可配置性**:允许用户通过配置文件定制爬虫行为,如指定目标网站、抓取深度、请求间隔等。 - **错误...

    Java初学者入门教学

    12.2.9 使克隆具有更大的深度 12.2.10 为什么有这个奇怪的设计 12.3 克隆的控制 12.3.1 副本构建器 12.4 只读类 12.4.1 创建只读类 12.4.2 “一成不变”的弊端 12.4.3 不变字串 12.4.4 String和StringBuffer类 12.4....

    java联想(中文)

    12.2.9 使克隆具有更大的深度 12.2.10 为什么有这个奇怪的设计 12.3 克隆的控制 12.3.1 副本构建器 12.4 只读类 12.4.1 创建只读类 12.4.2 “一成不变”的弊端 12.4.3 不变字串 12.4.4 String和StringBuffer类 12.4....

    JAVA_Thinking in Java

    12.2.9 使克隆具有更大的深度 12.2.10 为什么有这个奇怪的设计 12.3 克隆的控制 12.3.1 副本构建器 12.4 只读类 12.4.1 创建只读类 12.4.2 “一成不变”的弊端 12.4.3 不变字串 12.4.4 String和StringBuffer类 12.4....

    Thinking in Java简体中文(全)

    12.2.9 使克隆具有更大的深度 12.2.10 为什么有这个奇怪的设计 12.3 克隆的控制 12.3.1 副本构建器 12.4 只读类 12.4.1 创建只读类 12.4.2 “一成不变”的弊端 12.4.3 不变字串 12.4.4 String和StringBuffer类 12.4....

    Thinking in Java 中文第四版+习题答案

    12.2.9 使克隆具有更大的深度 12.2.10 为什么有这个奇怪的设计 12.3 克隆的控制 12.3.1 副本构建器 12.4 只读类 12.4.1 创建只读类 12.4.2 “一成不变”的弊端 12.4.3 不变字串 12.4.4 String和StringBuffer类 12.4....

    Spring MVC Cookbook.pdf英文版

    本书由浅入深地介绍了当今流行的Java Web框架Spring MVC的方方面面,从基础的环境搭建到微服务设计与架构,再到持久化、REST API构建、认证与测试……涵盖了Spring MVC诸多重要且常用的特性。值得一提的是,本书针对...

    mybatis3.x源码深度解析与最佳实践.pdf

    MyBatis是当前最流行的Java持久层框架之一,其通过XML配置的方式消除了绝大部分JDBC重复代码以及参数的设置,结果集的映射。为了更好地学习和理解MyBatis背后的设计思路,有必要深入研究了解优秀框架的源码,以便更...

    JAVA_Thinking in Java(中文版 由yyc,spirit整理).chm

    JAVA_Thinking in Java(中文版 由yyc,spirit整理).chm ------------------------------------------------- 本教程由yyc,spirit整理 ------------------------------------------------- “Thinking in Java...

    Think in Java(中文版)chm格式

    12.2.9 使克隆具有更大的深度 12.2.10 为什么有这个奇怪的设计 12.3 克隆的控制 12.3.1 副本构建器 12.4 只读类 12.4.1 创建只读类 12.4.2 “一成不变”的弊端 12.4.3 不变字串 12.4.4 String和StringBuffer...

    Thinking in Java(中文版 由yyc,spirit整理).chm

    12.2.9 使克隆具有更大的深度 12.2.10 为什么有这个奇怪的设计 12.3 克隆的控制 12.3.1 副本构建器 12.4 只读类 12.4.1 创建只读类 12.4.2 “一成不变”的弊端 12.4.3 不变字串 12.4.4 String和StringBuffer类 12.4....

    ThinkInJava

    12.2.9 使克隆具有更大的深度 12.2.10 为什么有这个奇怪的设计 12.3 克隆的控制 12.3.1 副本构建器 12.4 只读类 12.4.1 创建只读类 12.4.2 “一成不变”的弊端 12.4.3 不变字串 12.4.4 String和StringBuffer类 12.4....

    thinkinjava

    12.2.9 使克隆具有更大的深度 12.2.10 为什么有这个奇怪的设计 12.3 克隆的控制 12.3.1 副本构建器 12.4 只读类 12.4.1 创建只读类 12.4.2 “一成不变”的弊端 12.4.3 不变字串 12.4.4 String和StringBuffer类 12.4....

    Spring.3.x企业应用开发实战(完整版).part2

    8.3.2 Spring为不同持久化技术所提供的模板类 8.4 数据源 8.4.1 配置一个数据源 8.4.2 获取JNDI数据源 8.4.3 Spring的数据源实现类 8.5 小结 第9章 Spring的事务管理 9.1 数据库事务基础知识 9.1.1 何为数据库事务 ...

Global site tag (gtag.js) - Google Analytics