如果我理解正确,我们可以通过将 max 和 offset 值传递给list方法来检索所需数量的特定分页结果。但是,在许多情况下,我们还希望显示 SQL 查询返回的结果总数。根据我的理解,将偏移量和最大值传递给list方法后,SQL 查询仍会在内部返回所有结果,但结果会根据最大值和偏移量值进行修剪。有没有办法在修剪发生之前获得返回的结果总数?
你没有正确理解:)
检索所有记录来计算它们并过滤掉不应该在客户端返回的记录会很疯狂。使用几行不会那么糟糕,但请考虑使用具有数百万或数十亿行的表的方法的性能影响。
相反,您必须执行两个查询。一个检索您想要的行,在数据库中进行过滤,另一个具有相同的 where 子句限制但没有最大值和偏移值,并使用select count ....
正如@sudhir 在他的回答中指出的那样,Grails 将返回一个自定义List实现 ( PagedResultList),其中包括当前页面的结果,并有一个getTotalCount方法来返回计数查询的结果。
该list方法的实现在这里,您可以在PagedResultList源中看到计数查询仅在您调用getTotalCount.