文档章节

Groovy&Grails-代码剪辑-瞬时属性

寡鸡蛋
 寡鸡蛋
发布于 2013/10/02 20:42
字数 467
阅读 30
收藏 0
  • 用户注册验证

在domain中有的属性并不一定要存放到数据库中去,只是在domain中使用而不保存到数据库,这样的属性称为瞬时属性,如下:

<!-- lang: groovy -->
class User {
    static stransients = ["confirmPassword"]

    String firstName
    String lastName
    String userName
    String password
    String email

    String confirmPassword
}

这个confirmPassword只在domain中验证是否和password属性一致,判断用户注册时临时使用一次。

  • 财务计算

再举一个例子,假如计算一个公司的净资产,需要将公司的“现金”、“应收款”、“注册资本”累加得到,而这个累加的值没必要记录到静态数据里,只是临时查询的时候计算一次,就可以使用这个瞬时属性,代码如下:

<!-- lang: groovy -->
class Company {
    BigDecimal cash
    BigDecimal receivables
    BigDecimal capital

    BigDecimal getNetWorth() {
        cash + receivables + capital
    }

    static transients = ['netWorth']
}

如果一个domain中一个属性拥有getName()或setName()方法,那么这个属性就是一个持久化属性,并且可以使用class.name访问

  • 派生属性使用场景

针对上面这个例子,假如netWorth需要保存到数据库记录,但是要随着其他属性的变化而变化,则可以使用派生属性来实现,派生属性实现方法就比上面的更容易了,代码如下:

<!-- lang: groovy -->
class Company {
    BigDecimal cash
    BigDecimal receivables
    BigDecimal capital
    BigDecimal netWorth

    static mapping = {
        netWorth formula: 'CASH + RECEIVABLES + CAPITAL'
    }
}

这里需要注意的是关键字formula,需要数据库的支持,它并不在代码中执行,而是在数据库中执行。有的数据库可能不支持,所以这意味着需要牺牲数据库移植的问题。

© 著作权归作者所有

共有 人打赏支持
寡鸡蛋
粉丝 12
博文 51
码字总数 19107
作品 0
中山
售前工程师
私信 提问
Groovy&Grails-代码剪辑-复用约束

假如我们在程序中使用了一个command对象,在Grails2.0之后的版本中引入了新的机制,可以复用constraints块的代码,重用约束,如下面的例子: 上面的代码时一个标准的domain对象,假如我们要在...

寡鸡蛋
2013/11/01
0
0
Groovy&Grails-代码剪辑-domain对象保存

默认domain对象中,没有在constraints中声明的属性都是必填项。 如User对象 测试代码 会出现用例测试错误,将所有字段都填值后,测试代码运行正常 在constraints中声明lastname允许为空 再测...

寡鸡蛋
2013/10/08
0
0
Groovy&Grails-代码剪辑-初始化

开发时需要初始化一些特定的代码,测试时需要初始化一些测试代码,在生产环境时需要初始化一些运行时环境代码,在Grails的bootstrap中可以根据不同的环境进行特定的植入,代码如下:...

寡鸡蛋
2013/10/03
0
0
Groovy&Grails-代码剪辑-修改主键

有的时候安全起见需要修改ID的生成方式,有时候因为特定的原因对ID字段需要自定义生成,更多的时候是比较无聊。修改ID字段的默认值 使用UUID方式生成ID 自定义ID的值 确实够无聊的。 附带一些...

寡鸡蛋
2013/10/02
0
0
Groovy&Grails-代码剪辑-domain对象继承

默认的对象继承在数据库中的表现也是将表用外键进行关联管理,当然可以修改默认的配置,而且为了保持对象和数据表的一致性,这里建议修改成一张表来表示继承对象 对象继承 数据表外键关联 用...

寡鸡蛋
2013/10/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

我是如何将博客转成PDF的

前言 只有光头才能变强 之前有读者问过我:“3y你的博客有没有电子版的呀?我想要份电子版的”。我说:“没有啊,我没有弄过电子版的,我这边有个文章导航页面,你可以去文章导航去找来看呀”...

Java3y
5分钟前
0
0
nginx的一些总结

Linux下安装Nginx完整教程及常见错误解决方案 1.Nginx安装环境 Nginx是C语言开发,建议在linux上运行,本教程使用Centos7.0作为安装环境. 1)gcc 安装nginx需要先将官网下载的源码进行编译,编译...

Yao--靠自己
12分钟前
0
0
Predicate函数式接口

Predicate接口主要用于流的筛选,比如在filter方法中传入Predicate判断。 作为函数式接口,这里居然有三个default方法,一个static方法,子孙满堂! 正统的接口方法,就是boolean test(T t)...

woshixin
13分钟前
0
0
sql 开窗函数

开窗函数:在开窗函数出现之前存在着很多用 SQL 语句很难解决的问题,很多都要通过复杂的相关子查询或者存储过程来完成。为了解决这些问题,在 2003 年 ISO SQL 标准加入了开窗函数,开窗函数...

hblt-j
24分钟前
1
0
使用Vue动态生成form表单的实例代码

具有数据收集、校验和提交功能的表单生成器,包含复选框、单选框、输入框、下拉选择框等元素以及,省市区三级联动,时间选择,日期选择,颜色选择,文件/图片上传功能,支持事件扩展。 欢迎大家s...

嫣然丫丫丫
31分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部