标题一:先说一下为什么会分页失效
从代码层面来分析一下
public TableDataInfo extremum(@RequestBody HashMap<String, Object> param){
Integer pageNum = Integer.valueOf(param.get("pageNum").toString());
Integer pageSize = Integer.valueOf(param.get("pageSize").toString());
/**在这使用了偌依的代码分页线程*/
startPage(pageNum, pageSize);
/**该线程被作用在了该list集合上,对象被消耗了*/
List<TrendVibrationReport> list = new ArrayList<>();
try {
list = trendVibrationReportService.selectMapListExtremum(param);
}catch (Exception e){
e.printStackTrace();
} finally {
if (list == null || list.size() == 0){
return getDataTable(new ArrayList<>());
}
}
/**重新拼接出了另外一个集合,上面的分页线程被消耗了,就不可以再进行分页了*/
List<HashMap<String, Object>> hashMapList = new ArrayList<>();
try {
hashMapList = trendVibrationReportService.selectMapListExtremumTow(list);
}catch (Exception e){
e.printStackTrace();
} finally {
if (hashMapList == null || hashMapList.size() == 0){
return getDataTable(new ArrayList<>());
}
}
return getDataTable(hashMapList, list);
}
上面通过代码和注解可以看到失效的原因。
2.如何解决的呢?
我采用的是手动进行的分页操作,当然办法也有很多,可以使用mybatispuls自带的分页等等。。。
public TableDataInfo extremum(@RequestBody HashMap<String, Object> param){
List<TrendVibrationReport> list = trendVibrationReportService.selectMapListExtremum(param);
if (list == null || list.size() == 0){
return new TableDataInfo();
}
List<HashMap<String, Object>> hashMapList = new ArrayList<>();
try {
hashMapList = trendVibrationReportService.selectMapListExtremumTow(list);
}catch (Exception e){
e.printStackTrace();
}
if (hashMapList == null || hashMapList.size() == 0){
return new TableDataInfo();
}
// 手动分页
long pageNum = Integer.valueOf(param.get("pageNum").toString());
long pageSize = Integer.valueOf(param.get("pageSize").toString());
// 总共条数
int num = hashMapList.size();
/**该方法是把所有的数据查出后在内存中进行的分页截取,对于特别大的数据量还是有一定的不友好的。*/
hashMapList = hashMapList.stream().skip((pageNum - 1) * pageSize).limit(pageSize).collect(Collectors.toList());
TableDataInfo rspData = new TableDataInfo();
rspData.setCode(HttpStatus.SUCCESS);
rspData.setRows(hashMapList);
rspData.setTotal(num);
return rspData;
}
hashMapList = hashMapList.stream().skip((pageNum - 1) * pageSize).limit(pageSize).collect(Collectors.toList());
使用的是stream()流,然后截取,再用转为集合,具体的java8的新特性可以私下学学真的很有用。