java中的分页?

Raj*_*aju 3 java pagination

我希望数字以这种格式显示..

1 2 3 4 5 ^
如果我按5,那么它应显示从5到10

5 6 7 8 9 10

直到最大记录可用.我只是想知道如何显示数字.

Adr*_*ter 9

通常,您希望您的数据库执行繁重的分页和排序.以MySQL为例,您可以通过添加获得按日期排序的结果页面

ORDER BY date ASC LIMIT 5,5
Run Code Online (Sandbox Code Playgroud)

到SQL查询的末尾.如果您使用hibernate,您可以使用条件API以独立于供应商的方式执行此操作:

List<MyDomainClass> results = (List<MyDomainClass>) getSession()     
.createCriteria(MyDomainClass.class)
.setFirstResult(5)
.setMaxResults(5)
.addOrder(Order.asc("date"))
.list();
Run Code Online (Sandbox Code Playgroud)

要显示分页导航,您还需要计算结果总数,以了解有多少页面:

int count = (int) getSession()     
.createCriteria(MyDomainClass.class)
.setProjection(Projections.rowCount())
.list().get(0);
Run Code Online (Sandbox Code Playgroud)

您可以为两个搜索添加限制,例如,当您要对可添加的姓氏进行过滤时:

.add(Restrictions.eq("lastname", "Smith")
Run Code Online (Sandbox Code Playgroud)

(这需要添加到计数查询和列表查询中).

当您知道结果总数,页面大小和当前页码时,您可以计算结果范围,如下所示:

// TODO: execute the count query here to determine totalResults
int totalPages = Math.ceil(totalResults / pageSize);
// show first page by default
int firstResult = 0;
if (currentPage >= 0 && currentPage < totalPages) {
    firstResult = currentPage * pageSize;    
}
// the number of items might be less than the page size (i.e. on the last page)
int count = Math.min(pageSize, totalResults - firstResult);        
// TODO: execute the list query here to get a page of data
Run Code Online (Sandbox Code Playgroud)

您如何显示导航由您决定.一些框架具有标准组件.否则,您将不得不考虑处理大量页面的方法.一种常见的方法是显示一系列10个页码和向前/向后跳转以开始/跳转到结束链接.

希望这可以帮助.