快速业务通道

精通Grails: Grails 事件模型 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-16
elete() }

精通Grails: Grails 事件模型(5)

时间:2011-07-25 IBM Scott Davis

在接下来的几个示例中,需要一直打开 MySQL 控制台并观察数据库。输入 mysql --user=grails -p --database=trip 登录(记住,密码是 server)。然后执行以下步骤:

如果 Grails 还没有运行就启动它。

输入 show tables; 确认已创建 Hotel 表。

输入 desc hotel; 查看列和数据类型。

输入 select from hotel; 确认记录已插入。

输入 delete from hotel; 删除所有记录。

BootStrap.groovy 中的防故障数据库插入和删除

在 BootStrap.groovy 中执行数据库插入和删除操作时可能需要一定的防故障措施。如果在插入之前 没有检查记录是否存在,可能会在数据库中得到重复项。如果试着删除不存在的记录,会看到在控制台上 抛出恶意异常。清单 13 说明了如何执行防故障插入和删除:

清单 13. 防故障插入和删除

def init = { servletContext ->   def hotel = Hotel.findByName("Marriott")   if(!hotel){    new Hotel(name:"Marriott").save()   }   hotel = Hotel.findByName("Sheraton")   if(!hotel){    new Hotel(name:"Sheraton").save()   } } def destroy = {   def hotel = Hotel.findByName("Marriott")   if(hotel){    Hotel.findByName("Marriott").delete()   }   hotel = Hotel.findByName("Sheraton")   if(hotel){    Hotel.findByName("Sheraton").delete()   } }

如果调用 Hotel.findByName("Marriott"),并且 Hotel 不存在表中,就会返回一个 null 对象。下 一行 if(!hotel) 只有在值非空时才等于 true。这确保了只在新 Hotel 还不存在时才保存它。在 destroy 闭包中,执行相同的测试,确保不删除不存在的记录。

在 BootStrap.groovy 中执行特定于环境的行为

如果希望行为只在以特定的模式中运行时才发生,可以借助 GrailsUtil 类。在文件顶部导入 grails.util.GrailsUtil。静态 GrailsUtil.getEnvironment() 方法(由于 Groovy 的速记 getter 语 法,简写为 GrailsUtil.environment)指明运行的模式。将此与 switch 语句结合起来,如清单 14 所 示,可以在 Grails 启动时让特定于环境的行为发生:

清单 14. BootStrap.groovy 中特定于环境的行为

import grails.util.GrailsUtil class BootStrap {    def init = { servletContext ->     switch(GrailsUtil.environment){      case "development":       println "#### Development Mode (Start Up)"       break      case "test":       println "#### Test Mode (Start Up)"       break      case "production":       println "#### Production Mode (Start Up)"       break     }    }    def destroy = {     switch(GrailsUtil.environment){      case "development":       println "#### Development Mode (Shut Down)"       break      case "test":       println "#### Test Mode (Shut Down)"       break      case "production":       println "#### Production Mode (Shut Down)"       break     }    } }

精通Grails: Grails 事件模型(6)

时间:2011-07-25 IBM Scott Davis

现在具备只在测试模式下插入记录的条件。但不要在此停住。我通常在 XML 文件中外部化测试

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