技术开发 频道

Hibernate vs. Rails:数据持久化


【IT168 技术文档】

    关于Rails的各种议题如雨后春笋般地涌现,就像许多关注Java的家伙一样,如Bruce Tate和David Geary,我目前正在关注一个新的Web构架:Rails。我最感性趣的是Rails的ORM (Object Relational Mapping)工具,活动记录(ActiveRecord)。由于一项新技术的选择总会产生一些机会成本(opportunity costs),因此,我写了这篇关于Rails和另一个ORM工具Hibernate对比的文章。本文总结了我从Rails中学到了什么,并使Rails和我非常熟悉的技术Hibernate进行一翻较量。

背后的故事

    最近,一个新的框架:Ruby on Rails已经成为开发人员所关注的热点话题之一,而且关于它的讨论正在逐渐升温。Rails是一个基于MVC模式的web框架,从概念上讲类似于Struts或Webwork,但Rails和它们不同的是,Rails是使用脚本语言Ruby写的,而Struts和Webwork是使用java语言写的。Rails不仅仅是一个web框架,它还提供了许多集成技术,如内嵌的代码自动生成技术和本身提供的ORM (Object Relational Mapping)工具,以及活动记录(ActiveRecord)。由于Rails框架集成了大量的辅助开发的工具,因此,Rails打出的口号是“使用Rails开发web程序至少比使用传统的java框架开发web程序快十倍”。
现在对于Rails的态度分为两个阵营。一个阵营是Rails的支持者,另一个阵营是Rails的反对者。前者将Rails捧上了天,而后者则将Rails打入了十八层地狱。至于持哪种态度,也许要看你热衷于的语言是以J还是以R开头。

概述

    根据我所做的研究,Rails好象非常适合处理单表或是单个的对象。这一特点使Rails非常适合处理简单模型。要想使Rails拥有更高的效率,必须使数据库以及表、字段等按着Rails的约定设置(如要按着Rails的约定起名)。Hibernate在这一点上就比Rails强大得多,它能够处理更复杂的数据模型,可以处理任何已经存在的数据库。因此,Hibernate拥有更多的特性,是一个更成熟的产品。但它们也有各自的特点,接下来就让我们揭开它们的面纱,看看它们有什么不同。下面列出了我在这篇文章中要回答的概念和问题。
    1、基本体系结构模式 — Hibernate和Rails各自使用完全不同的ORM模式。这意味着什么?
    2、显式 – Hibernate和Rails使用不同的方式定义映射。Hibernate使用显式的方式定义映射,而Rails使用了隐式的方式定义映射。这有什么用意?它有多么重要?
    3、关系– 它们都支持关系,那么如何定义关系呢?
    4、传播性持久化模型 – 它们所提供的工具是如何处理持久对象的?
    5、查询语言 – 你如何查找对象?

基本体系结构模式

    Rails活动记录和Hibernate最大的差异是它们所使用的模式不同。很显然,Rails使用的是活动记录模式,而Hibernate使用的是数据映射模式。下面就阐述这两种模式到底有什么不同。

活动记录模式

    活动记录是一个封装了数据库表或视图的某一行的对象,并且可以通过这个对象对数据库进行访问。同时还可以通过这个对象将数据库中表或视图的关系体现出来。这就意味着活动记录有查找实例的“类”方法,以及每个实例都可以进行保存、更新和删除操作。因此,Rails在简单的数据模型上将会有更好的表现。

数据映射模式

    数据映射模式是一个映射层,在这一层将对象和数据库分开,以保证对象层、映射层和数据层的相互独立。数据映射一般使用一致性映射来维护对象和数据库之间的关系。另外,它还提供了一个跟踪数据对象变化的功能,以确保数据和对象的一致性。

模式所带来的影响

    上述讨论了它们的基本差异。这些差异所带来的影响非常明显。活动记录(Rails)非常容易理解和使用,但是它对于更高级、更复杂的应用却显得无能为力。下面让我们看看这两个框架的不同之处。为了举例说明它们的不同,我们将使用一个叫“Deadwood”的工程中的代码来说明。
0
相关文章