WEB开发网
开发学院软件开发Java 精通 Grails: Grails 与遗留数据库 阅读

精通 Grails: Grails 与遗留数据库

 2009-10-26 00:00:00 来源:WEB开发网   
核心提示: 禁用 dbCreate遗留表就位之后,您需要做最后一件事:禁用 grails-app/conf/DataSource.groovy 中的 dbCreate 变量,精通 Grails: Grails 与遗留数据库(9),回想一下 “GORM:有趣的名称,严肃的技术” 就会知

禁用 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}" 
 } 
} 

上一页  4 5 6 7 8 9 10  下一页

Tags:精通 Grails Grails

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接