分页继续[数据库分页和PageBean的改进]
注:本文继续分页的上一篇 关于分页,标签,缓存
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为核心.
一个工具能够在任何地方都能容易的嵌入进去,这就很小巧了,也就够用了. :)