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

  • 用户注册验证

在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,需要数据库的支持,它并不在代码中执行,而是在数据库中执行。有的数据库可能不支持,所以这意味着需要牺牲数据库移植的问题。

转载于:https://my.oschina.net/65304586/blog/165682

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值