快速业务通道

精通Grails: Grails与遗留数据库 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
|    | | longitude  | varchar(30) | YES |   | NULL  |    | +--------------+-------------+------+-----+---------+-------+ 8 rows in set (0.01 sec) mysql> select count(*) from usgs_airports; +----------+ | count(*) | +----------+ |   901 | +----------+ 1 row in set (0.44 sec) mysql> select * from usgs_airports limit 1\G *************************** 1. row ***************************   airport_id: 1      locid: KOA     feature: Airport airport_name: Kona International At Keahole      state: HI     county: Hawaii County    latitude: 19.73573112487793     longitude: -156.042831420898438

精通Grails: Grails与遗留数据库(6)

时间:2011-07-29 IBM Scott Davis

禁用 dbCreate

遗留表就位之后,您需要做最后一件事:禁用 grails-app/conf/DataSource.groovy 中的 dbCreate 变量。回想一下 “GORM:有趣的名称,严肃的技术” 就会知道,如果相应的表不存在的话,该变量会指 示 GORM 在后台创建它,并且会改变任何现有表,从而匹配 Grails 域类。因此,如果要处理遗留表的话 ,就一定要禁用该特性,这样 GORM 才不会破坏其他应用程序可能会用到的模式。

如果能够有选择地为特定的表启用或禁用 dbCreate 就好了。不幸的是,它是一个全局的 “全有或全 无” 的设置。我遇到既有新表又有遗留表的情况时,会先允许 GORM 创建新表,然后禁用 dbCreate,导 入现有的遗留表。在这样的情况下,您就会了解到有一个好的备份与恢复策略是多么重要了。

静态映射块

我将示范的第一个将域类映射到遗留表的策略是使用静态 mapping 块。大多数情况下我都会使用这个 块,因为它感觉最像 Grails。我习惯将静态 constraints 块添加到域类,这样添加静态 mapping 块感 觉起来和添加框架的其余部分是一致的。

将 grails-app/domain/Airport.groovy 文件复制到 grails-app/domain/AirportMapping.groovy。 这个名称只是为了示范用的。因为将会有三个类全部映射回相同的表中,因此需要有一种方式来将每一个 类单独命名(这在真实的应用程序中不大可能会发生)。

注释掉城市与国家字段,因为在新的表中没有这些字段。然后从 constraints 块中移除这些字段。现 在添加 mapping 块,将 Grails 的名称链接到数据库名,如清单 8 所示:

清单 8. AirportMapping.groovy

class AirportMapping{   static constraints = {    name()    iata(maxSize:3)    state(maxSize:2)    lat()    lng()   }   static mapping = {    table "usgs_airports"    version false    columns {     id column: "airport_id"     name column: "airport_name"     iata column: "locid"     state column: "state"     lat column: "latitude"     lng column: "longitude"    }   }   String name   String iata    //String city   String state   //String country = "US"   String lat   String lng    String toString(){    "${iata} - ${name}"   } }

精通Grails: Grails与遗留数据库(7)

时间:2011-07-29 IBM Scott Davis

mapping 块的第一条语句将 AirportMapping 类链接到 usgs_airports 表。下一条语句通知 Grails 表没有 version 列(GORM 通常会创建一个 version 列来优化乐观锁定

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号