快速业务通道

精通Grails: GORM - 有趣的名称,严肃的技术 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16

精通Grails: GORM - 有趣的名称,严肃的技术

时间:2011-07-25 IBM Scott Davis

在上个月开篇的 精通 Grails 文章中,介绍了名为 Grails 的新 Web 框架。Grails 结合了最新的实 践,例如模型-视图-控制器的关注点隔离和约定优于配置。通过将这些实践与其中内置的 scaffolding 功能结合,使用 Grails 只需花几分钟就能建立并运行起一个 Web 站点。

这篇文章的重点是使用 Grails 可以实现简化的另一领域:使用 Grail 对象关系映射(Grails Object Relational Mapping,GORM)API 进行持久化。我将首先介绍什么是对象关系映射器(object- relational mapper,ORM),以及如何创建一对多关系。然后将学习数据验证(确保应用程序不会出现无 用信息输入/无用信息输出(garbage in/garbage out)问题)。然后将看到如何使用 Grails ORM 的领 域特定语言(domain-specific language,DSL),使用 DSL 语句能够在幕后对普通的旧 Groovy 对象( plain old Groovy objects,POGO)的持久化方式进行微调。最后,将看到能够轻松地切换到另一个关系 数据库。任何有 JDBC 驱动程序和 Hibernae 方言的数据库都受支持。

ORM 定义

关系数据库出现于 20 世纪 70 年代末,但是软件开发人员至今依然在寻求有效的方法来存入和取出 数据。当今软件的基础并不是多数流行数据库所使用的关系理论,而是基于面向对象的原则。

为此产生了一整套称为 ORM 的程序,用来缓解在数据库和面向对象的代码之间来回转移数据的痛苦。 Hibernate、TopLink 和 Java 持久性 API(Java Persistence API,JPA)是处理这一问题的三个流行的 Java API(请参阅 参考资料),不过它们都并不完美。这个问题如此持久(不是故意一语双关,而是实 情),以至于有了自己专用的术语对象关系阻抗失谐(请参阅 参考资料)。

GORM 是在 Hibernate 上的一层薄薄的 Groovy 层。(我猜 “Gibernate” 不像 “GORM” 那样容易 上口)。这意味着现有的所有 Hibernate 技巧仍然有用 — 例如,HBM 映射文件和标注得到全面支持 — 但这篇文章的重点是 GORM 带来的有趣功能。

创建一对多关系

对于将 POGO 保存到数据库表所面临的挑战,很容易被低估。实际上,如果只是将一个 POGO 映射到 一个表,那么工作相当简单 —POGO 的属性恰好映射到表列。但是当对象模型稍稍变复杂一点,例如有两 个彼此相关的 POGO,那么事情将很快变得困难起来。

例如,请看上个月 文章 中开始的旅行规划网站。显然,Trip POGO 在应用程序中有重要的作用。请 在文本编辑器中打开 grails-app/domain/Trip.groovy(如清单 1 所示):

清单 1. Trip 类

class Trip {   String name   String city   Date startDate   Date endDate   String purpose   String notes }

清单 1 中的每个属性都轻松漂亮地映射到 Trip 表中的对应字段。还记得在上一期的文章中说过,在 Grail 启动时,所有存储在 grails-app/domain 目录下的 POGO 都会自动创建对应的表。默认情况下, Grails 使用内嵌的 HSQLDB 数据库,但是到本文结束时,就能够使用自己喜欢的其他任意关系数据库。

旅程中经常要包含飞行,所以还应该创建一个 Airline 类(如清单 2 所示):

清单 2. Airline 类

class Airline {   String name   String url   String frequentFlyer   String notes }

精通Grails: GORM - 有趣的名称,严肃的技术(2)

时间:2011-07-25 IBM Scott Davis

现在要将这两个类链接起来。为了计划一个通过 Xyz 航线到芝加哥的旅行,在 Groovy 代码中的表示 方法与在 Java 代码中的表示方法相同 — 要在 Trip 类中添加一个 Airline 属性(如清单 3 所示)。 这个技术称为对

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号