解决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);
第一篇写博客,自知自己水平粗鄙,也确实没有能力给他人指点迷津,但遇到这个问题,百度了很久,也没有找到解决方法
,这里的话,主要给自己作一个记录,也希望能帮助有需要的人。