问题描述:
使用pageHelper分页后,请求接口得到的数据中 " total" 等于 “pagesize”
例如下图,请求的pagesize为2但是库中总数不为2
此时的代码:
controller:
mapper:
dao:
问题原因:
在controller中,在得到分页结果violateApplies之后,对结果进行了处理,然后在放入PageInfo对象中,此时PageHelper误以为这就是全部数据,因而导致上述错误
而如果先将数据放进PageInfo对象在处理数据,又无法得到我们需要的结果(getList中为ViolateApply,而结果需要ViolateInfo)
解决方法:
新增一个类MyPageInfo
import com.example.dcmanagesystem.service.CustomerService;
import com.example.dcmanagesystem.service.ViolateApplyService;
import com.github.pagehelper.PageInfo;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.List;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class MyPageInfo<T> {
/**
* 当前页
*/
private int currentPageNum;
/**
* 总页数
*/
private int totalPageNum;
/**
* 每页记录数量
*/
private int pageSize;
/**
* 总记录数
*/
private long totalCount;
/**
* 当前页记录集合
*/
List<T> list;
public MyPageInfo(PageInfo<ViolateApply> violateApplyList, CustomerService customerService) {
List<ViolateInfo> violateInfos = new ArrayList<>();
for (ViolateApply apply: violateApplyList.getList()) {
ViolateInfo violateInfo = new ViolateInfo();
Customer customer = customerService.queryCustomerById(apply.getCustomer_id());
violateInfo.setViolate_id(apply.getId_());
violateInfo.setCustomer_id(apply.getCustomer_id());
violateInfo.setCustomer_name(customer.getCustomer_name());
violateInfo.setViolate_status(apply.getStatus());
violateInfo.setViolate_reason(apply.getViolate_reason());
violateInfo.setViolate_level(apply.getViolate_level());
violateInfo.setApply_person(apply.getApply_person());
violateInfo.setApply_date(apply.getApply_date());
violateInfo.setCertificate_date(apply.getCertificate_date());
violateInfo.setOutside_level(customer.getOutside_level());
violateInfo.setStatus(customer.getStatus());
violateInfos.add(violateInfo);
}
this.currentPageNum = violateApplyList.getPageNum();
this.totalPageNum = violateApplyList.getPages();
this.pageSize = violateApplyList.getPageSize();
this.totalCount = violateApplyList.getTotal();
this.list = (List<T>) violateInfos;
}
}
controller直接改为
PageHelper.startPage(pageNum, pageSize);
MyPageInfo<ViolateInfo> violateInfos = violateApplyService.queryViolateInfo();
return new Response(200, "success", violateInfos);
结果: