如果使用Hibernate的话,她里面的Query有这么两个方法,可以查询出第x到第y条的信息,由此我们可以只要知道,只要有当前页的页码(page)和总记录条数(number),就可以实现分页查询。Query两个方法如下:
Query query = session.createQuery("from Products");
query.setFirstResult();// (当前页面-1)X每页条数
query.setMaxResults(); // 每页的条数
当然,我这个是用Hibernate+struts2做的,首先需要构建自己的分页类FenYe.class
分页类:
public class FenYe {
private int first = 0; // 第一条记录
private int max = 5; // 每页显示的记录条数
private Integer page; // 输入页数
private int curr_page; // 当前页数
private int pages; // 总的页数
private Integer number; // 总的记录数
// 第一页
public void firstListener() {
page=1; //输入页=第一页
first=0; //第一条记录=0
curr_page = page; //当前页=输入页
}
// 最后一页
public void lastListener() {
page = pages; //输入页=总页数
curr_page=page; //当前页=输入页
first = (pages - 1) * max; //第一条记录=(当前页-1)*每页显示记录的条数
}
//中间页
public void gotoListener() {
curr_page = page; //当前页=输入页
first = (curr_page - 1) * max; //第一条记录=(当前页-1)*每页显示记录的条数
}
// 判断是否是第一页或者最后一页
public FenyeService fenYe(Integer page, Integer number) {
// 设定输入的页数
this.setPage(page);
// 设定总记录数
this.setNumber(number);
// 初始化总页数
this.setPages(number);
if (page > 0 && page <= this.pages) { // 如果输入页数>0<总的页数
this.gotoListener();
} else if (page <= 0 || number == 0) { // 如果输入页数<0或者没有数据的时候
this.firstListener();
} else if (page > this.pages) { // 如果输入页数>总页数
this.lastListener();
}
// 返回自身
return this;
}
public static void main(String[] args) {
FenYe fenye = new FenYe();
fenye.setNumber(11);
fenye.setPage(3);
fenye.fenYe();
System.out.println("第一条记录first:" + fenye.getFirst());
System.out.println("每页显示的记录数max:" + fenye.getMax());
System.out.println("输入页数page:" + fenye.getPage());
System.out.println("当前页数curr_page:" + fenye.getCurr_page());
System.out.println("总页数pages:" + fenye.getPages());
System.out.println("总记录条数number:" + fenye.getNumber());
}
...
中间的get、set方法就不贴出来了
...
/*
*
* 对pages的set方法作出如下修改
*
* 计算总页数
*
* 如果被整除:总页数=总数据条数/每页显示的条数
*
* 如果有余数:总页数=总数据条数/每页显示的条数(取整数)+1
*/
public void setPages(int number) {
this.pages = number % max == 0 ? number / max : number / max + 1;
}
}