改进groovyq的这篇文章:
http://www.groovyq.net/content/%E8%BF%94%E5%9B%9E%E9%83%A8%E5%88%86doaminclass#comment-179
感谢groovyq对Grails新人的指点.
def excludedProps = [Events.ONLOAD_EVENT,
Events.BEFORE_DELETE_EVENT, Events.AFTER_DELETE_EVENT,
Events.BEFORE_INSERT_EVENT, Events.AFTER_INSERT_EVENT,
Events.BEFORE_UPDATE_EVENT, Events.AFTER_UPDATE_EVENT]
grailsApplication.domainClasses.each{ domainClass ->
/**
* 添加取domain部分属性的功能
* 参数[include:[],except:[],relationship:[]]
*/
domainClass.metaClass.part = {m=[:]->
def map= [id:delegate.id]
if(m.'include'){
m.'include'.each{
map[it] = delegate."$it"
}
}else{
domainClass.persistentProperties.each{
if(!(m.'except' && it.name in m.'except') && !(it.name in excludedProps) && !it.isAssociation()){
map[it.name]= delegate."${it.name}"
}
}
}
m.'relationship'?.each{key,value=null->
def mapKey = value?:key
key.split(/\./).each{propName->
map[mapKey] = (map[mapKey]?:delegate)."$propName"
}
}
return map
}
使用方法:
def instance = SomeDomain.get(0);
//输出所有的非关联属性,以及指定的关联的某几个属性
instance.part( relationship:['bureau.id','bureau.name','bureau.code'] ) as JSON
//{id:1,"code":"AA","descript":null,"floorHeight":null,"floorLoad":null,"floorNo":null,"name":"AAA","bureau.id":0,"bureau.name":"A","bureau.code":"AAA"}
//仅输出指定的非关联属性以及指定的关联属性
instance.part(
include:['code','name'],
relationship:['bureau.name']
)
//{"id":0,code:"aaa","name":"AAA","bureau.name":"A"}
//输出除了id和name外的所有非关联属性以及指定的关联属性.
instance.part(
except:['name'],
relationship:['bureau.name']
)
//{id:0,"code":"AA","descript":null,"floorHeight":null,"floorLoad":null,"floorNo":null,"bureau.name":"A"}
//指定关联属性的命名.
instance.part(
except:['name'],
relationship:['bureau.id':'bureauId','bureau.name':'bureauName']
)
//{id:0,"code":"AA","descript":null,"floorHeight":null,"floorLoad":null,"floorNo":null,"bureauId":"A","bureauName":"A"}
分享到:
相关推荐
《Apress.Beginning.Groovy.and.Grails.From.Novice.to.Professional.Jun.2008》这本书深入浅出地介绍了Groovy语言和Grails框架,旨在帮助初学者快速掌握这两项技术并转化为专业人士。Groovy和Grails是Java生态中的...
Definitive.Guide.to.Grails.part2
2. **核心功能篇**:涵盖Grails的核心组件,如领域类(Domain Classes)、控制器(Controllers)、视图(Views)等,以及它们之间的交互方式。 3. **高级主题篇**:深入探讨插件系统、安全性、事务管理等高级主题。 ...
除了提供JSON数据外,Grails还支持从外部Web服务动态获取JSON数据。例如,可以从Yahoo!等服务提供商处获取JSON数据: ```groovy import groovy.json.JsonSlurper ... def getWeather = { def url = ...
对于Grails部分,会介绍如何创建一个新的Grails应用,配置环境,以及如何利用GORM进行数据库操作。此外,还会涉及Grails的控制器、服务、领域模型和视图的构建,以及测试和部署策略。 在深入学习Groovy和Grails的...
2. **application.properties**:这是Grails应用的标准配置文件,用于设置应用的属性。在这个插件中,可能包含了与安全相关的配置项,如默认的用户名、密码、授权策略等。 3. **plugin.xml**:XML格式的插件描述...
3. Domain Classes:领域类是Grails中的模型部分,通过GORM自动实现数据库映射。 4. Services:服务层封装了业务逻辑,可跨控制器复用,提高代码复用性。 三、Grails插件系统 Grails的插件系统是其强大之处,提供...
在安全性配置部分,提及了org.grails.plugins:spring-security-core和org.grails.plugins:spring-security-rest,这代表了Grails项目中将使用Spring Security来管理安全问题,包括认证和授权,以及Spring Security ...
grails.2.5.1 环境,适用于Windows下Grails开发,具体配置请参照https://jingyan.baidu.com/article/86fae3461af6cf3c49121a91.html
compile 'org.grails.plugins:mongodb:5.2.0' } ``` 然后运行`grails refresh-dependencies`命令,以更新项目依赖并引入MongoDB插件。 接下来,我们配置Grails与MongoDB的连接。在`Config.groovy`文件中,添加...
### Grails 2: A Quick-Start Guide #### 书籍概览 《Grails 2:快速入门指南》是一本专为希望...无论你是希望通过实践学习Grails的新手,还是希望提高自己开发效率的经验开发者,本书都能为你提供宝贵的指导和支持。
grails.project.plugins.dir="./plugins" ``` 这将恢复旧的插件存储位置,从而解决编辑问题。 3. **静态参数插件应用** 使用 `<g:selectParams>` 和 `<g:staticParams>` 标签可以方便地在视图层处理静态参数。...
### Grails 3.X开发实战:Groovy基础详解 #### Groovy简介 Groovy是一种针对Java虚拟机(JVM)设计的动态编程语言,它融合了多种语言的优点,包括Python、Ruby以及Smalltalk等,旨在提供更为灵活和高效的开发体验。...
- **GORM(Grails Object Relational Mapping)**:Grails的内置ORM工具,用于处理与关系数据库的交互,支持自动数据验证和关联映射。 2. **项目构架**: - **Scaffolding**:Grails提供快速生成基础CRUD操作的...
grails3.2.8.7z.002 PART2
在Grails与GORM中,处理这种关联特别简单,只需要在领域类中定义相应的属性和关系,FreeMarker模板则可以用来动态地展示这些关联数据。 例如,假设我们有一个`User`类和一个`Post`类,`User`可以有多个`Post`,那么...
Definitive Guide to Grails