在hibernate论坛上面找的,非常的简单
public class Page {
private List results; //每页显示的内容
private int pageSize; // 每页显示的行数
private int page; // 第几页
public Page(Query query, int page, int pageSize) {
this.page = page;
this.pageSize = pageSize;
results = query.setFirstResult(page * pageSize)
.setMaxResults(pageSize+1)
.list();
}
public boolean isNextPage() {
return results.size() > pageSize;
}
public boolean isPreviousPage() {
return page > 0;
}
public List getList() {
return isNextPage() ?
results.subList(0, pageSize-1) :
results;
}
}
You can return this object to your JSP, and use it in Struts, WebWork or JSTL tags. Getting a page in your persistence logic is as simple as:
public Page getPosts(int page) {
return new Page(
session.createQuery("from Posts p order by p.date desc")
page,
40
);
}
The Page class works in both Hibernate and EJB 3.0
出处http://blog.hibernate.org/Bloggers/Everyone/Year/2004/Month/08/Day/14#pagination
这个程序有个小bug,在java的文档中subList(int fromIndex, int toIndex)方法是这样说明的
Returns a view of the portion of this list between the specified fromIndex, inclusive, and toIndex, exclusive. (If fromIndex and toIndex are equal, the returned list is empty.)
意思是返回LIst中从fromIndex到toIndex的部分,包括fromIndex这个位置的元素,不包括toIndex这个位置的元素。 所以在 public List getList() {
return isNextPage() ?
results.subList(0, pageSize-1) :
results;
}
这个方法中不需要pageSize-1
直接这个方法就好了
public List getList() {
return isNextPage() ?
results.subList(0, pageSize) :
results;
}