`
alert_mm
  • 浏览: 168731 次
  • 性别: Icon_minigender_2
  • 来自: 厦门
社区版块
存档分类
最新评论

Groovy轻松入门——Grails实战之GORM篇

阅读更多

 

GORM就是以前我刚学Groovy没多久时想实现的功能,它使开发人员不需要关心数据库方面,也不需要任何配置,只需专心用OO思想设计自己的系统,还有一个好处就是开发时不用备份数据库,因为GORM会自动帮你建表以及约束(但数据库需要你自己建),让我们来看一下用Grails开发是多么简单高效吧!

在Grails0.6+中,配置稍有不同,详见 朝花夕拾——Groovy & Grails

在写域类时,无须添加与业务无关的属性,比如在用Hibernate时,我们需要(不强制)在类中定义id,但用GORM时,id无须自己声明GORM会帮我们自动添加id和version。GORM通过反射机制获得域类属性信息决定数据库字段类型,所以在定义域类时不要使用def关键字来定义属性务必明确定义属性类型,比如在下面的域类Article中,用String来定义content(而不是def content),在默认情况下,String映射到数据库中的字段类型是VARCHAR(Date映射到数据库中的字段类型是DATETIME),如果通过类变量contraints定义了String的长度范围,且长度过长,映射到数据库中的字段类型会变为TEXT,十分智能。
eg.

class Article {
  Date dateAdded  // Date 映射到数据库中的字段类型是DATETIME
  String content
  static constraints = {
    content(blank: false, size: 0..65535) // 如果没有定义content的大小范围,它在数据库中类型为VARCHAR最大长度是255,
                                          // 显然不满足我们的需求,这样定义后,数据库中的字段类型会变为TEXT
  }
}

 

 
如果将数据源<project name>/grails-app/conf/XXXDataSource中的String dbCreate = "update",Grails会自动帮我们同步内存和数据库中域类对象的状态,这点是很方便的,不需要在每次修改对象后,update了(GORM中的save()相当于Hibernate中的saveOrUpdate()),其好处犹如Java中,new出一个对象,当不再使用此对象时,不需要自行delete一样。在实际开发中您就会体会到了。

下面让我们看一下GORM中的1:1,1:N,N:1,N:N以及继承关系映射:

1,一对一关系: 

class Dog {
  String name
  Tail tail //  狗有一条尾巴
}

class Tail {
  float size
  Dog owner  //  尾巴也知道自己属于那只狗
}

 

 

 

 现在Dog和Tail的一对一关系是双向的,当然你也可以去掉Tail类中的owner属性或Dog类中的tail属性,使一对一关系变为单向的
级联删除:当Dog对象被删除时,则Dog对象所引用的Tail对象也将被相应删除;同样地,当Tail对象被删除时,Tail对象所引用的Dog对象也将被相应删除。如果你认为Tail被切除后,Dog应该还活着,即Tail对象删除后,Tail对象所应用的Dog对象不应该被删除,那么我们可以通过在Tail类中声明类变量belongsTo来实现,在这个场景中,我们将Tail改为:

class Tail {
  float size
  Dog owner  //  尾巴也知道自己属于那只狗
  static belongsTo = Dog // 注意是static的
}

 

 级联更新/保存:当Dog对象更新/保存,Dog对象所引用的Trail对象也更新/保存;反之亦然。

2,一对多多对一关系:

class Dog {
  String name
  static hasMany = [feet: Foot] // 通过声明类变量hasMany,来定义Dog‘一’这方有多Foot
}

class Foot {
  float size
  Dog owner
  static belongsTo = Dog // 在一对多,多对一关系中,默认‘多’方belongsTo‘一’方
}

  

 

 关于保存,更新和删除与一对一关系相同,都是级联更新/保存和级联删除,当Dog被删除时,由于Foot belongsTo(属于) Dog,所以Dog对象所引用的所有Foot对象全被删除;而当Foot对象被删除时,Dog对象不会被删除。这是通过类变量belongsTo实现的。

3,多对多关系:

class Teacher {
  String name
  static hasMany = [students: Student]
}

class Student {
  String name
  static hasMany = [teachers: Teacher]
  static belongsTo = Teacher  // 在多对多关系中,至少有一方声明类变量belongsTo
}

 

 

 

 更新/保存在多对多关系中,相对一对一,一对多,多对一关系中要特殊点,就是只有‘拥有方’可以级联更新/保存比如在本例中,由于Student belongsTo Teacher ,所以Teacher是‘拥有方’,Teacher的更新/保存将引起Teacher对象所引用的所有Student对象的更新/保存。
删除也有点特殊,‘拥有方’被删除后,它所引用的对象不会被删除,你必须自己删除它们,否则它们将成为‘孤儿’

4,继承关系:
class Base {...}
class Derived extends Base {...}
只要定义类,无需任何配置,够简单吧。

用Grails开发就是这么简单快捷,域类定义好了之后,剩下的事情,比如建表,约束等,Grails全帮您自动搞定,很省心!Grails官方网站上有很多文档供参考,对GORM的进一步学习,您可以看一下GORM

分享到:
评论

相关推荐

    Groovy轻松入门—Grails实战基础篇

    Groovy是一种基于Java平台的动态、灵活...综上所述,“Groovy轻松入门—Grails实战基础篇”将带你走进Groovy和Grails的世界,通过深入学习这些知识点,你可以快速掌握这个强大的开发工具,从而高效地构建现代Web应用。

    Grails Persistence with GORM and GSQL

    这个标签强调了书籍的核心主题——Grails框架中的GORM技术。这表明本书旨在帮助读者了解并掌握如何在Grails项目中使用GORM来管理数据持久化。 #### 部分内容解析: **第一章:定义GORM中的模型** - **GORM的目标*...

    eclipse插件grails(groovy)

    Eclipse 插件 Grails(Groovy)是一个强大的开发工具,它...通过配置插件和环境,你可以利用Groovy的灵活性和Grails的高效框架,轻松构建Web应用程序。无论是新手还是经验丰富的开发者,都能从中受益,提升开发效率。

    Apress.Beginning.Groovy.and.Grails.From.Novice.to.Professional.Jun.2008

    通过阅读《Apress.Beginning.Groovy.and.Grails.From.Novice.to.Professional.Jun.2008》这本书,读者将了解Groovy的基本语法、类和对象、集合、文件操作等核心概念,以及Grails的MVC结构、GORM、命令行工具、插件...

    Beginning_Groovy_and_Grails开源项目教学代码第二部分

    3. **Grails ORM:GORM**:Grails的GORM(Groovy Object Relational Mapping)提供了与数据库交互的能力,支持ActiveRecord和Hibernate。我们将学习如何定义领域类,建立数据库映射,以及执行CRUD操作。 4. **...

    grails-datastore-gorm-plugin-support-2.0.4.RELEASE.zip

    GORM,即Grails Object Relational Mapping,是Grails框架的核心组件之一,它允许开发者以面向对象的方式操作数据库,而无需编写大量的SQL代码。GORM支持多种数据存储技术,包括关系型数据库(如MySQL、PostgreSQL)...

    Apress.Beginning.Groovy.and.Grails.From.Novice.to.Professional.2008.rar

    《 Beginning Groovy and Grails: From Novice to Professional 2008》是Apress出版社在2008年发布的一本专为初学者至专业人士准备的编程书籍,主要介绍了Groovy和Grails两种强大的开源技术。这本书的核心目标是帮助...

    使用GORM构建Spring Boot应用程序 Grails指南_ Grails框架.pdf

    在本教程中,我们将探讨如何使用GORM(Grails Object-Relational Mapping)构建Spring Boot应用程序。GORM是Grails框架的核心部分,它为开发者提供了简单、强大的数据持久化功能,支持Hibernate和MongoDB等数据库。...

    Groovy&Grails准备,收集的Groovy与Grails的书籍

    2. **GORM(Groovy Object Relational Mapping)**:Grails的持久层框架,提供了ORM服务,简化了数据库操作,支持Hibernate和ActiveRecord模式。 3. **Controllers and Views**:Grails遵循MVC(模型-视图-控制器)...

    Grails GORM查询.pdf

    Grails框架中的GORM(Groovy Object Relational Mapping)是利用Groovy语言的优势来简化数据库操作的一套对象关系映射技术。GORM支持多种查询方式,提供了类似于Hibernate的查询能力,并且由于Groovy语言的动态特性...

    Groovy and Grails Recipes.pdf

    根据提供的文件信息,我们可以从《Groovy and Grails Recipes》一书中提炼出多个与Groovy语言及Grails框架相关的知识点。下面将详细阐述这些知识点。 ### Groovy编程语言 **1. Groovy简介** - **定义**:Groovy是...

    grails中文入门简介

    对象关系映射(GORM)是Grails框架中的一个重要组成部分,它为Groovy语言提供了对象持久化的支持。GORM支持基本的CRUD操作,并且在领域建模方面提供了强大的支持,包括一对一、一对多和多对多的关联。GORM支持继承,...

    groovy grails简介

    2. **领域特定语言(DSL)**:Grails提供了用于数据库映射、控制器和视图的内置DSL,如GORM(Groovy Object Relational Mapping)。 3. **自动生成代码**:通过命令行工具,Grails可以自动生成模型、控制器和视图的...

    Grails+groovy 完整参考手册.7z

    Grails 是一个基于 Groovy 语言的开源Web应用框架,它构建在Spring Boot之上,旨在简化开发流程并提高生产力。Grails 的设计目标是提供一种灵活、高效的开发环境,使得开发人员可以快速构建高质量的、企业级的Web...

    grails-datastore-gorm-tck-1.0.9.RELEASE.zip

    标题 "grails-datastore-gorm-tck-1.0.9.RELEASE.zip" 提供的信息表明,这是一个与Grails框架相关的数据存储(Datastore)和GORM(Grails Object Relational Mapping)测试兼容性工具包(Test Compatibility Kit,...

    Grails-开源框架---使用指南.pdf与Groovy入门经典(中文).pdf(2合一)

    Grails 是一个基于 JVM 的开源全栈式Web应用框架,它构建在Groovy语言之上,提供了一种高效且富有生产力的开发环境。Grails 的设计理念是"Convention over Configuration"(约定优于配置),这意味着它具有高度的可...

    groovy and grails ppt

    Grails的控制器层建立在Spring MVC之上,提供了一个命令行脚本环境,该环境基于Groovy-powered的Gant。 Grails框架还包括一个内嵌的Jetty容器,支持热加载,使得开发过程中无需频繁重启服务器。此外,Grails依赖于...

    Grails&Groovy学习资料

    Grails是建立在Groovy之上的全栈Web开发框架,它旨在提高开发效率,减少重复工作。Grails的关键特性包括: 1. 基于Convention over Configuration(约定优于配置)原则:Grails有明确的默认设置,开发者不需要写...

    Gails入门指南(中文) + Groovy快速入门(中文)

    同时,了解Grails的GORM(Grails Object-Relational Mapping)框架,它是处理数据库操作的强大工具。 5. **服务层**:Gails中的服务层允许你编写可重用的业务逻辑,这些服务可以被多个控制器或视图调用。 6. **...

Global site tag (gtag.js) - Google Analytics