使用Java(命名查询)实现分页

时间:2013-11-15 08:18:33

标签: java arraylist pagination named-query

以下是该方案。我有一个页面,其中包含所有记录列表(没有分页)。

现在在后端,检索记录,每个部分有2个单独的命名查询(实际记录/ part1 / part2的计数各一个);

@NamedQuery(name = "CustomDOTO.findPart1", query = "SELECT part1";
@NamedQuery(name = "CustomDOTO.findPart1Count", query = "SELECT count(part1)";
@NamedQuery(name = "CustomDOTO.findPart2", query = "SELECT part2";
@NamedQuery(name = "CustomDOTO.findPart2Count", query = "SELECT count(part2)";

现在我需要实现相同的分页。 所以我使用自定义类PagedResponse 实际上只包含两件事;

private Long totalRecords;
private List<T> records;

我还使用自定义方法runPaginatedQuery来返回分页响应;

protected <T> PagedResponse<T> runPaginatedQuery(Query query, Query cntQuery, int startingResult, int maxResults) {

}

我的问题是因为我有两个单独的命名查询,如果我为每个命名查询调用runPaginatedQuery方法2次,它对我没有帮助,因为每次调用时最大结果会增加。 我如何在Java端处理相同的问题?请告诉我。 我已经准备好处理UI了。

1 个答案:

答案 0 :(得分:0)

我曾经遇到过类似的问题。不要使用两个查询,使用一个并对其进行参数化以使其使用LIMIT,并使用一个表示当前页面编号的变量,以及一些常量来定义一页上将获得多少结果。< / p>

然后你会有像

这样的东西
 LIMIT :offset, :resultsLimit

您将offset设置为(page - 1) * DEFAULT_LIMIT_PER_PAGEresultsLimitDEFAULT_LIMIT_PER_PAGE

希望有所帮助!