持久化的一些相关概念

转自:http://www.iteye.com/topic/68651

author:bilo

微笑


一、JDBC & ORM

        JDBC提供了一套API,以统一的方式访问各种异构的数据库。在这方面它的功能极佳,并比其他的数据库连接API易于使用,但它同时也被设计为一种基础接口,在它之上可以建立高级接口和工具。使用JDBC对数据库中的数据进行增加、删除和修改的操作就是持久化的过程。
        然而,直接使用JDBC作为持久层有一些难以解决的问题,这些问题包括繁琐的代码、表间连接、级联以及层与层之间的耦合严重等问题,在这种情况下就需要ORM来对数据库进行持久化。

       O/R Mapping(Object-Relational Mapping,ORM),其作用是在关系型数据库和类对象之间做映射。通过这个映射,做具体数据库操作时,就不用再和复杂的SQL语句打交道,只要像平时操作对象一样来操作即可,是当今最流行一种数据库持久化方案(另一种则是JDO,它基于字节码增强来实现持久化),如Hibernate,iBATIS。


二、DAO(Data Access Object)

        DAO(Data Access Object)数据访问对象,作为很早就出现的一种模式,至今仍然非常有用。他的作用是全权承担业务逻辑的持久化操作。每一个领域模型就对应一个DAO操作(或者说每一个表就对应一个可操纵数据库的DAO对象)。DAO模式好处在于,将JDBC从业务逻辑中隐藏起来,业务逻辑不再关心象JDBC这样的底层操作,全权将其交给DAO处理,你可以很清楚的看到那些持久化对象被取出创建或者修改。而当你需要更改数据库或者栏位的时候,你只需要改掉DAO就好,而不需要重写你的业务逻辑。
        然而,这样的DAO实现其本质就是在JDBC之上实现了一层薄薄的封装,对于现在复杂而厚重的商业逻辑持久化来说,它看起来确实显得“单薄”了些。基于DAO这种简单的实现依然有很多问题,“透明持久化”概念提供了更优雅的解决方案。


三、Transparent Persistence(透明持久化)

        “透明持久化”通常由框架来实现,而不是由应用本身来关心。它能完全剥离业务的持久化操作,仅仅只需提供一个接口供业务逻辑调用(如Hibernate的Session,JDO的PersistenceManger——JDO并不是基于O/R映射,而是基于字节码增强来实现透明持久化的,iBATIS的SqlMap对象等)。它可能还有自己特殊的语意(如Hibernate的HQL,因为它必须自己实现真正的SQL,提供的HQL可以简化这一过程,同时也简化了业务逻辑持久化时的工作量)。

        虽然实现“透明持久化”方案非常复杂,但我们不需要重新发明轮子,多数情况下,Hibernate,iBATIS,JDO实现已经完全可以满足我们的持久化需求。


四、关于Hibernate,iBATIS和JDO
        Hibernate,iBATIS都是基于O/R映射的,但两者却非常的不同。
        iBATIS是SQL的映射,其设计理念为:将SQL语句在XML中定义,并预留占位符(可以指定参数的SQL类型和其他细节)。在执行时,占位符被指定的参数值所取代,参数来至参数映射表、JAVABEAN属性或者搜简单的参数对象。在执行SQL查询时,结果字段将被映射到对象,映射的方式与参数映射是一样的。
        而Hibernate则提供了更完善的透明持久化。它为应用程序追加了O/R映射的语意——HQL。HQL查询语言让开发者可以在领域对象的层面来利用SQL的强大功能(即在一定程度是你不在需要自己组装SQL,或者说HQL让组装变得更简单了,而且也不再需要象上面那样,在大量的DAO面前不得不让特定的程序来生成笨重的代码)。
JDO是一组规范,并定义了一系列API,它是除O/R映射以外,用另一种——基于字节码增强的——方式来实现透明持久化的。所谓的字节码增强,是指在做业务动作时,被增强的持久化对象实例如果被修改(即数据的变动通过字节码的变动而被侦测),就会通知JDO的状态管理器,从而做出相应的insert、update或delete动作持久化到数据库。
        但是,最终,这些透明持久化方案还得和我们自己的DAO策略集合起来。持久化的最终结果是要将数据存入数据库中,DAO模式提供了一种更优雅的持久化解决方案(比起业务代码直接使用JDBC来说)。而如何实现DAO是一个重要的问题。DAO模式的最终目的,是为了将“与持久化相关的代码”从业务逻辑中分离出来。所以,如果是自己使用JDBC,做一个DAO——即使是很薄的那种——也是很有必要的,如同上面提到的那个例子。但既然有了Hibernate,iBATIS和JDO等等这样一些优秀的“透明持久化”方案,自己再去发明轮子可算不上明智。在实现DAO时,如果用到了这些开源方案,针对不同的方案实现自己不同的DAO,仍然是个好主意(如当使用Hibernate的时将其封装到自己的DAO里)。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值