Grails findAll带有排序、顺序、最大值和偏移量?
我想在findAll查询中集成sort、order、max和offset。以下工作很好:Grails findAll带有排序、顺序、最大值和偏移量?,grails,groovy,gorm,Grails,Groovy,Gorm,我想在findAll查询中集成sort、order、max和offset。以下工作很好: def books = Book.findAll("from Book as b where b.approved=true order by b.dateCreated desc", [max: max, offset: offset]) 但我想要的是: def books = Book.findAll("from Book as b where b.approved=true", [sort: 'd
def books = Book.findAll("from Book as b where b.approved=true order by b.dateCreated desc", [max: max, offset: offset])
但我想要的是:
def books = Book.findAll("from Book as b where b.approved=true", [sort: 'dateCreated', order: 'desc', max: max, offset: offset])
这是行不通的。我必须如何重写它?HQL不支持将sort和order作为参数,因此需要将“order by”作为HQL表达式的一部分
def books = Book.findAll("from Book as b where b.approved=true"
+ " order by b.dateCreated desc", [max: max, offset: offset])
(或者在本例中,只需使用Book.findAllByApproved(true,[…])
而不是HQL)
因此,如果排序和顺序是变量,则需要像
def books = Book.findAll("from Book as b where b.approved=true"
+ (params.sort ? " order by b.${params.sort} ${params.order}" : ''),
[max: max, offset: offset])
使用适用于我的where查询:
def books=Book.where{approved==true}.list(排序:'dateCreated',顺序:'desc',max:max,offset:offset)
或者直接使用页面上的参数:
def books=Book.where{approved==true}.list(params)
使用“findAllBy”,因为它支持排序和排序
def results = Book.findAllByTitle("The Shining",
[max: 10, sort: "title", order: "desc", offset: 100])
单击查看详细信息。我假设您正在调用获取控制器或服务类中的书籍列表 如果您是从控制器操作调用此函数,那么您已经可以使用一个神奇的变量“params”。 例如,如果您请求如下页面
book/list?max=10&offset=2
params.sort = "dateCreated"
params.order = "desc"
def books = Book.findAllByApproved(true, params)
// use "books" variable as you wish
那么“params”已经自动映射了这些值
您可以按如下方式向参数映射添加更多项
book/list?max=10&offset=2
params.sort = "dateCreated"
params.order = "desc"
def books = Book.findAllByApproved(true, params)
// use "books" variable as you wish
一旦您根据需要构建了参数,那么您就可以使用Grails动态查询,如下所示
book/list?max=10&offset=2
params.sort = "dateCreated"
params.order = "desc"
def books = Book.findAllByApproved(true, params)
// use "books" variable as you wish
这并不能回答问题。如何将sort和order作为变量包含在此查询中?@userWebMobile这是一个“三元条件”-
(condition?valueIfTrue:valueIfFalse)
-以处理参数.sort
可能未设置的可能性,在这种情况下,您根本不需要order by
子句。如果您知道您总是会有一些排序和顺序值,那么只需无条件地使用位“order by b.${params.sort}${params.order}”。