起因:PageHelper--bug:
com.github.pagehelper.Page<Map<String, Object>> page = PageHelper.startPage(vo.getPageNo(), vo.getPageSize());
网上的PageHelper工具类有个bug,只会对上面代码紧跟着的sql语句查询结果进行分页,但是工作中难免有这样的需求:
将A表查询出来的List与B表查询出来的List合并后展示,这就很尴尬了!!!
怎么解决?抛弃PageHelper呗,我称之为:内存分页--只适用于查询j结果量不大的情况,一般可以满足
1>新建Page类
/**
* 页面包装类
*/
public class Page {
//当前页面
private int pageNo = 1;
//每页显示数量
private int pageSize = 10;
//总数
private long totalCount = 0;
//总页数
private int totalPage = 1;
public long getTotalPage() {
return totalCount % pageSize == 0 ? totalCount / pageSize : totalCount / pageSize + 1;
}
public int limitStart() {
return pageSize * (getPageNo() - 1);
}
public int limitEnd() {
return pageSize;
}
public int getPageNo() {
if(pageNo > getTotalPage()) {
return totalPage;
}
return pageNo;
}
public Page setPageNo(int pageNo) {
this.pageNo = pageNo;
return this;
}
public int getPageSize() {
return pageSize;
}
public Page setPageSize(int pageSize) {
this.pageSize = pageSize;
return this;
}
public long getTotalCount() {
return totalCount;
}
public Page setTotalCount(long totalCount) {
this.totalCount = totalCount;
return this;
}
public void setTotalPage(int totalPage) {
this.totalPage = totalPage;
}
}
2>代码里这么写
//新建分页工具类
Page page = new Page().setPageNo(pageNo).setPageSize(pageSize);
//A表查询list
List<Map<String, Object>> listA = orderClassPackageMapper.listbackDelete(vo);
//B表查询list
List<Map<String, Object>> listB = orderMapper.listbackDelete(vo);
//合并list
listA.addAll(listB);
//对list进行排序,两张表必须有一个统一的排序字段,如这里的deleteTime
Collections.sort(listA, new Comparator<Map<String, Object>>() {
public int compare(Map<String, Object> o1, Map<String, Object> o2) {
Date deleteTime1 = new Date();
Date deleteTime2 = new Date();
try {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
deleteTime1 = sdf.parse(o1.get("deleteTime").toString());
deleteTime2 = sdf.parse(o2.get("deleteTime").toString());
} catch (ParseException e) {
e.printStackTrace();
}
return DateUtils.compareDate(deleteTime1, deleteTime2);//比较时间工具类
}
});
page.setTotalCount(listA.size());
//内存分页
List<Map<String, Object>> subList = listA.subList(vo.getPageSize() * (vo.getPageNo()-1), ((vo.getPageSize() * vo.getPageNo()) > listA.size() ? listA.size() : (vo.getPageSize() * vo.getPageNo())));
return subList;
贴一下时间比较方法
public static int compareDate(Date start, Date end) {
if ((start != null) && (end != null)) {
return (end.getTime() < start.getTime()?-1: ((end.getTime() == start.getTime()) ? 0 : 1));
}
return 0;
}