- 浏览: 65679 次
- 性别:
- 来自: 上海
最新评论
-
take:
理论上是可以返回个PagedResultList类型对象,里面 ...
GRAILS 分页 查询 -
seanwon:
zcq100 写道你们的商城进展如何了
上线了。。。最近太忙, ...
某商城是怎么炼成的 之kickoff -
zcq100:
你们的商城进展如何了
某商城是怎么炼成的 之kickoff -
seanwon:
eye4sany 写道不觉得有一大段的代码写了两遍吗
上面一段 ...
GRAILS 分页 查询 -
eye4sany:
不觉得有一大段的代码写了两遍吗
GRAILS 分页 查询
在做grails的查询分页的时候,发现一个问题,那就是输入的查询参数不能作为条件在分页之间传递,而且如果做分页查询的总数也不得而知,针对多条件criteria查询(也适用于HQL查询)做了如下实现,代码如下:
最主要的是蓝色标注的部分,创建新的criteria,用projection的rowCount()方法,统计总条数,查询条件要保持一致,然后制定参数传递给view。
def bookingInstance = new Booking(params)
def criteria = Booking.createCriteria()
def max = 5
def offset = 0
if(params.max) max = params.max.toInteger()
if(params.offset) offset = params.offset.toInteger()
def results = criteria {
and {
if(bookingInstance.employee && session.employee.role=='Admin'){
eq('employee',bookingInstance.employee)
}
if(bookingInstance.meetingRoom){
eq('meetingRoom',bookingInstance.meetingRoom)
}
if(bookingInstance.startDateTime){
println bookingInstance.startDateTime
ge('endDateTime',bookingInstance.startDateTime)
}
if(bookingInstance.endDateTime){
le('startDateTime',bookingInstance.endDateTime+1)
}
maxResults(max)
firstResult(offset)
order('startDateTime', 'asc')
}
}
def criteria1 = Booking.createCriteria()
def branchCount = criteria1.get {
and {
if(bookingInstance.employee && session.employee.role=='Admin'){
eq('employee',bookingInstance.employee)
}
if(bookingInstance.meetingRoom){
eq('meetingRoom',bookingInstance.meetingRoom)
}
if(bookingInstance.startDateTime){
println bookingInstance.startDateTime
ge('endDateTime',bookingInstance.startDateTime)
}
if(bookingInstance.endDateTime){
le('startDateTime',bookingInstance.endDateTime+1)
}
}
projections {
rowCount()
} }
params.branchCount = branchCount
params.page = 1
println "${branchCount}nnnn"
render(view:'searchresults',model:[ bookingInstanceList: results,params:params ])
view的代码如下:
<g:paginate controller="booking"
action="search" total="${params.branchCount}"
max="5" maxsteps="4" params="${params}" />
主要是指定max,params,total参数,这样就可以在分页查询中传递参数了。
上面一段是演示不分页的,下面一段是演示分页的。。
不过这个方案不是最好的了,看一下SSailYang的回复:
不用这么麻烦。如果你向 list 方法中传递分页信息
Java代码
list(max:x, offset:x) {
// query criteria
} list(max:x, offset:x) {
// query criteria
}
list 方法将返回 PagedResultList 类型的对象。你可以通过 PagedResultList 中的 totalCount 属性得到记录的总数。
我可能方法不对,但是按照你提到的做了,好像没有totalCount这么一个属性。
最主要的是蓝色标注的部分,创建新的criteria,用projection的rowCount()方法,统计总条数,查询条件要保持一致,然后制定参数传递给view。
def bookingInstance = new Booking(params)
def criteria = Booking.createCriteria()
def max = 5
def offset = 0
if(params.max) max = params.max.toInteger()
if(params.offset) offset = params.offset.toInteger()
def results = criteria {
and {
if(bookingInstance.employee && session.employee.role=='Admin'){
eq('employee',bookingInstance.employee)
}
if(bookingInstance.meetingRoom){
eq('meetingRoom',bookingInstance.meetingRoom)
}
if(bookingInstance.startDateTime){
println bookingInstance.startDateTime
ge('endDateTime',bookingInstance.startDateTime)
}
if(bookingInstance.endDateTime){
le('startDateTime',bookingInstance.endDateTime+1)
}
maxResults(max)
firstResult(offset)
order('startDateTime', 'asc')
}
}
def criteria1 = Booking.createCriteria()
def branchCount = criteria1.get {
and {
if(bookingInstance.employee && session.employee.role=='Admin'){
eq('employee',bookingInstance.employee)
}
if(bookingInstance.meetingRoom){
eq('meetingRoom',bookingInstance.meetingRoom)
}
if(bookingInstance.startDateTime){
println bookingInstance.startDateTime
ge('endDateTime',bookingInstance.startDateTime)
}
if(bookingInstance.endDateTime){
le('startDateTime',bookingInstance.endDateTime+1)
}
}
projections {
rowCount()
} }
params.branchCount = branchCount
params.page = 1
println "${branchCount}nnnn"
render(view:'searchresults',model:[ bookingInstanceList: results,params:params ])
view的代码如下:
<g:paginate controller="booking"
action="search" total="${params.branchCount}"
max="5" maxsteps="4" params="${params}" />
主要是指定max,params,total参数,这样就可以在分页查询中传递参数了。
评论
7 楼
take
2012-03-08
理论上是可以返回个PagedResultList类型对象,里面可以包含List和count.
但我现在只要返回PagedResultList, 程序就会报错.!
但我现在只要返回PagedResultList, 程序就会报错.!
6 楼
seanwon
2010-08-04
eye4sany 写道
不觉得有一大段的代码写了两遍吗
上面一段是演示不分页的,下面一段是演示分页的。。
不过这个方案不是最好的了,看一下SSailYang的回复:
SSailYang 写道
不用这么麻烦。如果你向 list 方法中传递分页信息
list 方法将返回 PagedResultList 类型的对象。你可以通过 PagedResultList 中的 totalCount 属性得到记录的总数。
list(max:x, offset:x) { // query criteria }
list 方法将返回 PagedResultList 类型的对象。你可以通过 PagedResultList 中的 totalCount 属性得到记录的总数。
5 楼
eye4sany
2010-08-04
不觉得有一大段的代码写了两遍吗
4 楼
java-007
2009-11-05
thanks!
3 楼
seanwon
2009-01-28
我搞明白了,SSailYang您太有才了,这个我找了很多api和参考,竟然没有找到。
如果有相应的参考文档,还请共享。
criteria的list方法,如果指定max:x,offset:y参数,返回的是PageResultList类型,如果不指定,是返回的ArrayList类型。
这太有才了。
如果有相应的参考文档,还请共享。
criteria的list方法,如果指定max:x,offset:y参数,返回的是PageResultList类型,如果不指定,是返回的ArrayList类型。
这太有才了。
2 楼
seanwon
2009-01-28
SSailYang 写道
不用这么麻烦。如果你向 list 方法中传递分页信息
Java代码
list(max:x, offset:x) {
// query criteria
} list(max:x, offset:x) {
// query criteria
}
list 方法将返回 PagedResultList 类型的对象。你可以通过 PagedResultList 中的 totalCount 属性得到记录的总数。
我可能方法不对,但是按照你提到的做了,好像没有totalCount这么一个属性。
1 楼
SSailYang
2009-01-28
不用这么麻烦。如果你向 list 方法中传递分页信息
list 方法将返回 PagedResultList 类型的对象。你可以通过 PagedResultList 中的 totalCount 属性得到记录的总数。
list(max:x, offset:x) { // query criteria }
list 方法将返回 PagedResultList 类型的对象。你可以通过 PagedResultList 中的 totalCount 属性得到记录的总数。
发表评论
-
什么是事务?(2)
2010-08-30 13:32 586待续 -
什么是事务?
2010-08-26 14:05 8691. 什么是事务 2.1 事务 ... -
认识事务 目录
2010-08-20 15:29 7081. 什么是事务... 3 2.1 ... -
JBOSS 4.0.5 EJB3.0之MDB (ACTIVEMQ)
2010-07-26 11:22 2099项目中用到了EJB3.0 MDB,以为很简单的,不想用的 ... -
我怀念的何止是那片土地
2010-05-28 11:49 715六一节快乐! -
存储过程的功过
2009-08-14 14:30 858因为公司有一部分核心业务,涉及到悲观锁处理,为了缩小事务的作用 ... -
事务策略 - (完整版)
2009-08-11 14:57 790最近研读了事务策略方面的文章,颇有心得。 整理了PPT ... -
GigaSpaces 服务虚拟化框架 简单的高性能SOA
2009-07-03 13:44 799........................ -
金融术语
2009-06-22 10:13 12441、咨询轧差(advisory netting): 见状态轧差 ... -
GigaSpaces 改革之路 (Survival Guilde for IT)白皮书的翻译文档
2009-06-20 14:54 1412前言•危机,是由两个 ... -
在高多并发应用内存和硬盘之争
2009-06-07 14:13 806“内存是新的硬盘,硬盘是新的磁带”。实时Web应用不断涌现,达 ... -
云计算涉及的术语和一些概念 整理ing
2009-05-31 09:58 8761、Amazon Web Services - Amazon的 ... -
CIF系统浅析
2009-05-22 10:31 4187背景 目前公司有很多后端的运营支撑系统,主要包括风控/清算/ ... -
XML 基础
2009-04-30 14:39 774经典: 1、属性和元素的区分:元数据(有关数据的数据)应当存储 ... -
GRAILS 1.1 Datasources 多数据源支持
2009-04-24 11:06 1743见附件的PPT教程里面有详细的说明和操作步骤。 环境: g ... -
分享公司内高手文章: TOPLINK 更新的问题
2009-04-01 13:04 809大家在调用toplink的update方法时可能会出现upda ... -
groovy datasource sql 在grails应用中如何处理事务
2009-03-31 18:53 2084特殊的需求,在GRAILS调用GROOVY SQL直接做数据更 ... -
GRAILS belongsTo hasMany 查询问题
2009-03-24 12:03 1403这个bug已经在1.1的正式版本中修复。 举个例子: cla ... -
GRAILS ID GENERATOR 可以自己设置ID字段的值
2009-03-02 17:21 3092这个bug已经在1.1正式版本修复,可以用insert:tru ... -
GRAILS 1.1 的一些问题列表
2009-02-07 13:42 10171、GSQL的eachRow方法会造成StackOverErr ...
相关推荐
3. **分页查询**:使用上述参数,你可以从数据库中获取当前页的数据。Grails的GORM提供了`offset`和`max`方法来实现这一点: ```groovy def pageData = MyDomain.list(max: params.max, offset: (params.page - 1) ...
分页查询示例: ```groovy def users = User.list(max: 10, offset: 0) // 获取第一页的10条记录 ``` 排序示例: ```groovy def users = User.findAllByAgeGreaterThan(18, [sort: 'age', order: 'desc']) ``` ### ...
Grails框架中的GORM(Groovy Object Relational Mapping)是利用Groovy语言的优势来简化数据库操作的一套对象关系映射技术。GORM支持多种查询方式,提供了类似于Hibernate的查询能力,并且由于Groovy语言的动态特性...
《逐步学习Grails框架(5):构建动态组合查询与分页功能》 在Grails开发过程中,构建动态组合查询和实现分页展示是常见的需求。本篇教程将介绍如何在Grails应用中创建一个根据产品编号进行组合查询,并以分页形式展示...
Grails提供了方便的分页API,可以轻松地在控制器(Controller)中实现分页逻辑,并在视图(View)中展示结果。在这个例子中,你可能已经掌握了如何实现这一功能。 4. **数据库管理**:`contact_dev.sql`文件可能是...
Grails支持动态查询,允许开发者通过简单的表达式进行复杂的数据库查询。同时,为了确保系统安全性,可以使用Spring Security插件来实现用户认证和授权,限制未授权访问。 六、分页功能 实现分页功能,Grails提供了...
8.6 对数据进行分页 8.7 创建自定义标签 8.7.1 创建标签库 8.7.2 自定义标签基础内容 8.7.3 演示自定义标签 8.7.4 测试自定义标签 8.8 本章小结 第9章 ajax 9.1 ajax基础...
这可能来自数据库查询、服务调用或其他任何数据源。例如: ```groovy def exportCsv() { def users = UserService.getAllUsers() } ``` 3. **创建CSV响应** 使用Grails的`response`对象,设置合适的HTTP头...
- **`list.gsp`**:显示数据列表的页面,通常包括搜索和分页功能。你可以修改这个模板以改变列表的显示方式,添加排序功能,或者定制搜索表单。 - **`search.gsp`**:如果存在,用于构建高级搜索条件的页面。可以...
1. **动态查询器**:提供灵活的数据查询能力,支持条件筛选、排序、分页等功能,无需编写复杂的SQL语句。 2. **动态脚手架**:自动生成基本的CRUD界面,加速开发过程,后期可定制修改。 五、Grails与其他技术的关系...
可以通过调整查询方式,如分页查询,或者优化数据模型来提高性能。 3. **代码风格与规范**:确保生成的代码符合团队的编码规范,可以调整模板以匹配缩进、命名约定等。 4. **扩展功能**:在模板中加入自定义的行为...
5.2.2 数据库的分页查询 54 5.2.3 将查询改造为inner join 59 5.3 显示分页导航 60 5.4 本章小结 62 第6章 用户注册与登录 63 6.1 表单验证与资源文件 63 6.2 用户注册 69 6.3 用户登录 73 6.3.1 登录的数据库查询 ...
4. **性能优化**:可能需要调整查询方式,如分页、缓存、异步处理等。 ### 三、优化步骤与技巧 1. **自定义模板**:在`src/templates/scaffolding`目录下,可以创建自己的模板,覆盖默认模板,实现定制化界面。 2...
10. 具体操作的实现:细化每个功能的具体实现细节,如分页功能的实现,可以使用Grails的pagination插件来实现。 在开发过程中,持续测试和调试是非常重要的,确保所有功能都能正常工作。最后,编写详细的用户手册和...
在这个特定的课程设计中,学生被要求开发一个"网络工程同学录"应用程序,使用Grails框架进行构建。Grails是一个基于Groovy语言的开源Web应用框架,它简化了Java Web开发过程,提供了丰富的插件系统和MVC(模型-视图-...
DataFrame是Grails框架中一个非常有用的插件,它旨在加速Web应用的开发过程,特别是处理数据展示和交互的环节。Grails是一个基于Groovy语言的开源Web应用框架,它简化了构建动态、敏捷Web应用的过程。DataFrame插件...
该项目使用 Grails 2.4.4 和 Java 7 — MySQL 是一个可选组件,目前仅在生产环境中启用。 该应用程序具有以下可配置选项: demo.bootstrapData(默认为 false)。 如果启用,它将为开发以外的环境创建引导程序...
此外,它还提供了可视化的分页、排序和过滤选项,使得数据探索变得直观而高效。 标签"elasti"可能指的是Elasticsearch,这是一个流行的开源搜索引擎和数据分析平台。Elasticsearch采用了分布式、RESTful的工作方式...