此文仅为本人初次学习和实践G&G的心得体会以及开发经验的记录,旨在将我的感受保留下来以备未来查阅。欢迎大家指正和补充:)
一、Domain Class
1. 对于一个领域类对应一个表的情况最好解决,每一个字段对应一列,是最爽的形式
2. 每个领域类最好重写toString()方法,目的在于关联的显示时展现有意义的文字而不是简单的ID
3. static constraints = {}有两个作用,一是规定了字段在页面中的顺序;另外就是数据约束在这里定义。PS:一定要保证拼写正确,我就因为拼写错误导致运行不成功,郁闷了很久才找到错误原因。
4. 字段的定义一定要保证其不是数据库中的关键字!!这点很重要,我已经两次在这方面出错了。一次是desc,一次是order
5. 在数据验证中,blank是针对String类型的不为空,而其他类型不为空则要用nullable,如Integer。常用的还有maxSize,也是针对String类型的长度。如无必需最好不要大于255,若大于则数据库中类型不是Varchar了。
6. 在一对多关系中,一方要有hasMany闭包,这样可以在内容显示时包括多方的链接;多方中belongsTo是可选的,如果加上则会被级联删除。
7. static mapping 闭包可以修改默认的字段与表的对应方式,尤其在处理遗留数据库时有用
二、数据库访问
1. 数据源配置:在grails-app/conf/DataSource.groovy里配置,dbCreate
的值在不同的环境下会产生不同的行为。它是底层的 hibernate.hbm2ddl.auto
设置的别名,负责指定 Hibernate 在幕后如何管理表。将 dbCreate
设为 create-drop
create
,那么 Hibernate 会在需要的时候创建新表和修改现有表,但是重新启动之间的所有记录都会被删除。production
模式的默认值 — update
— 会在重新启动之间保持所有数据,也会在需要的时候创建或修改表。 ,就是告诉在启动的时候创建表,在关闭的时候删除表。如果将值改为
2. 注意要把访问数据的jar包拷贝到lib目录中。
3. 可添加自定义环境,如beta,同development等设置,在启动程序时grails -Dgrails.env=beta run-app
4. 数据库模式还是要先建立好的,Grails只能修改表而不是数据库
5. 一般的run-app使用development数据配置,打成war包后使用production配置。要保证lib中有数据访问驱动
6. 数据库连接字符串要写对格式,如mysql的:jdbc:mysql://localhost:3306/trip
三、页面修改
1. 页面跟普通JSP页面没有太多区别,一般内置标签<g:**>无需导入就可直接使用,自己编写的Tag只要按照规约放在指定的目录下即可直接使用。
2. 最爽的一点是页面修改无需重启服务器,因而修改后直接刷新就能看到效果
3. 一般生成的页面上都有ID这个字段,最好都删去避免出错
四、控制器及业务逻辑
1. 有两种默认控制器执行,一是转到index闭包;另外就是直接指定
2. 不是所有闭包都要有对应的视图,可以转到任何视图,render是渲染的意思,redirect是重定向 。这两种方式都可以用flash.message来显示提示信息
3. 可以直接使用Java语言中的类库或Groovy语言。在访问数据库方面还是Groovy比较方便,例子如下:
首先要import groovy.sql.Sql
def db = Sql.newInstance(DB,ID,PASSWORD,DRIVER)
def result = db.execute("DELETE FROM member WHERE id=${m.homeId}")
4. 保持Domain时hasErrors()只是检查对象是否构造无误,而save()才是真正进行约束检查
五、其他
1. 所有文件最好都用utf-8格式保存,这样能对中文友好支持!
2. i18n文件已经有多个语言版本,根据本机配置会自动选择,在中国就使用messages_zh_CN.properties
3. 如User中的username的非空提示就应为:User.username.blank = 用户名不能为空。无需自己进行本地转化,启动时系统会自动为你转换。具体参考官方文档
version 1.1
未完待续...