- 浏览: 536174 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (174)
- Groovy (28)
- Grails (14)
- DHTML (5)
- JS (4)
- jQuery (16)
- JAVA (16)
- Eclipse (4)
- Hibernate (2)
- Resin (2)
- Oracle (25)
- Maven (4)
- Struts2 (1)
- WebWork2 (3)
- Tomcat (2)
- Windows7 (4)
- Griffon (2)
- PowerDesigner (1)
- Pro*C (2)
- JDK (1)
- 乱码 (2)
- WebService (3)
- .NET (1)
- 性能 (2)
- 安装 (1)
- 命令行 (1)
- function (1)
- type (1)
- Mysql (1)
- 同步 (1)
- Synchronized (1)
- json (3)
- Office (1)
- Visio (1)
- 自定义形状 (1)
- jsong (0)
- gson (1)
- fastjson (1)
- EM (1)
- DB2 (6)
- Sequence (1)
- RHEL5.x (1)
- WAS6.1 ND (1)
- SQL (1)
- -964 (1)
- Linux (4)
- Date (1)
- Format (1)
- Add (1)
- SHELL (1)
- CSS (2)
- Bootstrap (1)
- nginx (1)
- Openresty (2)
- JWPlayer (1)
- showdoc (1)
- 常用网址 (1)
- lua (2)
- SpringBoot (1)
- Office pdf linux (1)
最新评论
-
纵观全局:
Great
阿里巴巴开源JSON解析组件FastJson简单使用笔记 -
guxuede:
...
Groovy编程技巧 -
a1439226817:
groovy用的多吗?我还没发现有哪个java项目在用这个?
Groovy同步 -
晴子9034:
在网上搜到的几乎全是说满了就扩充。但是我有个疑问,满了就扩充, ...
解决DB2 SQLCODE=-964日志文件满的问题 -
在世界的中心呼喚愛:
好东西啊,就用这个包。
阿里巴巴开源JSON解析组件FastJson简单使用笔记
原贴地址:http://www.groovyq.net/content/grails%E4%B8%AD%E7%9A%84%E5%91%BD%E5%90%8D%E6%9F%A5%E8%AF%A2
Grails从1.2起已经支持命名查询了,但在按章节分的那个参考文档中并没有详细的说明其用法,倒是在“领域类”的细目说明中给出了基本使用。最近,Peter Ledbrook在“再说Grails 1.3特性”中给出了相关的说明。
命名查询是通过在Domain Class中定一个namedQueries静态属性实现的:
它的典型使用:
Report.inFirstWeek.list()
Report.inWeek(2).list(),要想给命名查询传参数,只要在相应的闭包中定义即可
Report.inFirstWeek.get(3),注意,get中传入的是DomainClass的id,如果查询结果中有此id,那么返回相应记录;反之为null
Report.dilbertsReports.inFirstWeek.list(),级联进行查询不断细化结果集
在命名查询中使用的完全是Criteria DSL,对于有过SQL背景的同学来说可能不是特别习惯,而更愿意去使用HQL。但是从我个人的体验来说,因为我也是这么过来的,如果你放弃了Criteria DSL,那你就放弃了简化代码的大好机会!在查询条件是根据一个查询条件窗体自动产生的场景中,使用Criteria DSL绝对比起自己去拼凑HQL要来得清晰简单,且不易出错。这种例子已经有很多了,在此就不再赘述。
在本文的结尾,我再给出使用Criteria DSL时进行分页、排序的另一种做法。这种做法在文档中并没有记录,但是通过查看源码是可以发现的。其做法跟咱们使用DomainClass.list时的方法完全一模一样,这样就比起自己在Criteria DSL里去写要简便多了。同时,在查询结果较多,需要进行分页显示时,只需要构造一个Criteria即可,而不需要写成2个。废话少说了,看例子便可以明白:
上面的例子摘自我个人项目中的源码,filterJob闭包是根据一个查询窗体去构造相应的查询条件。由上面可以看出,这要比起自己去拼凑HQL要清晰很多。这里的另一个重点在于这两句:Job.createCriteria().list(params, filterJob)和Job.createCriteria().count(filterJob)。前者查询出结果,并根据params中的分页排序参数去完成相应的分页和排序,后者则得出整个查询的大小。完全跟Grails中generate-all命令产生的代码类似!利用这个做法,我们只需要构造一个DSL即可,否则要是按文档中介绍的把order和分页相关的部分也作为Criteria DSL中一部分定义,那么上面的records和count就得写成2个。
Peter还在其文章中介绍了Grails 1.3的其他特性,有兴趣的可访问原文。
Grails从1.2起已经支持命名查询了,但在按章节分的那个参考文档中并没有详细的说明其用法,倒是在“领域类”的细目说明中给出了基本使用。最近,Peter Ledbrook在“再说Grails 1.3特性”中给出了相关的说明。
命名查询是通过在Domain Class中定一个namedQueries静态属性实现的:
class Report { String name static hasMany = [frequencies: Frequency, servers: Server] static namedQueries = { inFirstWeek { frequencies { eq("wom", 1) } } inWeek { wom -> frequencies { eq("wom", wom) } } dilbertsReports { servers { eq("mgrEmail", "dilbert@nowhere.org") } } inCity { city -> servers { location { eq("city", city) } } } }
它的典型使用:
Report.inFirstWeek.list()
Report.inWeek(2).list(),要想给命名查询传参数,只要在相应的闭包中定义即可
Report.inFirstWeek.get(3),注意,get中传入的是DomainClass的id,如果查询结果中有此id,那么返回相应记录;反之为null
Report.dilbertsReports.inFirstWeek.list(),级联进行查询不断细化结果集
在命名查询中使用的完全是Criteria DSL,对于有过SQL背景的同学来说可能不是特别习惯,而更愿意去使用HQL。但是从我个人的体验来说,因为我也是这么过来的,如果你放弃了Criteria DSL,那你就放弃了简化代码的大好机会!在查询条件是根据一个查询条件窗体自动产生的场景中,使用Criteria DSL绝对比起自己去拼凑HQL要来得清晰简单,且不易出错。这种例子已经有很多了,在此就不再赘述。
在本文的结尾,我再给出使用Criteria DSL时进行分页、排序的另一种做法。这种做法在文档中并没有记录,但是通过查看源码是可以发现的。其做法跟咱们使用DomainClass.list时的方法完全一模一样,这样就比起自己在Criteria DSL里去写要简便多了。同时,在查询结果较多,需要进行分页显示时,只需要构造一个Criteria即可,而不需要写成2个。废话少说了,看例子便可以明白:
def query ={ def filter= JSON.parse(params.filter) def filterJob = { and{ source{ or{ filter.source.each{ key, value -> if(value){ eq("id", key.split('-')[1] as long) } } } } if(filter.category!='all'){ categorys{ eq("id", filter.category as long) } } if(filter.options.resolved!='all'){ eq("resolved", Boolean.valueOf(filter.options.resolved)) } if(filter.options.paied!='all'){ eq("paied", Boolean.valueOf(filter.options.paied)) } } } def rval= [:] rval.records= Job.createCriteria().list(params, filterJob) rval.totalRecords= Job.createCriteria().count(filterJob) render rval as JSON }
上面的例子摘自我个人项目中的源码,filterJob闭包是根据一个查询窗体去构造相应的查询条件。由上面可以看出,这要比起自己去拼凑HQL要清晰很多。这里的另一个重点在于这两句:Job.createCriteria().list(params, filterJob)和Job.createCriteria().count(filterJob)。前者查询出结果,并根据params中的分页排序参数去完成相应的分页和排序,后者则得出整个查询的大小。完全跟Grails中generate-all命令产生的代码类似!利用这个做法,我们只需要构造一个DSL即可,否则要是按文档中介绍的把order和分页相关的部分也作为Criteria DSL中一部分定义,那么上面的records和count就得写成2个。
Peter还在其文章中介绍了Grails 1.3的其他特性,有兴趣的可访问原文。
发表评论
-
Grails编写WebService客户端
2012-05-28 13:39 2846环境:jdk1.6.0.31 + Grails2.0.4 1. ... -
解决grails run-app控制台输出乱码问题
2012-04-17 13:14 1764在运行项目时加上 -Dfile.encoding参数,值随OS ... -
(转)使用grag对Grails进行数据库逆向工程
2011-08-04 10:07 1591http://blog.csdn.net/wudith/art ... -
(转)提高Grails应用的查询性能
2011-04-22 17:32 1129转载地址:http://www.groovyq.net/con ... -
(转) 使用Grails进行数据库逆向工程
2010-12-01 14:53 1944原贴地址:http://groovyq.n ... -
Grails渲染JSON迷你手册
2010-07-28 10:42 3075http://memo.feedlr.com/?p=6 Mi ... -
(转)让HelpBalloons飘在你的GSP上空
2010-06-09 16:14 1117原贴地址:http://www.groovyq.net/nod ... -
使用createAlias进行“以子对象的属性为查询条件的”查询
2010-06-01 10:52 34def enReservedVenuses = { ... -
利用Hibernate的HibernateCriteriaBuilder建立可分页并带有查询条件的查询
2010-02-26 14:53 76def adminList = { par ... -
Grails应用技巧
2010-02-26 10:58 32291. 领域模型属性复制 ... -
在Grails Console中调用GetBean
2010-01-25 09:57 1197http://www.groovyland.net/?q=no ... -
在Grails console中执行SQL语句
2010-01-22 16:50 28911. import groovy.sql.Sql ... -
Grails分页查询总结
2010-01-06 16:26 407看代码: def list = { param ... -
关于Grails输出JSON的总结
2010-01-06 11:43 19591. def oList = [total:0, ro ... -
Grails+Xfire 搭建Web Service环境
2009-12-24 15:13 1875Grails 加上Xfire plugin 搭建web S ... -
Grails问题汇总
2009-10-28 13:05 63转自:http://hi.baidu.com/ssyuan/b ... -
Grails中直接使用SQL返回List
2009-09-23 10:13 210import groovy.sql.Sql class ... -
Grails按样本查询
2009-07-02 15:35 61主要用到find方法: 方法说明: 指定查询条件(如果没有找 ... -
案例研究:利用Grails搭建Feedlr.com网站
2009-06-29 11:16 1934原贴地址:http://www.infoq ...
相关推荐
- **规约配置**:Grails遵循一定的约定,例如文件组织和命名规范,以提高开发效率。 - **运行和测试应用**:指南涵盖了如何启动、测试和部署Grails应用,包括单元测试和集成测试。 - **部署**:讲解了在各种Java ...
- **动态查询**:支持基于动态条件的查询操作,增加查询灵活性。 - **界面美化**:通过布局和CSS美化页面,提升用户界面的设计感。 #### 三、Grails进阶 - **安全性**: - **用户认证**:实现用户登录、权限验证...
### 在Eclipse中高效利用Grails类创建工具 在深入探讨如何在Eclipse环境中使用Grails类创建工具之前,我们先简要回顾一下Grails框架及其核心特性。Grails是一款基于Groovy语言的高性能Web应用开发框架,它遵循约定...
4. **变量作用域**:在 Grails 中,变量的作用域有 `page`、`request`、`flash`、`session` 和 `application` 等。例如,`flash` 用于存储临时消息,如错误信息等。 5. **特殊操作符**:如 `==` 和 `is` 分别对应 ...
此外,URL映射还支持命名的URL,这样可以在视图或控制器中方便地引用它们,提升代码的可读性。例如: ```groovy "/books"(name: 'booksList', controller: 'book', action: 'list') ``` 然后在视图中可以使用`...
在Grails框架中,模板(Template)是一种强大的工具,它用于快速生成代码,尤其是在构建脚手架(Scaffolding)时。脚手架是自动创建的CRUD(创建、读取、更新、删除)界面,它极大地提高了开发效率,使得开发者无需...
- **减少配置工作**:Grails遵循一定的命名和组织结构约定,减少了大量手动配置的需求。 - **提高开发效率**:使得开发者可以快速搭建项目结构并进行开发。 ##### 2.7 运行应用程序 - **命令行方式**:使用`grails ...
命名约定的一些变化 添加了对多个数据源的完全支持 Grails 2.0 插件重构 最小 Grails 依赖项 2.0.3 添加了对可选乐观锁定的支持 - 基于 MyBatis Optimist 插件( ),同时避免 Java 注释(约定优于配置) 添加了...
在Grails中,一个典型的开发流程如下: 1. **创建项目** 使用`grails create-app`命令创建一个新的Grails应用,如`grails create-app testApp`,这会生成基本的项目结构。 2. **定义领域模型** 在`src/groovy`...
4. **Grails命令**:提供了`flyway:migrate`、`flyway:clean`等Grails命令,方便在Grails环境中执行数据库迁移操作。 5. **多环境支持**:根据Grails的环境配置(如开发、测试、生产),插件可以应用不同的迁移策略...
compile ' org.grails.plugins:icu:1.0 '}特征命名参数默认情况下,Grails允许在i18n消息中仅使用编号的参数。 该插件还允许使用命名参数,有时更易读。 例如: numbered={0}, you have {1} unread messages of {2}...
在 "richui-two" 插件中,开发者可以找到一系列 JavaScript 库和组件,这些库和组件经过精心设计,能够与 Grails 后端无缝集成。JavaScript 在现代 web 开发中扮演着至关重要的角色,它负责处理客户端逻辑,实现动态...
- **XML Namespaces**:ZK使用XML命名空间来区分不同的组件类型,这有助于避免命名冲突,并提供更丰富的组件库。 - **Richlet**:这是ZK中一个特殊的组件类型,它可以嵌入到网页中,并能够与浏览器进行交互。Richlet...
转到tlv/apps/tlv-app并将application.yml.local复制到同一目录中,并将其命名为application.yml 。 转到tlv/apps/tlv-app并运行grails run-app 。 在浏览器中转到http://localhost:8090/tlv 。 特别分支 根据...
Grails是基于Groovy的一个Web应用框架,它可以快速构建MVC结构的应用,而Gradle则是一个强大的构建自动化工具,广泛应用于Java项目。Groovy的动态性和灵活性使得它成为构建脚本和自动化任务的理想语言。 文件名列表...