GORM 全程是 Grails' object relational mapping (ORM) 是 Grails 的 ORM 实现,基于 Hibernate 3。
GORM 有助于缓解抽象泄漏问题,它支持使用对 Groovy 有意义的方式表示对象模型,由 GORM 在幕后处理关系数据库的问题。但是正如即将看到的,如果需要,覆盖默认设置也很容易。GORM 并不是隐藏数据库细节的不透明的 抽象层,而是一个半透明的 层 — 它尝试在不进行用户干预的情况下执行正确的工作,但是如果用户需要对它的行为进行自定义,它也可以提供支持。这样它就提供了两方面的好处。
关系数据库出现于 20 世纪 70 年代末,但是软件开发人员至今依然在寻求有效的方法来存入和取出数据。当今软件的基础并不是多数流行数据库所使用的关系理论,而是基于面向对象的原则。
为此产生了一整套称为 ORM 的程序,用来缓解在数据库和面向对象的代码之间来回转移数据的痛苦。Hibernate、TopLink 和 Java 持久性 API(Java Persistence API,JPA)是处理这一问题的三个流行的 Java API,不过它们都并不完美。这个问题如此持久(不是故意一语双关,而是实情),以至于有了自己专用的术语对象关系阻抗失谐。
GORM 是在 Hibernate 上的一层薄薄的 Groovy 层。(我猜 “Gibernate” 不像 “GORM” 那样容易上口)。这意味着现有的所有 Hibernate 技巧仍然有用 — 例如,HBM 映射文件和标注得到全面支持。
示例代码:
def book = Book.findByTitle("Groovy in Action")
book
.addToAuthors(name:"Dierk Koenig")
.addToAuthors(name:"Guillaume LaForge")
.save()