JiveJdon Community Forums
在线274人   首页   主题表   培训咨询   标签   精华   查搜   注册    登陆 RSS
首页 » 论坛 » 开源项目大家谈
???en_US.forumThreadPrev.name??? 上一主题
google yahoo 365Key网摘 CSDN网摘 添加到百度搜藏 POCO网摘 新浪ViVi 天极网摘
???en_US.forumThreadNext.name??? 下一主题
Go 共有 0 回复 / 1
 发表新帖子   回复该主题贴
wlmouse

悄悄话
发表文章: 117
注册时间: 2006年11月09日 15:58
猫学Grails之完善编写的第一个程序和数据库设置 2008年01月25日 17:19 到本帖网址 加入本帖到收藏夹 回复该主题
标签
  在上一篇中程序已经基本成型了。但是还有很多地方需要完善。Grails的缺省设置是一个HQLDB的内存数据库。每次启动时建立,关闭时销毁,不能保留下来。而且输入数据的校验目前还只局限在是否为Null。
  猫咪先来说如何修改数据库配置。首先在机器上安装一个MySQL数据库,当然别的数据库也可以。不过如果装了Oralce和DB2,机器配置又低跑不动别找我。数据库配置的结构已经和书上说得完全不一样了。“grails-app\conf”下并没有书上说的DevelopmentDataSource.groovy、TestDataSource.groovy和ProductionDataSource.groovy这三个文件。只有一个把这三个配置放到一起的DataSource.groovy。
内容如下:

//缺省的数据库配置模板
dataSource {
pooled = false
driverClassName =
"org.hsqldb.jdbcDriver"
username =
"sa"
password =
""
}
//Hibernate缓存配置
hibernate {
cache.use_second_level_cache=true
cache.use_query_cache=true
cache.provider_class='org.hibernate.cache.EhCacheProvider'
}
// environment specific settings
environments {
//开发环境配置
development {
dataSource {
dbCreate =
"create-drop" // one of 'create', 'create-drop','update'
url =
"jdbc:hsqldb:mem:devDB"
}
}
//测试环境配置
test {
dataSource {
dbCreate =
"update"
url =
"jdbc:hsqldb:mem:testDb"
}
}
//生产环境配置
production {
dataSource {
dbCreate =
"update"
url =
"jdbc:hsqldb:file:prodDb;shutdown=true"
}
}
}

  很好改的。如果要把开发数据库换成MySQL只要把开发部分的数据库配置改了就是了。这种配置格式,经常修改Unix下各种软件的配置的人应该很熟悉。
  首先把MySQL的数据库驱动拷贝到lib目录下,然后修改配置文件的开发数据库配置。

development {
dataSource {
dbCreate =
"update"
pooled = true
driverClassName =
"com.mysql.jdbc.Driver"
username =
"root"
password =
"****"
url =
"jdbc:mysql://localhost:3306/MyMiao"
}
}

  和一般的数据库连接池的设置没什么不一样的。不过“dbCreate”要注意。它有三个值:“create”(如果数据库不存在则创建)、“create-drop”(启动的时候建立数据库,结束的时候销毁数据库)、“update”(当数据库表和程序不一致时,修改数据库结构)。不过我不能在MySQL数据库上使用“create”和“create-drop”这两个属性。一用就出现异常,说表不存在。看来目前这两个属性只用于内嵌的HQLDB。不过MySQL倒不用建表,只要建立一个空数据库就可以了。系统在启动的时候,会自动在数据库里建立表(不能建立数据库)。如果大家使用其他的数据库,可以试试看能否自动建库。如果你不想Grails对你的数据库动手动脚,把这条去了就是了。
  下面是对领域对象建立验证和页面的属性显示顺序。如果验证错误,是无法写入数据库的。
在Race类中添加下面的代码:

static constraints ={
name(maxlength:50,blank:false)
//名字最长50,不许为Null
startDateTime(validator:{return (it>new Date())})
//不能输入过去的时间。这是自定义验证,返回布尔值。it表示这个属性。
city(maxLength:30,blank:false)
//最长30,不能为Null
state(inList:[
"BeiJing","TianJin","ShangHai","ChongQing"],blank:false)//只能输入的值必须在四地中,不能为Null。书上是美国的四个州。我用咱们直辖市代替了。不过目前还不能在这里写中文。页面上能正确显示,但是验证过不去
maxRunners()
distance(min:3.1f,max:100f)
//跑道长度。最小3.1最长100。(100英里,即160千米。快4个马拉松了)
cost(min:0f,max:999.99f)
//费用必须在0到999.99美元之间
}

constraints同时也决定了属性出现在页面上的顺序。如果只是想规定某个属性的位置但是没有验证,那么直接放进去就可以了,比如maxRunners。注:这个顺序是输入页面的顺序。然后另一个对象也加入验证。

static constraints = {
name(maxLength:50,blank:false)
//最长50,不能为Null
dateOfBirth(nullable:false)
//非空
gender(inList:[
"M","F"])//输入只能是两者之一
postalAddress(maxLength:255)
//最长255
emailAddress(maxLength:50,email:true)
//最长50,符合Email格式
race(nullable:false)
//非空
}

看记录详细信息的时候,“Registration : 1”之类的东西很难看吧。解决的方法就是重写toString()方法。

Race
String toString(){
"${this.name}:${this.city}:${this.state}"}
Registration
String toString(){
"${this.name}:${this.emailAddress}"}

好了最初的架子就到此为止了。大家可以多试试。
标签
共有 0 回复 / 1Go
???en_US.forumThreadPrev.name??? 上一主题
  Go back to the topic 返回本主题   Go back to the topic listing返回主题列表    返回页首返回页首
???en_US.forumThreadNext.name??? 下一主题
热点TAG:
正在读取,请等待...
查询本论坛内 回复超过的热门帖子
标题
 
粗体: [b]文本[/b] 斜体: [i]文本[/i] 下划线 [u]文本[/u] 插入图片 [img]http://wwww.xxxx.com/img.ext[/img] 插入代码 [code]程序代码[/code]  插入url链接 [url]http://url[/url] / [url=http://url]URL加下滑线[/url] 插入附件 插入word文档 Txt等文件
内容
  提交时自动拷贝以上内容到剪贴板 Ctrl-V可取出;提问题前先查询标签列表

RSS 手机阅读 add to google add to yahoo
解惑之道在J道 ,打造中国最具影响力的的企业软件社区 推荐Chrome快速浏览本站
OpenSource JIVEJDON v3.5 Powered by JdonFramework Code © 2002-09 jdon.com

anti spam