91名师指路-头部
91名师指路

PageHelper分页后对list进行操作,然后放到一个新的list里面导致分页失效

由于某些原因,现在不支持支付宝支付,如需要购买源码请加博主微信进行购买,微信号:13248254750

一:场景。

我的业务需求是需要用PageHelper分页,然后对分页的list进行操作,然后放到一个新的list里面,这样会导致PageHelper分页失效。通俗来讲就是,查询出来一共是20条数据,但是返回给前端的只有8条数据。


二:之前的代码(错误)

public ReturnMsgUtils selectCheckData(Map<String, Object> params) {
int pageNum=(int) params.get("pageNum");
int pageSize=(int) params.get("pageSize");
PageHelper.startPage(pageNum, pageSize);
List<CompeteDataImportVO> datalist=competeDataImportMapper.selectCheckData(params);

List<CompeteDataImportVO> checkList=new ArrayList<CompeteDataImportVO>();
CompeteDataImportVO cv=null;
if(null!=datalist && datalist.size()>0){
for(int i=0; i<datalist.size(); i++){
cv=new CompeteDataImportVO();
String id=datalist.get(i).getId(); // id
String dateMonth=datalist.get(i).getDateMonth();
String vendorNo=datalist.get(i).getVendorNo();
String docNo=datalist.get(i).getDocNo();
String importName=datalist.get(i).getImportName();
String createName=datalist.get(i).getCreateName();
LocalDateTime createTime=datalist.get(i).getCreateTime();
LocalDateTime updateTime=datalist.get(i).getUpdateTime();
int confirmStatus=datalist.get(i).getConfirmStatus();
cv.setId(id);
cv.setDateMonth(dateMonth);
cv.setVendorNo(vendorNo);
cv.setDocNo(docNo);
cv.setImportName(importName);
cv.setCreateName(createName);
cv.setCreateTime(createTime);
cv.setUpdateTime(updateTime);
cv.setConfirmStatus(confirmStatus);
checkList.add(cv);
}
}
PageInfo pageInfo=new PageInfo(checkList);
ReturnMsgUtils result=new ReturnMsgUtils(BusinessUtils.CODE_200, BusinessUtils.MSG_SELECT_200, pageInfo);
return result;
}


三:正确代码

public ReturnMsgUtils selectCheckData(Map<String, Object> params) {
int pageNum=(int) params.get("pageNum");
int pageSize=(int) params.get("pageSize");
PageHelper.startPage(pageNum, pageSize);
List<CompeteDataImportVO> datalist=competeDataImportMapper.selectCheckData(params);

List<CompeteDataImportVO> checkList=new ArrayList<CompeteDataImportVO>();
CompeteDataImportVO cv=null;
if(null!=datalist && datalist.size()>0){
for(int i=0; i<datalist.size(); i++){
cv=new CompeteDataImportVO();
String id=datalist.get(i).getId(); // id
String dateMonth=datalist.get(i).getDateMonth();
String vendorNo=datalist.get(i).getVendorNo();
String docNo=datalist.get(i).getDocNo();
String importName=datalist.get(i).getImportName();
String createName=datalist.get(i).getCreateName();
LocalDateTime createTime=datalist.get(i).getCreateTime();
LocalDateTime updateTime=datalist.get(i).getUpdateTime();
int confirmStatus=datalist.get(i).getConfirmStatus();
cv.setId(id);
cv.setDateMonth(dateMonth);
cv.setVendorNo(vendorNo);
cv.setDocNo(docNo);
cv.setImportName(importName);
cv.setCreateName(createName);
cv.setCreateTime(createTime);
cv.setUpdateTime(updateTime);
cv.setConfirmStatus(confirmStatus);
checkList.add(cv);
}
}

PageInfo source = new PageInfo(datalist);
PageInfo target = new PageInfo();
BeanUtils.copyProperties(source, target);
target.setList(checkList);

ReturnMsgUtils result=new ReturnMsgUtils(BusinessUtils.CODE_200, BusinessUtils.MSG_SELECT_200, target);
return result;
}


四:分析。

1 )PageHelper.startPage(pageNum, pageSize); 会对他的下一行查询语句进行分页。即提前对datalist 进行了分页而不是对最终的checkList进行分页。

2)解决思路:先创建一个PageInfo对象,将datalist放到里面,我们称之为source对象,然后我们在创建一个PageInfo对象对象,我们称为target对象,我们将source对象拷贝给target对象,这样target对象就有了之前source对象的所有属性,然后我们在将最终的checkList放到target对象里面,就可以了。


参考资料:https://blog.csdn.net/qq_35080796/article/details/105508744

2021-02-02 17:36:58     阅读(2706)

名师出品,必属精品    https://www.91mszl.com

联系博主    
用户登录遮罩层
x

账号登录

91名师指路-底部