解決pagehelper直接對list分頁不起作用
産生問題的原因:
PageHelper.startPage(pageNum, pageSize);
隻對它下面的一條sql查詢起分頁作用
但是業務裡需要的是,首先查出來的是UserVerify的對象清單,而需要分頁的是對UserVerify對象清單進行再一對一查詢而得到的第二個對象清單 userInfo對象清單進行分頁處理
解決方法如下:
List<UserInfo> userInfoList = new ArrayList<>();
PageInfo<UserVerify> page = userVerifyService.page(verifyExample, getPageNum(), getPageSize());
page.getList().forEach(verify -> {
String userId = verify.getUserId();
UserInfo userinfo = userInfoService.findByUid(userId);
if (userinfo != null) {
userInfoService.fillUserInfo(userinfo, getUserId());
}
userInfoList.add(userinfo);
});
//這四句才是重點
Page paged = new Page(getPageNum(), getPageSize());
paged.setTotal(page.getTotal());
paged.addAll(userInfoList);
PageInfo pageInfo = new PageInfo<>(paged);
return Result.success(pageInfo);
當然自己也很傻的寫了一個下面的手動分頁,但是實際每次查詢都很慢,是以才問詢到了上面的方法
/**
* @author zhouyuan
* @created 2019/11/25 15:25
*/
@Data
public class PageVo<T extends BaseEntity> {
/**
* 目前頁
*/
private Integer pageNum;
/**
* 每頁條數
*/
private Integer pageSize;
/**
* 一共多少條
*/
private Integer total;
/**
* 目前頁的資料
*/
private List<T> list;
/**
* 分了多少頁
*/
private Integer pages;
}
List<UserInfo> userInfoList = new ArrayList<>();
List<UserVerify> verifyList = userVerifyService.list(verifyExample);
verifyList.forEach(verify -> {
String userId = verify.getUserId();
UserInfo userinfo = userInfoService.findByUid(userId);
if (userinfo != null) {
userInfoService.fillUserInfo(userinfo, getUserId());
}
userInfoList.add(userinfo);
});
List<UserInfo> userInfos = userInfoList.stream().skip(getPageSize() * (getPageNum() - 1)).limit(getPageSize()).collect(Collectors.toList());
PageVo<UserInfo> PageVo = new PageVo<>();
PageVo.setList(userInfos);
PageVo.setPageNum(getPageNum());
PageVo.setPageSize(getPageSize());
PageVo.setTotal(userInfoList.size());
PageVo.setPages(userInfoList.size() % getPageSize() == 0 ? userInfoList.size() / getPageSize() : userInfoList.size() / getPageSize() + 1);
return Result.success(PageVo);
第一篇寫部落格,自知自己水準粗鄙,也确實沒有能力給他人指點迷津,但遇到這個問題,百度了很久,也沒有找到解決方法
,這裡的話,主要給自己作一個記錄,也希望能幫助有需要的人。