在进行web应用开发的时候经常要进行分页处理,经常看到一些人在问分页处理的问题,现在我把自己的处理方法写在这儿,希望能对需要进行分页处理的朋友有所帮助。
一、在struts中分页有两种结构:
1. 在action中通过dao查询出所有的记录,然后加到session或request对象中,传到客户端,由jsp进行分页。
这种方法对于在数据量少的时候很方便,也不影响速度。
2.在action中每次通过dao只查询出一页的记录,再传给jsp页面。
这种结构对于数据量大的程序很好,但对于数据量小的情况,会增加对服务器的请求,加大服务器的负载。
二、hibernate查询
由于在hibernate中直接提供了对数据库定点定量的查询方法,所以我采用的是第2种方法。
如:
从第1万条开始取出100条记录
query q = session.createquery("from cat as c");
q.setfirstresult(10000);
q.setmaxresults(100);
list l = q.list();
三、具体实现
1.pager类
package com.jpcf.db.helper;
import java.math.*;
public class pager {
private int totalrows; //总行数
private int pagesize = 10; //每页显示的行数
private int currentpage; //当前页号
private int totalpages; //总页数
private int startrow; //当前页在数据库中的起始行
public pager() {
}
public pager(int _totalrows) {
totalrows = _totalrows;
totalpages=totalrows/pagesize;
int mod=totalrows%pagesize;
if(mod>0){
totalpages++;
}
currentpage = 1;
startrow = 0;
}
public int getstartrow() {
return startrow;
}
public int gettotalpages() {
return totalpages;
}
public int getcurrentpage() {
return currentpage;
}
public int getpagesize() {
return pagesize;
}
public void settotalrows(int totalrows) {
this.totalrows = totalrows;
}
public void setstartrow(int startrow) {
this.startrow = startrow;
}
public void settotalpages(int totalpages) {
this.totalpages = totalpages;
}
public void setcurrentpage(int currentpage) {
this.currentpage = currentpage;
}
public void setpagesize(int pagesize) {
this.pagesize = pagesize;
}
public int gettotalrows() {
return totalrows;
}
public void first() {
currentpage = 1;
startrow = 0;
}
public void previous() {
if (currentpage == 1) {
return;
}
currentpage--;
startrow = (currentpage - 1) * pagesize;
}
public void next() {
if (currentpage < totalpages) {
currentpage++;
}
startrow = (currentpage - 1) * pagesize;
}
public void last() {
currentpage = totalpages;
startrow = (currentpage - 1) * pagesize;
}
public void refresh(int _currentpage) {
currentpage = _currentpage;
if (currentpage > totalpages) {
last();
}
}
}
pager类用于计算首页、前一页、下一页、尾页的在数据库中的起始行,当前的页码。
2.pagerhelp类
package com.jpcf.db.helper;
import javax.servlet.http.*;
public class pagerhelper {
public static pager getpager(httpservletrequest httpservletrequest,
int totalrows) {
//定义pager对象,用于传到页面
pager pager = new pager(totalrows);
//从request对象中获取当前页号