PageHelper结合PageInfo实现分页BUG:例如:pageNum 为 1 ,pageSize 为 10。
原始数据为15条,中间不做数据处理应该返回两页,总共15条数据。
如果我对该原始数据中间做了数据处理返回新的集合后有13条数据,我们想要的结果是两页,共13条数据,但返回的是一页 ,共十条数据。为什么呢?因为PageInfo是在PageHelper查询结果的基础上进行的分页操作,如果我中间做了数据处理返回了新的集合,PageInfo和PageHelper其实操作的并不是同一个集合。
所以PageHelper结合PageInfo实现分页只有在这两个类同时处理一个集合数据时才会生效
package rongheng.sales.utils;
import java.io.Serializable;
import java.util.List;
public class PageInfoUtil<T> implements Serializable {
/**
* 总个数
*/
private int total;
/**
* 总页数
*/
private int pages;
/**
* 每页展示多少条数据
*/
private int pageSize;
/**
* 第几页
*/
private int pageNum;
/**
* 分页返回的集合信息
*/
private List<T> list;
public PageInfoUtil() {
}
public PageInfoUtil(List<T> list) {
this.total = list.size();
this.list = list;
}
public void startPage(int pageNum, int pageSize) {
pageSize = pageSize > 0 ? pageSize : 10;
this.pages = (int) Math.ceil((double) this.total / pageSize);
pageNum = pageNum > 0 ? pageNum : 1;
pageNum = pageNum > pages ? 1 : pageNum;
this.pageNum = pageNum;
this.pageSize = pageSize;
int startIndex = (pageNum - 1) * pageSize;
int toIndex = startIndex + pageSize;
if (toIndex > total) {
setList(list.subList(startIndex, total));
} else {
setList(list.subList(startIndex, toIndex));
}
}
public int getTotal() {
return total;
}
public void setTotal(int total) {
this.total = total;
}
public int getPages() {
return pages;
}
public void setPages(int pages) {
this.pages = pages;
}
public int getPageSize() {
return pageSize;
}
public void setPageSize(int pageSize) {
this.pageSize = pageSize;
}
public int getPageNum() {
return pageNum;
}
public void setPageNum(int pageNum) {
this.pageNum = pageNum;
}
public List<T> getList() {
return list;
}
public void setList(List<T> list) {
this.list = list;
}
}
使用示例
public PageInfoUtil<HashMap<String, Object>> queryExportProduct(@RequestParam Integer pageNum, @RequestParam Integer pageSize, String fuzzyQuery) {
List<HashMap<String, Object>> list = productService.queryExportProduct(fuzzyQuery);
PageInfoUtil pageInfo = new PageInfoUtil(list);
pageInfo.startPage(pageNum, pageSize);
return pageInfo;
}