每日一得

不求多得,只求一得 about java,hibernate,spring,design,database,Ror,ruby,快速开发
最近关心的内容:SSH,seam,flex,敏捷,TDD
本站的官方站点是:颠覆软件

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  220 随笔 :: 9 文章 :: 421 评论 :: 0 Trackbacks
注:本文继续分页的上一篇 关于分页,标签,缓存
hibernate分页有现成的支持:

query.setFirstResult(start);
query.setMaxResults(rowNum); 


MySql如下:
select * from table where  limit start,rowNum;


Oracle如下
select * from table where  and rowid not in(select rowid from t_table where  .... and  rownum<= (pageIndex-1* size)
and rownum <= size;

PageBean以前是设置currentPage,然后在页面里自己判断上一页下一页是什么,后来发现纯粹多余,完全可以把目标页写进去,而且参数也统一了,以前页面传到Action有好几个参数:

if(method.equals("lastPage")){

}
else if(method.equals("nextPage")){

}
else if(method.equals("targetPage")){
    
//.
}


现在统一一个参数就是pageIndex,爽多了  :)
PageBean代码如下:
int currentPage = 1;//当前页:Action控制
    int totalPages = 0;//总页数 :自己运算
    public static int pageRecorders = 10//每页记录数,默认为10,可以在初始化的时候修改//总数据数
    int pageStartRow = 0//每页的起始数  [这个字段可以去掉]
    int pageEndRow = 0//每页显示数据的终止数  [这个字段也可以去掉]
    boolean hasNextPage = false//是否有下一页:自己运算
    boolean hasPreviousPage = false//是否有前一页 :自己运算
    List objList = new ArrayList();//存放欲展示的对象列表
    int totalRows;//总记录数,由底层service提供

    
//增加上一页索引 [directly to target page]
    private int lastPageIndex = 1;
    
//增加下一页索引 [directly to target page]
    private int nextPageIndex = 1;

    
public int getLastPageIndex() {
        
return currentPage - 1;
    }

    
public int getNextPageIndex() {
        
return currentPage + 1;
    }


    
//是否有上一页
    public boolean isHasPreviousPage() {
        
return (currentPage > 1 ? true : false);
    }

    
//共有多少页,service只提供有多少条记录,多少页数由PageBean自己运算
    public int getTotalPages() {
        
if (totalRows <= pageRecorders) return 1;
        
return (totalRows % pageRecorders == 0 ? totalRows / pageRecorders : totalRows / pageRecorders + 1);
    }

    
public int getCurrentPage() {
        
return currentPage;
    }

    
public int getPageEndRow() {
        
return pageEndRow;
    }

    
//是否有下一页
    public boolean isHasNextPage() {
        
return (currentPage < this.getTotalPages() ? true : false);
    }

    
public int getTotalRows() {
        
return totalRows;
    }

    
public int getPageStartRow() {
        
return pageStartRow;
    }

    
public int getPageRecorders() {
        
return pageRecorders;
    }

    
public void setObjList(List objList) {
        
this.objList = objList;
    }

    
public void setHasPreviousPage(boolean hasPreviousPage) {
        
this.hasPreviousPage = hasPreviousPage;
    }

    
public void setTotalPages(int totalPages) {
        
this.totalPages = totalPages;
    }

    
public void setCurrentPage(int currentPage) {
        
this.currentPage = currentPage;
    }

    
public void setPageEndRow(int pageEndRow) {
        
this.pageEndRow = pageEndRow;
    }

    
public void setHasNextPage(boolean hasNextPage) {
        
this.hasNextPage = hasNextPage;
    }

    
public void setTotalRows(int totalRows) {
        
this.totalRows = totalRows;
    }

    
public void setPageStartRow(int pageStartRow) {
        
this.pageStartRow = pageStartRow;
    }

    
public void setPageRecorders(int pageRecorders) {
        
this.pageRecorders = pageRecorders;
    }

    
public List getObjList() {
        
return objList;
    }
}

在action中负责把pageIndex传给PageBean,以及通过service得到的记录总数传给pageBean就OK了


补充:另,在IDEA中文站上看到一篇文章 
分页,心中的痛?       提到用一个统一的接口来规范:
代码如下:
public interface Page {
boolean isFirstPage();
boolean isLastPage();
boolean hasNextPage();
boolean hasPreviousPage();
int getLastPageNumber();
Object getThisPageElements();
int getTotalNumberOfElements();
int getThisPageFirstElementNumber();
int getThisPageLastElementNumber();
int getNextPageNumber();
int getPreviousPageNumber();
int getPageSize();
int getThisPageNumber ();
}

个人感觉思想挺好,不过我还是喜欢用一个PageBean类就足够了,没必要搞复杂了,在PageBean中其实是currentPage为核心.

一个工具能够在任何地方都能容易的嵌入进去,这就很小巧了,也就够用了.  :)
posted on 2006-05-08 22:46 Alex 阅读(1183) 评论(0)  编辑  收藏 所属分类: java

只有注册用户登录后才能发表评论。


网站导航: