频道直达:新闻 - 组网 - 安全 - 服务器 - 存储 - 系统 - 应用 - 开发 - 数据库 - 前沿 - 技术人 - 培训 - 求职 - 读书 - 教程 - 专题 - 产品 - 案例 - 技术圈 - 博客 - BBS
51CTO.COM_中国领先的IT技术网站
找资料:

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

作者: 山风小子 出处:蛟龍居 2007-09-24 13:14    砖    好    评论   进入论坛
阅读提示:GORM就是以前我刚学Groovy没多久时想实现的功能,它使开发人员不需要关心数据库方面,也不需要任何配置,只需专心用OO思想设计自己的系统,还有一个好处就是开发时不用备份数据库,因为GORM会自动帮你建表以及约束(但数据库需要你自己建),让我们来看一下用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
  }
}

如果将数据源/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

【责任编辑:dizzarz TEL:(010)68476606】

专题
Groovy开发技术
初探敏捷开发
WCF开发基础
体验Visual Studio 2008的魅力
Visual Studio 2005开发基础
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 领 先 的 IT 技 术 网 站 ·
技 术 成 就 梦 想
·Java基础教程 (查看81024次)
·UML类图详解 (查看72498次)
·C++是垃圾语言?! (查看42631次)
·C#技术开发指南 (查看40232次)
·UML统一建模语言 (查看39205次)
·Java编程开发手册 (1198个砖)
·Java基础教程 (431个砖)
·C#技术开发指南 (311个砖)
·.NET开发手册 (254个砖)
·PB开发教程 (223个砖)
·Java编程开发手册 (658个好)
·Java基础教程 (578个好)
·.NET开发手册 (282个好)
·PB开发教程 (213个好)
·Delphi开发技术手册 (200个好)
订阅技术快讯
电子杂志下载
名称:SQL Server数据库管理精品黄皮书
简介:书中文章经过精挑细选,便于用户能根据自己的实际工作和学习,快速在本书寻找到相关资料。内容涵盖了SQL Server的安装与升级、语句查询、数据备份和恢复、自动化任务、数据同步、数据字典、安全和预防、性能和优化、集群等各方面应用信息,以及DBA管理人员在数据库管理工作中
名称:2007路由技术大全
简介:《2007路由技术大全》由51CTO.com网站特别策划制作,该书包括路由器技术、路由器产品、路由器配置、安全设置、路由器故障处理、路由器密码恢复,以及广大网友在实践使用中的心得经验和技巧文章,内容注重实用性,适用于初学者入门,也适合多年从业者提高,是一本实践和理论完
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。