天天看点

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

第一篇写博客,自知自己水平粗鄙,也确实没有能力给他人指点迷津,但遇到这个问题,百度了很久,也没有找到解决方法

,这里的话,主要给自己作一个记录,也希望能帮助有需要的人。