分页继续[数据库分页和PageBean的改进]

分页继续[数据库分页和PageBean的改进]
注:本文继续分页的上一篇 关于分页,标签,缓存
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为核心.

一个工具能够在任何地方都能容易的嵌入进去,这就很小巧了,也就够用了.  :)

你可能感兴趣的:(分页继续[数据库分页和PageBean的改进])