天天看點

解決pagehelper直接對list分頁不起作用

解決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);
           

第一篇寫部落格,自知自己水準粗鄙,也确實沒有能力給他人指點迷津,但遇到這個問題,百度了很久,也沒有找到解決方法

,這裡的話,主要給自己作一個記錄,也希望能幫助有需要的人。