问题:使用package com.github.pagehelper.page;框架的分页查询接口后,出现查询结果少于分页size,一直都只有4个数据。后来发现其原理是对第一个mapper的sql语句起到分页操作,所以,如果是在mapper中是一对多的查询,再组合的方法,则查询的结果会少于组合后的数据。
例如:
这就是所谓的10条数据,但我是一对多,所以会把id相同的组合在一起,所以应该是只有4条数据出来。
于是便造成了数据错误的现象,所以目前只能手动分组处理。
TableDataInfo rspData = new TableDataInfo();
TmTaskDetail tmTaskDetail = new TmTaskDetail();
tmTaskDetail.setProblemId(String.valueOf(documentId));
tmTaskDetail.setRuleType("11");
list =evidenceDocumentService.queryTask(tmTaskDetail);
Integer size = list.size();
List<TmTaskDetail> result = list.stream().skip((long)pageSize * (pageNum - 1))
.limit(pageSize)
.collect(Collectors.toList());
rspData.setCode(HttpStatus.SUCCESS);
rspData.setRows(result);
rspData.setMsg("查询成功");
rspData.setTotal(size);
return rspData;
查询出全部,在截取区间的数据展示。
自动分页
/**
* 查询实证模板
* @param templateNameDescription
* @return
*/
@GetMapping("/select")
public TableDataInfo select(@RequestParam(value = "templateNameDescription", required = false ) String templateNameDescription,
@RequestParam(value = "pageNum", required = false, defaultValue = "1")Integer pageNum,
@RequestParam(value = "pageSize", required = false, defaultValue = "10")Integer pageSize){
try {
TableDataInfo rspData = new TableDataInfo();
PageHelper.startPage(pageNum,pageSize);
ICEvidenceDocumentTemplateQueryDTO icEvidenceDocumentTemplateQueryDTO = new ICEvidenceDocumentTemplateQueryDTO();
icEvidenceDocumentTemplateQueryDTO.setTemplateNameDescription(templateNameDescription);
List<ICEvidenceDocumentTemplate> icEvidenceDocumentTemplates = icEvidenceDocumentTemplateService.query(icEvidenceDocumentTemplateQueryDTO);
rspData.setTotal((new PageInfo(icEvidenceDocumentTemplates)).getTotal());
rspData.setRows(icEvidenceDocumentTemplates);
rspData.setMsg("分页成功!");
rspData.setCode(HttpStatus.SUCCESS);
return rspData;
}catch (Exception e){
e.printStackTrace();
TableDataInfo rspData = new TableDataInfo();
rspData.setCode(HttpStatus.ERROR);
rspData.setMsg("分页失败!");
rspData.setTotal(0);
return rspData;
}
}