GRAILS 教程资料
[转载]grails调用存储过程(Grails: calling a stored procedure)
![[转载]grails调用存储过程(Grails: calling a stored procedure)](https://img.taocdn.com/s3/m/14ab2a124431b90d6c85c7b0.png)
[转载]grails调用存储过程(Grails : calling a stored procedure)在特殊情况下,grails应用需要调用数据库的存储过程,这在grails的官方文档里边好像没有提到过,在james的blog里介绍如何解决这个问题。
代码转贴如下java 代码1.class MainController {2.3. def dataSource // using the datasource we define in the spring's resources.xml4.5. def index = {6. Sql sql = new Sql(dataSource)7. def row = sql.execute("call create_daily_hours(${new Date()+1})")8. }9.}需要说明的一些是:grails本身没有提供访问存储过程的便捷方法,而groovy 的GSQ L提供了,因此grails可以直接拿过来用了,当然也可以用spring的JdbcTemplate。
希望对grails用户有点用。
原文地址:/group/blog/86666My experience with grails is getting richer the longer I use it for web application developing. It's very nice that grails is built on top of spring framework which we can take advantage of. I am not a spring user before but with a help from the nice people at the grails forum I was able to achieve what I want to do.Calling a stored procedure from a MySQL database or any other database is simple. First we need a datasource which spring could provide for us. I have the following code place in the resources.xml found in the spring folder in your grails folder.<bean id="dataSource" class=" mons.dbcp.BasicDataSource "><property name="driverClassName"><value>org.hsqldb.jdbcDriver</value></property><property name="url"><value>jdbc:hsqldb:hsql://localhost</value></property><property name="username"><value>sa</value></property><property name="password"><value></value></property></bean>I use connection pooling for better performance. In my controller here is how I use the datasource to call a store procedure.class MainController {def dataSource // using the datasource we define in the spring's resources.xmldef index = {Sql sql = new Sql(dataSource)def row = sql.execute("call create_daily_hours(${new Date()+1})") }}That's it! Notice that I am using Groovy SQL instead of Spring JDBCTemplate. It's a lot more friendlier for a beginner.Grails really makes everything easy here and provides a lot of flexibility thanks to it's nice integration with spring. From here everything is possible.原文地址:/2007/03/grails-little-of-spring-framew ork.html附:朝花夕拾——Groovy & Grailsposted on 2007-06-04 19:39 山风小子。
Grails与jdk环境变量配置

Java(TM) SE Runtime Environment (build 1.6.0_10-b12)
Java HotSpot(TM) Client VM (build 10.0-b19, mixed mode, sharing)
二、下载和安装Grails
2、 配置环境变量
将下载完的grails-bin-1.0.4.zip解压缩到C:\ grails-1.0.4目录下
Windows系统上右击“我的电脑”/“属性”/“高级”/“环境变量”,点击新建环境变量GRAILS_HOME,值为C:\ grails-1.0.4
Windows系统上右击“我的电脑”/“属性”/“高级”/“环境变量”,修改path的值,在最后面增加%GRAILS_HOME%\bin;
诸如Ruby、PHP和Python之类的脚本语言最近几年越来越流行,因此,需要开发一个Java脚本备选语言和类似Rails的针对Java环境的框架。Groovy就是这个脚本语言,而Grails就是这个框架。
1、 下载Grails
最新的Grails版本是1.0.4,可以从以下链接下载:
/grails/grails-bin-1.0.4.zip
Java Web应用程序框架是企业Java得以成功的重要原因之一。人们怀疑如果没有Apache Struts框架Java EE是否能够如此成功。虽然底层编程语言很重要,但通常是框架使编程语言成为引人注目的中心的。如果您经常访问讨论论坛,就会注意到Ruby语言和Ruby On Rails框架之间也是这种情况。Ruby已经出现十多年了,然而只是在Ruby On Rails框架流行之后,开发人员才开始注意到Ruby语言。
Groovy轻松入门——Grails实战之GORM

Groovy轻松入门——Grails实战之GORMGORM就是以前我刚学Groovy没多久时想实现的功能它使开发人员不需要关心数据库方面也不需要任何配置只需专心用OO思想设计自己的系统还有一个好处就是开发时不用备份数据库因为GORM 会自动帮你建表以及约束(但数据库需要你自己建) 让我们来看一下用Grails开发是多么简单高效吧!在Grails +中配置稍有不同详见朝花夕拾——Groovy & Grails 在写域类时无须添加与业务无关的属性比如在用Hibernate时我们需要(不强制)在类中定义id 但用GORM时 id无须自己声明 GORM 会帮我们自动添加id和version GORM通过反射机制获得域类属性信息决定数据库字段类型所以在定义域类时不要使用def关键字来定义属性务必明确定义属性类型比如在下面的域类Article中用String来定义content(而不是def content) 在默认情况下 String映射到数据库中的字段类型是VARCHAR(Date映射到数据库中的字段类型是DATETIME) 如果通过类变量contraints定义了String的长度范围且长度过长映射到数据库中的字段类型会变为TEXT 十分智能class Article { Date dateAdded // Date 映射到数据库中的字段类型是DATETIME String content static constraints = { content(blank: false size: ) // 如果没有定义content的大小范围它在数据库中类型为VARCHAR最大长度是// 显然不满足我们的需求这样定义后数据库中的字段类型会变为TEXT } } 如果将数据源/grails app/conf/XXXDataSource中的String dbCreate = update Grails会自动帮我们同步内存和数据库中域类对象的状态这点是很方便的不需要在每次修改对象后 update了(GORM 中的save()相当于Hibernate中的saveOrUpdate()) 其好处犹如Java 中 new出一个对象当不再使用此对象时不需要自行delete一样在实际开发中您就会体会到了下面让我们看一下GORM中的 : :N N: N:N以及继承关系映射一对一关系class Dog { String name Tail tail // 狗有一条尾巴} class Tail { float size Dog owner // 尾巴也知道自己属于那只狗}现在Dog和Tail的一对一关系是双向的当然你也可以去掉T ail类中的owner属性或Dog类中的tail属性使一对一关系变为单向的级联删除当Dog对象被删除时则Dog对象所引用的Tail对象也将被相应删除;同样地当Tail对象被删除时Tail对象所引用的Dog对象也将被相应删除如果你认为Tail被切除后Dog应该还活着即Tail 对象删除后 Tail对象所应用的Dog对象不应该被删除那么我们可以通过在Tail类中声明类变量belongsT o来实现在这个场景中我们将Tail 改为class Tail { float size Dog owner // 尾巴也知道自己属于那只狗static belongsT o = Dog // 注意是static的} 级联更新/保存当Dog对象更新/保存 Dog对象所引用的Trail对象也更新/保存;反之亦然一对多多对一关系class Dog { String name static hasMany = [feet: Foot] // 通过声明类变量hasMany 来定义Dog 一这方有多Foot } class Foot { float size Dog owner static belongsTo = Dog // 在一对多多对一关系中默认多方belongsTo 一方} 关于保存更新和删除与一对一关系相同都是级联更新/保存和级联删除当Dog被删除时由于Foot belongsT o(属于) Dog 所以Dog 对象所引用的所有Foot对象全被删除;而当Foot对象被删除时Dog 对象不会被删除这是通过类变量belongsTo实现的多对多关系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对象的更新/保存删除也有点特殊拥有方被删除后它所引用的对象不会被删除你必须自己删除它们否则它们将成为孤儿继承关系class Base { } class Derived extends Base { }只要定义类无需任何配置够简单吧lishixinzhi/Article/program/Java/hx/201311/26540。
grails学习文档

在这一期的精通Grails 中,Scott Davis 演示如何通过使用层叠样式表(CSS)、模板、标记库(T agLib)等技术来对Grails 应用程序的外观进行有趣的更改。
欢迎阅读第二年度的精通Grails。
正如我在2008 年的最后一篇文章中许诺的一样,在新的一年将使用新的应用程序。
再见了,Trip Planner!让我们欢迎blog 发布系统(blog publishing system)!我已经将这个应用程序命名为Blogito。
在西班牙语中,它表示“little blog”,或者是对笛卡儿的Cogito ergo sum(“我思故我在”)表示敬意。
可从 下载这个完整的应用程序。
在接下来的几篇文章中,您将一步步构建核心的功能。
这篇文章的重点是显著地更改Grails 应用程序的外观。
去年的Trip Planner 的外观很怪异,恐怕只有开发人员才会喜欢(说句公道话,与外观相比,我对核心功能更感兴趣)。
在本文中,通过使用一些CSS 和局部模板进行调整,将得到一个外观新颖的Grails 应用程序。
在这个过程中,您还可以简单温习一下Grails 特性,比如scaffold、自动时间戳、修改默认模板、创建自定义T agLib,以及调整关键配置文件(比如Bootstrap.groovy 和URLMapper.groovy)。
在开始之前,必须安装Grails 1.1。
撰写本文时,它还是beta 版。
安装Grails 1.1Grails 在Java 1.5 或1.6 上运行表现最佳。
通过命令提示符输入java -version,确保Java 版本是比较新的。
Java 1.5 或1.6 就绪之后,安装Grails 的步骤就很简单了:1从Grails 站点下载grails.zip 文件。
2解压缩grails.zip。
3创建一个GRAILS_HOME 环境变量。
4将GRAILS_HOME/bin 添加到PATH。
Gails2.0使用及简介

Grails 简介Grails 是搭建在动态语言Groovy 之上的一个开源MVC Web 开发框架,Grails 的一个显著特点在于“快”,这主要得益于Groovy 脚本语言的动态特性,也得益于其“一栈式”的设计。
与传统的Java/C# Web 开发框架相比,它可以使用极少的代码和配置实现诸如表单提交、数据库读写等常见的Web 应用功能,实现了开发效率的成倍提高。
Grails 是一个遵循MVC 设计模式的Web 开发框架。
它分别用Domain Class、View、Controller 对应于MVC 的模型、视图和控制器。
可以简单的把一个Domain Class 理解为数据库中的一张表,Grails 在底层通过Hibernate 将Domain Class 和数据库的表进行了映射。
View 在Grails 中指的是GSP 页面(注意是GSP 不是JSP),它用于显示用户界面。
GSP 与JSP 类似,既可以编写静态网页的元素,也可以嵌入Groovy 代码实现动态内容。
Controller 在Grails 中充当着重要的角色:它可以响应用户的请求,可以接收用户提交的表单,还可以访问模型的数据,并传递给View。
Grails 在MVC 三方面的具体内容,将在后面的例子中做详细介绍。
一.Grails开发环境搭建1.下载jdk、sts,同时在sts中安装Groovy和Grails插件2.配置Grails环境变量图一:GRAILS_HOME图二:path 3.sts配置Grails1.在STS中新建Grails Project,会自动生成如下目录其中domain文件夹就是用来存放模型层的Groovy类的,也即数据库持久层;controllers 即是存放控制层文件的;views就是视图层,是用来存放GSP文件的;taglib是用来存放自定义的G标签的文件;services是用来存放各种服务的文件;utils是用来存放工具类的;i18n 是用来支持国际化的;conf是存放配置文件的,其中数据库的配置文件便在这里;test/unit 是用来存放单元测试文件的;test/integration是用来存放集成测试文件的;plugin中为该项目中所用的插件;lib中用来存放java包;target中可以用来存放导出的war文件;web-app 中存放web服务的一些配置文件,还有js、图片、css等文件。
grails_isoft

Grails简介
总体框架图 Grail是一套用于快速Web应用开发的开源框架,它基于Groovy编程语言,并构建于Spring、 Hibernate和其它标准Java框架之上,从而为大家带来一套能实现超高生产力的一站式框架
Grails环境配置
2.1 下载和安装 让Grails运行起来的第一步是安装发行包。请按照如下步骤: 下载 Grails的二进制发行包并解压到你指定的目录下 新增 GRAILS_HOME 环境变量并指向你解压发行包时选择的目录 Unix/Linux系统上通常在你的profile文件中添加 export GRAILS_HOME=/path/to/grails 来设置环境变量 Windows系统上则是在 我的电脑/属性/高级/环境变量 中添加相同的环境变量 现在需要添加 bin 目录到 PATH 环境变量中: Unix/Linux系统上在profile中继续添加 export PATH="$PATH:$GRAILS_HOME/bin" Windows系统上修改 我的电脑/属性/高级/环境变量 中的 Path 环境变量
Grails简介
Grails是构建在现有的像Spring、Hibernate这样的Java技术之上。 Grails是个一栈式开发框架,它尝试通过核心技术和插件技术来解决许多Web开发难题。Grails包含了如下内 容: 由 Hibernate 构成的易于使用的 Object Relational Mapping (ORM)层 称为 Groovy Server Pages (GSP) 的展现层技术 基于 Spring MVC 的控制层 由基于 Groovy 的 Gant 工具构建的命令行脚本环境 一个内嵌的 Jetty 容器被配置用来快速重载应用 Spring容器内建的依赖注入技术 基于 Spring 的 MessageSource 核心概念的国际化 (i18n) 支持 基于 Spring 的抽象事务概念的事务服务层 Grails使用“约定优于配置”原则来配置自己。
Grails对象关联映射(GORM)二
Grails对象关联映射(GORM)⼆ Groovy 的多⾏字符串对HQL查询⽆效分页和排序使⽤HQL查询的时候你也可以进⾏分页和排序。
要做的只是简单指定分页和排序参数作为⼀个散列在⽅法的末尾调⽤:def results =Book.findAll("from Book as b where b.title like 'Lord of the%' order by b.title asc",[max:10, offset:20])接下来的章节覆盖更多⾼级的GORM使⽤ 包括 缓存、定制映射和事件。
GORM⽀持事件注册,只需要将事件作为⼀个闭包即可,当某个事件触发,⽐如删除,插⼊,更新。
The following is a list of supported events下⾯就是所⽀持事件的列表:beforeInsert - 对象持久到数据之前执⾏beforeUpdate - 对象被更新之前执⾏beforeDelete - 对象被删除之前执⾏afterInsert - 对象持久到数据库之后执⾏afterUpdate - 对象被更新之后执⾏afterDelete - 对象被删除之后执⾏onLoad - 对象从数据库中加载之后执⾏为了添加⼀个事件需要在你的领域类中添加相关的闭包。
事件类型beforeInsert事件当⼀个对象保存到数据库之前触发class Person {Date dateCreateddef beforeInsert = {dateCreated = new Date()}}beforeUpdate事件当⼀个对象被更新之前触发def beforeInsert = {dateCreated = new Date()}def beforeUpdate = {lastUpdated = new Date()}}beforeDelete事件当⼀个对象被删除以后触发.class Person {String nameDate dateCreatedDate lastUpdateddef beforeDelete = {new ActivityTrace(eventName:"Person Deleted",data:name).save()}}onLoad事件当⼀个对象被加载之后触发:class Person {String nameDate dateCreatedDate lastUpdateddef onLoad = {name = "I'm loaded"}}⾃动时间戳上⾯的例⼦演⽰了使⽤事件来更新⼀个 lastUpdated 和 dateCreated 属性来跟踪对象的更新。
grails groovy hibernate 用法
grails groovy hibernate 用法Grails是一个基于Groovy语言的开源Web应用框架,它集成了Hibernate作为ORM(对象关系映射)工具来操作数据库。
在Grails中使用Hibernate进行数据库操作,需要按照以下步骤进行:1. 定义数据模型:创建一个Groovy类来表示数据库表,并使用Hibernate的注解来指定表的结构和关系。
```groovyimport grails.gorm.annotation.Entity@Entityclass Book {String titleString author}```2. 配置数据源:在Grails的配置文件(如`grails-app/conf/application.yml`)中配置数据库连接信息,包括数据库类型、URL、用户名和密码。
```yamldataSource:dbCreate: updateurl: jdbc:mysql://localhost:3306/mydbusername: myuserpassword: mypassworddriverClassName: com.mysql.jdbc.Driver```3. 使用GORM进行数据库操作:Grails提供了GORM(Grails Object Relational Mapping)作为Hibernate的高级封装,可以通过GORM的方法来进行数据库的增删改查操作。
```groovydef createBook() {def book = new Book(title: "Grails in Action", author: "Glen Smith")book.save()}def getBooks() {def books = Book.findAll()books.each { book ->println "Title: ${book.title}, Author: ${book.author}"}}```以上代码示例了如何创建一本书并保存到数据库中,以及如何查询所有的书籍并打印出它们的标题和作者。
grailseach{}用法
grailseach{}用法Grails是一种基于Groovy语言的开源Web应用框架,它提供了一种简洁高效的方式来构建现代化的Web应用程序。
在Grails中,我们经常需要在视图中遍历集合或列表,这时就会用到each闭包。
each闭包是一个非常常用的闭包,它允许我们迭代一个集合,并对其中的每个元素执行相同的操作。
在Grails中,我们可以使用each闭包来遍历列表、集合、Map等数据结构,并在视图中展示数据。
下面是each闭包的基本用法:```groovyeach//对每个元素执行的操作```在这个闭包中,我们可以使用it关键字来表示当前迭代的元素。
我们可以将每个元素操作的代码放在闭包中,并使用it来引用当前元素的值。
下面是一个简单的例子,演示了如何使用each闭包在Grails视图中遍历一个列表,并将每个元素显示在页面上:```groovy<ul><g:each in="${['apple', 'banana', 'orange']}" var="fruit"><li>${fruit}</li></g:each></ul>```除了使用in关键字来指定要遍历的列表外,each闭包还支持其他一些关键字和选项。
下面是一些常用的each闭包选项:1. status变量:可以通过status变量来获取当前迭代的状态信息,例如当前迭代的索引、是否是第一个或最后一个元素等。
```groovy<g:each in="${['apple', 'banana', 'orange']}" var="fruit" status="i"><li>${i.index + 1}. ${fruit}</li></g:each>```在这个例子中,我们使用status变量来获取当前元素的索引,然后在页面上显示元素的序号。
Eclipse 下Grails环境搭建步骤
Eclipse下的Grails开发环境搭建详解听说Eclipse对Grails支持不是很好,相反,IntelliJ和NetBeans都比Eclipse要好。
IntelliJ我是没用过,不好发表什么看法,不过经过这两天对Eclipse和NetBeans在开发Grails项目上的试用,发现确实NetBeans使用起来要方便一点。
这是一句比较客观的话,因为本身我自己大部分时间还是一个Eclipse使用者。
那么下面我们就进入正题:1. Grails环境安装不管用NetBeans还是Eclipse,都需要这一步,即首先将Grails下载下来,并安装好。
Grails官网是:/下载链接:/Download这一步很简单,相信大家都不会有什么问题。
只是有一个细节必须得提一下,那就是GRAILS_HOME环境变量的设置问题,它必须与你所设置的PATH变量(添加了%GRAILS_HOME%\bin目录之后的那个PATH)在同一个级别上。
要么都是用户级变量,要么都是系统级变量。
我这里全部设置在用户级变量下,如图:之后,运行cmd,输入grails命令,回车,如果能够显示一条帮助信息,那么表示这一步成功完成。
(我这里使用的版本是Grails 1.0.3)2. Eclipse安装这里也只有一点需要说明:因为Grails开发是需要编辑gsp文件的,它实际上就是一个使用了一些特殊标签的jsp文件,而Classic版本的 Eclipse不带有jsp编辑器,所以建议下载JEE版本的Eclipse。
当然,如果你觉得你对JSP语法太熟悉了,完全可以不用它的JSP 编辑器,而且你机器内存实在太小的话,可以考虑用Classic版本。
下面将以最新的Eclipse 3.4.0 JEE版本为例。
3. 安装Groovy Eclipse插件其官方网址是:/Eclipse+Plugin下载地址是:/groovy/distributions/update/GroovyEclipse.zip像一般的Eclipse插件安装一样,可以选择用Software Update安装或用link的方式进行安装,在我之前的博客中详细介绍过Eclipse插件安装的问题,而且网上资料也很多,这里就不详细讲了。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
如前所述,这里不需要创建 getter 和 setter 方法:Groovy 会动态地生成它们。Trip 还有很多新 的、有用的动态方法,这些方法的名称非常易用理解:
·Trip.save() 将数据保存 到 HSQLDB 数据库中的 Trip 表中。
·Trip.delete() 从 Trip 表中删除 数据。
附带的 Web 服务器和数据库
有趣的是,不需要单独安装 Web 服务器就可以运行 Grails 应用程序。 Grails 内置了 Jetty servlet 容器。只需输入 grails run-app,就可以使应用程序在 Jetty 容器(见 参考资料)中运行,而 不必执行常见的部署过程。在已有的生产服务器上运行 Grails 应用程序也没有问题。通过输入 grails war 创建一个标准文件,然后可以将其部署到 Tomcat、JBoss、Geronimo、WebSphere®,或者任何其他遵 从 Java EE 2.4 的 servlet 容器。
1
Groovy 与 Java 语言的深度兼容意味着 Grails 不需要重新创造内部使用的关键技术。相反,您可 以以 Groovy 的方式查看熟悉的 Java 库。Groovy 封装了 JUnit TestCase 并以 GroovyTestCase 形式 提供。Grails 通过 GANT 对 Ant 构建进行了调整,GANT 是 Ant 的一个纯 Groovy 实现。Grails 将 Hibernate 包装在一个小小的 Groovy facade 中,并称之为 GORM — Grails Object/Relational Mapper。 Grails 使您在利用已有的 Java 经验的同时,还可以利用最新的 Web 开发实践,以上只是其中的三个例 子。
例如,Groovy 可以大大减少 Java 代码的数量。在 Groovy 中,不再需要为字段编写 getter 和 setter 方法,因为 Groovy 会自动提供它们。不再需要编写 for Iterator i = list.iterator() 来循 环遍历一系列的项;list.each 可以做相同的事情,而且看上去更简洁,表达更清晰。简言之,Groovy 就 是 21 世纪的 Java 语言。
作为 Grails 入门 系列的开篇,本文介绍 Grails 框架,展示它的安装方法,遍览如何构建第一个 Grails 应用程序:介绍本系列后续文章的内容。
Groovy 的威力
就像 Rails 与 Ruby 编程语言联系非常紧密一样,Grails 也离不开 Groovy(请参阅 参考资料)。 Groovy 是一种动态语言,它在 JVM 上运行,并且与 Java 语言无缝集成。如果阅读了 developerWorks 上 的大型 实战 Groovy 系列,那么您已经了解了这种语言的威力。如果没有,也不必担心 — 在学习 Grails 的过程中,您将了解到很多关于 Groovy 的知识。Groovy 应该不难学,因为它是特意为 Java 开发人员 而设计的。
}
Java 开发人员首先会注意到的是,这么少的代码可以实现多少功能。以 list 动作为例。起重要作 用的是最后一行。Grails 将返回一个 hashmap,其中只有一个名为 tripList 的元素。(Groovy 方法的 最后一行是一个隐式的 return 语句。如果您愿意,也可以手动地输入单词 return)。tripList 元素是 Trip 对象的一个 ArrayList,Trip 对象是通过 Trip.list() 方法从数据库中拉出的。通常该方法将返 回表中的全部记录。它上面的一行代码表示 “如果 URL 中提供了一个 max 参数,那么使用它来限制返 回的 Trip 的数量。否则,将 Trip 的数量限制为 10”。URL http://localhost:8080/trip-planner/trip/list 将调用这个动作。例如, http://localhost:8080/trip-planner/trip/list?max=3 显示 3 个 trip,而不是通常的 10 个。如果 有更多的 trip 要显示,Grails 会自动创建上一页和下一页的分页链接。
构建控制器和视图
创建域类只是成功的一半。每个模型都还需要一个良好的控制器和一些视图(我假设您熟悉 Model-View-Controller 模式;请参阅 参考资料)。输入 grails generate-all Trip,以构建一个 grails-app/controllers/TripController.groovy 类,并在 grails-app/views/Trip 中生成一组匹配的 Groovy Server Page(GSP)。对于控制器中的每个 list 动作,都有一个相应的 list.gsp 文件。create 动 作则对应于一个 create.gsp 文件。从这里可以看出约定优于配置的优点:无需 XML 文件就可以匹配这 些元素。每个域类根据名称与一个控制器配对。控制器中的每个动作也是根据名称与一个视图配对。如果 您愿意,也可以绕开这种基于名称的配置,但是大多数时候只需遵循约定,应用程序自然就可以运行。
不过,要想全面地鉴赏 Grails,还需要亲身体验一下。现在,让我们来安装 Grails,并创建第一个 Web 应用程序。
安装 Grails
运行 Grails 应用程序所需的一切都在一个 ZIP 文件中。所有的依赖库 — 例如 Groovy、Spring 和 Hibernate — 都已经在那里,随时可以使用。要安装 Grails:
Grails 为您提供 Rails 风格的开发体验,同时以可靠的 Java 技术作为坚强后盾。但是 Grails 不 仅仅是 Rails 通往 Java 平台的简单入口。Grails 吸取了 Rails 的经验,并将它们与现代 Java 开发 的意识相结合。可以认为 Grails 是受 Rails 启发,而不是由 Rails 转化而来。
首先,在一个空白目录下,输入 grails create-app trip-planner。稍后,可以看到一个名为 trip-planner 的目录。同 Maven、Rails 和 AppFuse 一样,Grails 会建立一个标准的目录结构。如果 您觉得这个目录结构限制了您,并且只有精心设计自己的定制目录树才能使用一个框架,那么这样使用 Grails 不会有多大的乐趣。约定优于配置中的约定 部分使您可以拥有任何 Grails 应用程序,并立即知 道各个部分之间的联系。
构建您的第一个 Grails 应用程序
【IT168 技术文档】请允许我借助另一种开源 Web 开发框架 —— Ruby on Rails —— 来介绍 Grails。 Rails 一发布就迷住了开发人员。Rails 的脚手架功能使您可以用以前所需时间的一小部分完成一个新的 项目。支持 Rails 的约定优于配置(convention over configuration)思想意味着,应用程序可以根据常 识性的命名模式自动进行组装(auto-wire),而不必借助繁杂的、容易出错的 XML 配置文件。Ruby 的元 编程功能使对象可以神奇地在运行时继承所需的方法和字段,而不会扰乱源代码。
清单 1. Grails 生成的域类
class Trip{
}
看上去没什么内容,对吗?接下来让我们来完善它。为 Trip 添加一些字段,如清单 2 所示:
清单 2. 添加字段后的 Trip 类
class Trip { String name String city Date startDate Date endDate String purpose String notes
3
·Trip.listቤተ መጻሕፍቲ ባይዱ) 返回一个 Trip 列表。
·Trip.get() 返回一个 Trip。
所有这些方法都已经存在,您在需要的时候就可以使用它们。注意,Trip 并没有扩展某个父类或者 实现某个接口。由于 Groovy 的元编程功能,那些方法只是出现在适当类中的适当位置(只有 grails-app/domain 目录中的类才拥有这些与持久性相关的方法)。
您也不需要单独安装数据库。Grails 附带了 HSQLDB(见 参考资料),它是一个纯 Java 数据库。通 过提供一个随时可用的数据库可以立即提高生产率。由于有了 Hibernate 和 GORM,使用其他数据库(例
2
如 MySQL、PostgreSQL、Oracle Database 或 DB2)也很简单。如果有一个 JDBC driver JAR 再加上通常 的连接设置,只需改变一下 DataSource.groovy,就可以立即使用您自己的数据库。
Rails 配得上它所受到的赞美和推崇(现在仍然如此),但是它使 Java 开发人员面临困难的选择。您 会因为一个新平台的承诺而放弃自己熟悉的 Java 平台吗?如何处理已有的 Java 代码、已有的生产服务 器和经验丰富的 Java 开发人员?
关于本系列
Grails 是一种新型 Web 开发框架,它将常见的 Spring 和 Hibernate 等 Java 技术与当前流行的 约定优于配置等实践相结合。Grails 是用 Groovy 编写的,它可以提供与遗留 Java 代码的无缝集成, 同时还可以加入脚本编制语言的灵活性和动态性。学习完 Grails 之后,您将彻底改变看待 Web 开发的 方式。