文档章节

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

寡鸡蛋
 寡鸡蛋
发布于 2013/10/02 20:42
字数 467
阅读 30
收藏 0
点赞 0
评论 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
博文 50
码字总数 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-代码剪辑-日志跟踪

任何开发都需要跟踪一些调试信息,避免频繁的使用Debug模式,我们会在方法中放入一些info,执行过程中打印到后台,Grails使用的是log4j作为日志框架,所以和在Java开发中的使用方法是一样的,...

寡鸡蛋
2013/10/05
0
0
Groovy&Grails-代码剪辑-日期时间格式化

使用grails标签获取到日期时间后是格林威治时间样式:2013-09-27 13:57:37 CST ,所以显示的时候需要格式化一下,格式化代码如下: 但是使用JSON获取到数据后,不是用标签获取到的,所以需要在生成...

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

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

寡鸡蛋
2013/10/03
0
0
Groovy&Grails-代码剪辑-直接使用数据表

其实现在开发过程中,大部分人对面向对象的概念一点都不感冒.虽然这玩意发展了这么久,在国内的软件公司确不为所动.估计是工期赶的紧,所以大部分功能就一条SQL搞定比较干脆.在Grails中其实不提...

寡鸡蛋
2013/09/30
0
0
Groovy&Grails-代码剪辑-常用数据库连接

DataSourceH2,也就是脚手架默认生成的. MySQL Oracle DB2

寡鸡蛋
2013/09/26
0
0
非常全的javascript控制MediaPlayer的属性集合

发现了1ting的代码,歌词同步代码,真不错,把基础控制,整理下以后想好好弄下 播放: MediaPlayer.Play() 暂停: MediaPlayer.Pause() 定位: MediaPlayer.SetCurrentEntry(lWhichEntry) Medi...

老先生二号
2017/05/15
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

垃圾回收算法

一 如何判断对象可以回收 1 引用计数法 思路大概为:给对象添加一个引用计数器,每当有一个地方引用它时,计数器值加1;当引用失效时,计数器减1;任何时刻计算器为0的对象就是不可能再被使用...

sen_ye
1分钟前
0
0
Activiti简介(学习总结一)

一、介绍 activiti是使用命令模式设计基于bpmn2.0的一款开源工作流引擎。 工作流简单举例:提交请假申请->经理审批->结束。这就是一个简单流程。activiti支持用户自定义流程。配置各个流程对...

沙shasha
2分钟前
0
0
VCL界面控件DevExpress VCL Controls发布v18.1.3|附下载

DevExpress VCL Controls是 Devexpress公司旗下最老牌的用户界面套包。所包含的控件有:数据录入,图表,数据分析,导航,布局,网格,日程管理,样式,打印和工作流等,让您快速开发出完美、...

Miss_Hello_World
3分钟前
0
0
加米谷大数据培训:云计算、大数据和人工智能之间的关系

一般谈云计算的时候会提到大数据、谈人工智能的时候会提大数据、谈人工智能的时候会提云计算……感觉三者之间相辅相成又不可分割。 一、云计算最初的目标 云计算最初的目标是对资源的管理,管...

加米谷大数据
8分钟前
1
0
java集合元素的默认大小

当底层实现涉及到扩容时,容器或重新分配一段更大的连续内存(如果是离散分配则不需要重新分配,离散分配都是插入新元素时动态分配内存),要将容器原来的数据全部复制到新的内存上,这无疑使...

竹叶青出于蓝
10分钟前
1
0
Java快速开发平台,JEECG 3.7.7闪电版本发布,增加多套主流UI代码生成器模板

JEECG 3.7.7 闪电版本发布,提供5套主流UI代码生成器模板 导读 ⊙平台性能优化,速度闪电般提升 ⊙提供5套新的主流UI代码生成器模板(Bootstrap表单+BootstrapTable列表\ ElementUI列表表单)...

Jeecg
13分钟前
0
0
export 和 module.export 的区别

在浏览器端 js 里面,为了解决各模块变量冲突等问题,往往借助于 js 的闭包把左右模块相关的代码都包装在一个匿名函数里。而 Nodejs 编写模块相当的自由,开发者只需要关注 require,exports,...

孟飞阳
16分钟前
1
0
技术教育的兴起

技术教育的兴起 作者: 阮一峰 1、 有一年,我在台湾环岛旅行。 花莲的海边,我遇到一对台湾青年夫妻,带着女儿在海滩上玩。我们聊了起来。 当时,我还在高校当老师。他们问我,是否觉得台湾...

吕伯文
16分钟前
0
0
Linux服务器下的HTTP抓包分析

说到抓包分析,最简单的办法莫过于在客户端直接安装一个Wireshark或者Fiddler了,但是有时候由于客户端开发人员(可能是第三方)知识欠缺或者其它一些原因,无法顺利的在客户端进行抓包分析,...

mylxsw
20分钟前
0
0
mybatis3-javaapi

sqlSessionFactoryBuilder->sqlSessionFactory->sqlSession<-rowbound<-resultHandler myBatis uses a Java enumeration wrapper for transaction isolation levels, called TransactionIsol......

writeademo
23分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部