起因: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;
}