Hibiernate+struts2分页(一)

如果使用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;
    }
}

猜你喜欢

转载自blog.51cto.com/1197822/2155236