注:本文繼續分頁的上一篇 關于分頁,標簽,緩存
hibernate分頁有現成的支持:
MySql如下:
Oracle如下
PageBean以前是設置currentPage,然后在頁面里自己判斷上一頁下一頁是什么,后來發現純粹多余,完全可以把目標頁寫進去,而且參數也統一了,以前頁面傳到Action有好幾個參數:
現在統一一個參數就是pageIndex,爽多了? :)
PageBean代碼如下:
在action中負責把pageIndex傳給PageBean,以及通過service得到的記錄總數傳給pageBean就OK了
補充:另,在IDEA中文站上看到一篇文章? 分頁,心中的痛? ????? 提到用一個統一的接口來規范:
代碼如下:
個人感覺思想挺好,不過我還是喜歡用一個PageBean類就足夠了,沒必要搞復雜了,在PageBean中其實是currentPage為核心.
一個工具能夠在任何地方都能容易的嵌入進去,這就很小巧了,也就夠用了.? :)
hibernate分頁有現成的支持:
query.setFirstResult(start);
query.setMaxResults(rowNum);?
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;

and?rownum?<=?size;
PageBean以前是設置currentPage,然后在頁面里自己判斷上一頁下一頁是什么,后來發現純粹多余,完全可以把目標頁寫進去,而且參數也統一了,以前頁面傳到Action有好幾個參數:
if(method.equals("lastPage")){
}else?if(method.equals("nextPage")){
}else?if(method.equals("targetPage")){
????//
.
}
}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;
????}
}
????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?();
}
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為核心.
一個工具能夠在任何地方都能容易的嵌入進去,這就很小巧了,也就夠用了.? :)