Grails 1.1 Beta 2发布了,
Groovy
1.6 final和
Grails 1.1 final也越来越近,不过已经不是很感兴趣了。虽然对于
Java开发者来说,相比
Rails,
Grails更容易上手,但它并不成熟的。在论证
Grails的成熟度时,
Graema说:
“你会把
Spring和
Hibernate看作风险吗?
” Spring和
Hibernate确实不是风险,但
Grails对
Spring和
Hibernate的包装却是一个极大风险,
“在种种危险中,最主要的一
点是我们已经对底层框架的抽象太成功了,以至于有时会出现问题。
”具体可以看看这个
例子
。使用
Grails,不如使用
JRuby On Rails或者
Play!
不管怎么样下面介绍一下
1.1版本的新特性:
GORM
更好的
GORM
事件
之前
, GORM 只支持
beforeInsert, beforeUpdate 和
beforeDelete 事件
, 现增加了
afterInsert,
afterUpdate 和
afterDelete 来完成图片操作
基本类型集的持久化
GORM 现在支持基本类型比如
String,
Integer 等使用一个连接表的持久化。
class Person {
static hasMany = [nicknames:String]
}
class Person {
static hasMany =
[nicknames:String]
}
对象的只读访问
现在,持久化实例对象可以使用
read
方法以只读状态被加载
:
def book = Book.read(1)
默认的排列顺序
现在,关联可以使用一个类级别声明的默认的排列顺序来排序
:
class Book {
String title
static mapping = {
sort "title"
}
}
或在关联级别上
:
class Author {
static hasMany = [books:Book]
static mapping = {
books sort:"title"
}
}
批处理
现在
GORM 支持使用
ORM DSL 在类级别上配置批处理
(
batch fetching )
(
延迟加载的优化
):
class Book {
String title
static mapping = {
batchSize 15
}
}
或在关联级别上
:
class Author {
static hasMany = [books:Book]
static mapping = {
books batchSize:15
}
}
动态
Finders
的改进
动态查询器的新后缀
InList
可用:
def groovyBooks = Book.findByAuthorInList(['Dierk Koenig',
'Graeme Rocher'])
现在,
Dynamic
finders 也能查询缓存
:
def books = Book.findByTitle("Groovy in Action",
[cache:true] )
可以使用悲观锁
:
def books = Book.findByTitle("Groovy in Action",
[lock:true] )
单项的
One-to-many
遗留映射
单项的
One-to-many关联关系可以使用
joinTable 参数改变它们对底层数据库的映射
:
class Book {
String title
static belongsTo = Author
static hasMany = [authors:Author]
static mapping = {
authors joinTable
:[name:"mm_author_books", key:'mm_book_id' ]
}
}
class Author {
String name
static hasMany = [books:Book]
static mapping = {
books
joinTable:[name:"mm_author_books", key:'mm_author_id']
}
}
增强枚举类型的支持
现在,枚举类型使用
GORM
调用的
getId ()方法来持久化枚举状态。
enum Country {
AUSTRIA('at'),
UNITED_STATES('us'),
GERMANY('de');
final String id
Country(String id) { this.id = id }
}
插件
全局插件
现在,安装插件可以给所有的应用程序共享
:
grails install-plugin webtest -global
多插件仓库
现在,
Grails 支持通过提供多插件仓库配置的能力
使用
USER_HOME/.grails/settings.groovy
文件或包含配置好的仓库详情的
grails-app/conf/BuildConfig.groovy
文件。
grails.plugin.repos.discovery.myRepository="http://svn.codehaus.org/grails/trunk/grails-test-plugin-repo"
grails.plugin.repos.distribution.myRepository="https://svn.codehaus.org/grails/trunk/grails-test-plugin-repo"
Grails的插件命令如
list-plugin和
install-plugin会自动使用所有设置的插件仓库,发布一个插件到一个插件仓库可以是用下面的命令:
grails release-plugin -repository=myRepository
自动安装插件方案
插件不再需要到
SVN 检出,当应用程序第一次加载时,通过插件元数据会自动安装。
另外
,插件的依赖关系问题已经解决了。
插件的作用范围和环境
现在,插件可以作用于环境或预置的构建范围内:
def environments = ['dev', 'test']
def scopes = [excludes:'war']
仅在那些环境中加载使用,而不打包到
WAR
文件中。这使得产品使用时
"development-only" 的插件不会被打包
。
测试
测试框架
现在,作为
1.0.x 系列可用插件的新
测试框架
已集成到
Grails 1.1.
该测试框架增加了模拟所以普通类型包扩控制器,领域类,标签库和
url
映射简写的行为,快速运行单元测试。
class SongTests extends grails.test.GrailsUnitTestCase {
void testMinimumDuration() {
mockDomain(Song)
def song = new
Song(duration: 0)
assertFalse
'validation should have failed', song.validate()
assertEquals
"min", song.errors.duration
}
}
数据绑定
属性子集的数据绑定
现在更容易对属性的自己和进行数据绑定。在之前的版本中你也许会使用
:
person.properties = params
这将会将
request中的所有变量绑定到
person中。如果你不想绑定所有的数据的话,你可以使用
bindData
方法。现在你可以通过使用
subscript operator来绑定部分的变量
:
person.properties["firstName","lastName"] = params
person.properties["firstName","lastName"]
= params
要取得
domain中的所有属性的一个子集也可以通过这样的方式:
person.properties["firstName","lastName"].each { println it }
集合类型的数据绑定
Grails已经支持集合类型的数据绑定
,例如
list、
set和
map。
<g:textField name="books[0].title"
value="the Stand" />
<g:textField name="books[1].title"
value="the Shining" />
<g:textField name="books[2].title"
value="Red Madder" />
脚手架
模板和动态脚手架
现在,动态脚手架使用通过
install-templates
命令安装的模板
。
支持更多关联类型
现在,
Scaffolding
支持
many-to-many 和单项的
one-to-many 关联。
<!----><!---->
<!---->
Groovy Server Pages
在
JSP
中支持
JSP
标签库
现在,
GSP 已经支持
JSP 标签库复用的能力
:
<%@ taglib prefix="fmt"
uri="http://java.sun.com/jsp/jstl/fmt" %>
<fmt:formatNumber value="${10}"
pattern=".00"/>
JSP 标签也可以像正常的
GSP 标签一样调用
:
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"
%>
${fmt.formatNumber(value:10, pattern:".00")}
工程基本结构
Maven
集成
Grails 1.1 缘自和
Maven plugin 和
archetype 的关联,允许你使用
Maven 更容易的构建
Grails
工程。根据操作指南
here
或使用原型来创建一个新的
Grails 工程
,
或运行
:
mvn grails:create-pom
来为已有工程创建一个
Maven
POM.
环境及元数据
API
使用新
API 来访问当前环境
:
import grails.util.Environment
...
switch(Environment.current) {
case
Environment.DEVELOPMENT:
configureForDevelopment()
break
case
Environment.PRODUCTION:
configureForProduction()
break
}
当然也有一个易于访问应用程序元数据的新类:
def metadata = grails.util.Metadata.current
println metadata.applicationName
println metadata.applicationVersion
Log4j
DSL
新的
Log4j DSL 用于替换以前
Log4j 配置的方式
:
log4j = {
error
'org.codehaus.groovy.grails.web.servlet', // controllers
'org.codehaus.groovy.grails.web.pages'
// GSP
warn 'org.mortbay.log'
}
详见
user guide 中
Log4j DSL 全部文档。
灵活的构建配置
新的
grails-app/conf/BuildConfig.groovy 文件可用,它允许你配置不同层面的
Grails
构建输出路径和服务器使用插件的解决方案:
grails.work.dir="/tmp/work"
grails.plugins.dir="/usr/local/grails/plugins"
grails.project.test.reports.dir="/usr/local/grails/test-reports"
非交互模式
现在,
Grails 支持一种
--non-interactive flag ,须键入到命令行,目的是关闭用户提示
:
grails run-app --non-interactive
这对服务器持续集成是有帮助的。
加密数据源
现在,数据源密码可以使用已提供的编码类来加密
:
dataSource {
username =
"foo"
password =
"438uodf9s872398783r"
passwordEncryptionCodec="my.company.encryption.BlowfishCodec"
}
支持的编码使用
Grails' 现存的编码机制。
升级备注
Grails 1.1 有很多改变,但大多是向后兼容
1.0.x
系列的。如果有问题请报告。升级时,以下是已知需要注意的问题列表:
Plugins 不保存在你的
USER_HOME 路径下
. 你需要重写安装插件或运行
:
grails
-Dgrails.plugins.dir=./plugins run-app
现在枚举类型已经被映射到数据库,使用字符串值而不是原始默认的。
jsession id 默认已无效
.
详见
GRAILS-3364
GSP 空白符处理已经变好很多了,比以前有更多空白符
.
详见
GRAILS-3277
grails.testing.reports.destDir 配置选项已被替代为
grails.project.test.reports.dir
现在,
PreInit.groovy
改为
BuildConfig.groovy
控制器中的
allowedMethod
属性被标识为
static 。非
static 版本不推荐使用,尽管它仍然起作用并在控制台产生信息。
Grails1.0的
这篇文章
也可以作为参考。
分享到:
相关推荐
Grails1.1中文文档
Grails是个一栈式开发框架,它尝试通过核心技术和插件技术来解决许多Web开发难题
grails1.1中文文档,用户指南,对于grails入门者是份不错的资料参考
Grails1.1中文文档.zip
Grails 1.1 Web Application Development.pdf
Grails1.1最新 中文 文档 当今的Java Web开发技术显得过于复杂,相对于它本身的需要来说。现在主流的Java Web框架也是异常复杂,而且没有很好的遵循 Don't Repeat Yourself (DRY) 法则。 因此我们要以一种新的思维...
Grails 最新的 v1.1版的中文文档,chm格式,Grails是一套快速开发Web应用的开源框架,基于Groovy编程语言,并构建于Spring、Hibernate和其它标准Java框架之上,能为大家带来超高效率的一站式框架。
Grails1.1中文文档-----2009.3.25
grails framework 1.1 中文
NULL 博文链接:https://nainse.iteye.com/blog/408728
grails-1.2.2.zip
Grails Quick Reference 1.1
Grails使用FCK Editor(附源码,有截图),Groovy1.5.6和Grails1.1
Apress.Beginning.Groovy.and.Grails.From.Novice.to.Professional.Jun.2008 grails_programming Grails1.1中文文档-----2009.3.25 Grails入门指南(第二版) Groovy经典入门 Programming Groovy 2 合集,超实惠哦
Grails使用FCK Editor实例(附源码和文档),groovy1.6.0和grails1.1