Struts+Hibernate开发实践 分页的实现[1]

[入库:2005年8月19日] [更新:2007年3月25日]

本文简介:选择自 chendreamer 的 blog

在进行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对象中获取当前页号

本文关键:Struts+Hibernate开发实践 分页的实现
  相关方案
Google
 

本站最佳浏览方式为 分辨率 1024x768 IE 6.0(或更高版本的 IE浏览器)

go top