编写第一个 Grails 应用程序
我经常旅行 — 一年至少 40 趟。我发现,日程表可以很好地告诉我何时 需要达到某个地方,但是不能显示那个地方在哪里。而在线地图刚好相反:它们可以解决地点问题,但不能解决时间问题。所以,在本文和本系列接下来的两篇文章中,您将构建一个定制的 Grails 应用程序,在计划旅程时,这个应用程序既可以用于解决时间问题,又可以用于解决地点问题。
首先,在一个空白目录下,输入 grails create-app trip-planner。稍后,可以看到一个名为 trip-planner 的目录。同 Maven、Rails 和 AppFuse 一样,Grails 会建立一个标准的目录结构。如果您觉得这个目录结构限制了您,并且只有精心设计自己的定制目录树才能使用一个框架,那么这样使用 Grails 不会有多大的乐趣。约定优于配置中的约定 部分使您可以拥有任何 Grails 应用程序,并立即知道各个部分之间的联系。
进入 trip-planner 目录,并输入 grails create-domain-class Trip。如果一切顺利,将得到两个新的文件:grails-app/domain/Trip.groovy 和 grails-app/test/integration/TripTests.groovy。在后面的文章中,我将谈到测试。目前,我们主要关注域类。一开始,域类看上去如清单 1 所示:
清单 1. Grails 生成的域类
}
看上去没什么内容,对吗?接下来让我们来完善它。为 Trip 添加一些字段,如清单 2 所示:
清单 2. 添加字段后的 Trip 类
String name
String city
Date startDate
Date endDate
String purpose
String notes
}
如前所述,这里不需要创建 getter 和 setter 方法:Groovy 会动态地生成它们。Trip 还有很多新的、有用的动态方法,这些方法的名称非常易用理解:
·Trip.save() 将数据保存 到 HSQLDB 数据库中的 Trip 表中。
·Trip.delete() 从 Trip 表中删除 数据。
·Trip.list() 返回一个 Trip 列表。
·Trip.get() 返回一个 Trip。
所有这些方法都已经存在,您在需要的时候就可以使用它们。注意,Trip 并没有扩展某个父类或者实现某个接口。由于 Groovy 的元编程功能,那些方法只是出现在适当类中的适当位置(只有 grails-app/domain 目录中的类才拥有这些与持久性相关的方法)。