Grails1.0正式版发布

期待已久的Grails-1.0终于在中国的佳节-春节发布了(一个巧合? :) ),相比前几个RC版来说,次此主要是BUG的修改,但是相对于0.6来说,变化还是很大的,以下就官方的Release作个简单的翻译。

[size=x-large][b]新特性[/b][/size][list]
[*]GORM的ORM DSL高级映射
[*]更容易使用的过滤器(Filters)
[*]内容协商(Content Negotiation)的支持
[*]REST支持
[*]JNDI支持
[/list]

以下分别介绍一下
[b][size=large]ORM DSL[/size][/b]
为了减少跟传统Hiberbate映射的太多依赖,Grails 1.0 RC1就发布了对象关系映射(ORM)的领域相关语言(DSL)。DSL现在允许字定义如下一些特性:
[list]
[*]表名和字段名
[*]继承策略
[*]二级缓存的配制
[*]Id生成策略
[*]支持复合Id
[*]Eager/Lazy 加载
[*]数据库索引
[*]自定义的Hibernate类型
[/list]
看如下例子:

class Person {
String firstName
static hasMany = [addresses:Address]
static mapping = {
table 'people'
version false
id column:'person_id'
columns {
firstName column:'First_Name'
addresses lazy:false
}
}
}
class Address {
String street
String postCode
}

[url=http://grails.org/GORM]完整介绍请看这里[/url].

[b][size=large]Filters[/size][/b]
Grails一直以来都在控制器中支持拦截器.而Filters提供了一种更强大和方便的方式来定义横切面(面向方面的一个概念) 。

你只需要指定特定的动作或者URL,Filters就可以将让其在整个控制器中生效. 比如:
class SecurityFilters {
def filters = {
loginCheck(controller:'*', action:'*') {
before = {
if(!session.user && !actionName.equals('login')) {
redirect(action:'login')
return false
}
}

}
}
}
[url=http://grails.org/Filters]完整内容请参考这里[/url]

[size=large][b]Content Negotation[/b][/size]
通过定义HTTP文件头的Accept/Content-Type的内容,Grails现在已经支持内容协商(content negotiation)。 Mime类型可以在Config.groovy中配制:

grails.mime.types = [ html: ['text/html','application/xhtml+xml'],
xml: ['text/xml', 'application/xml']
// etc.
]And requests dealt with via the withFormat


在控制器的代码如下所示:

def list = {
def results = Book.list()
withFormat {
html bookList:result
xml { render results as XML }
}
}


[size=large][b]Automatic XML/JSON Unmarshalling[/b][/size]
JSON和XML请求现在可以通过params对象来自动unmarshall了。假设一个XML请求如下:

<book>
<title>The Stand</title>
<author>Stephen King</author>
...
</book>

在代码中使用如下:

def save = {
def b = new Book(params['book'])
if(b.save()) {
// deal with book
}
}


[size=large][b]支持外键字段映射和表连接(Join Tables)[/b][/size]
Grails' ORM DSL通过关联现在可以支持外键字段映射和表连接。比如为了改变1:1关系的外键你可以如此做:

class Book {
Author author
static mapping = {
columns {
author column:'auth_id'
}
}
}

对单向的1:n或者n:n关系来说,你还可以改变连接表和字段:

class Author {
static hasMany = [books:Book]
static mapping = {
columns {
books joinTable:[name:'authors_books', key:'book_id', column:'author_id']
}
}
}


[size=large][b]JNDI Data Sources[/b][/size]
Grails通过定义DataSource的jndiName可以支持JNDI数据源了:
grails-app/conf/DataSource.groovy
dataSource {
jndiName = "java:comp/env/myDataSource"
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值