打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
grails学习笔记-7、Domain创建过程中注意的问题
在grails的开发中,Domain类的创建是很关键的。我在开发过程中,遇到了一些问题,写出来,供大家参考。
基础的用法,请参考grails官方文档,这里,我不再说。只说要注意的问题。
1、关于主键ID。grails会默认创建主键,名称:ID。类型:整型。生成策略:简单的自增,从1开始增加。
举个例子:
class SysUser{
String username;
String password;
}
上边的Domain类中没有ID字段,但你看数据库表,会发现有ID列。是整型的。在程序中,你可以通过sysUserInstance.id获取到这个值。
如果你想改变ID的数据类型,比如改为字符串。那就显示的定义ID。这样:
class SysUser{
String id;
String username;
String password;
}
想改变生成策略,这样:
class SysUser{
String id;
String username;
String password;
static mapping={
id generator:'hilo',params: [table: 'hilovalue', column: 'nextvalue']
}
}
其余的生成策略都有对应的写法,这里用的是hilo(用的比较多,可以用在数据库集群中)。这里我再写一种主键自动义时的写法:
id generator:'assigned'    。一般有这两中就能应付大部分情况了,剩下的只能你自己查了。
2、一般情况下,grails工程的开发都是写好Domain类,自动生成数据库表。如果遇到数据库表先有了,要以他们为基础进行开发,那么Domain类就要去适应数据库表。举个我项目中的例子说明:
这是我项目中的一张数据库表:
主键:iditemgroup
外键:iditemgroupstate、jobid
对应的Domain类如下:
[java] view plain copy
package com.eternal.business.itemgroup
import java.util.Date;
import com.eternal.business.job.CmJob
import com.eternal.business.item.CmItem
class CmItemGroup {
Integer quantity
Integer priority
Integer category
Integer printingseq
String groupType
Date inserttime
Date updatetime
CmJob cmJob
CmItemGroupState cmItemGroupState
static constraints = {
quantity(nullable: true,max: 2147483647)
priority(nullable: true, max: 2147483647)
category(nullable: true, max: 2147483647)
printingseq(nullable: true, max: 2147483647)
groupType(nullable: true)
inserttime(nullable: true)
updatetime(nullable: true)
}
static belongsTo = CmJob
static hasMany = [cmitems:CmItem]
static mapping = {
table 'itemgroup'
// version is set to false, because this isn't available by default for legacy databases
version false
id generator:'hilo',params: [table: 'hilovalue', column: 'nextvalue'],column:'iditemgroup'
cmJob column:'jobid'
cmItemGroupState column:'iditemgroupstate'
}
String toString() {
return "${id}"
}
}
在Domain类中,各字段的名称我原样采用了数据库中的列名。主键和外键的设置,都在mapping中。如果你觉得字段的名称采用数据列名与你的代码规范冲突,那么你完全可以按规范自定义,然后再mapping中将字段名与列名进行映射即可。这样:字段名 column:‘列名’。和外键的处理一样。
还有,将static mapping中的version置为false。
3、所有列默认都是不能为空的。如果有的列可能为空,记得在constraints中加约束。
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
45、ORM框架SQLAlchemy
Python数据库ORM工具sqlalchemy的学习笔记
grails最佳实践
php文件缓存类实例整理
SpringBoot | 第九章:Mybatis-plus 的集成和使用
正确理解Hibernate Inverse - 51CTO.COM
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服