当前位置:   article > 正文

使用PageHelper插件获取数据总条数不对的问题的解决方案_pagehelper总数统计异常

pagehelper总数统计异常

PageHelper 这个插件用了很多次了,今天使用的时候才发现中间有一个大坑,就是使用这个插件中间只能有一次查询的操作语句,不能再添加其它语句(两行代码之间不能再有其他代码)!

例如,我们一般都是这样进行查询:

  1. //创建一个PageResult对象出来
  2. PageResult<AdvertInfo> pageResult = new PageResult<>();
  3. //开启分页,pageNum代表当前页数,pageSize代表每页总数
  4. PageHelper.startPage(pageNum, pageSize);
  5. //查询数据库的语句,pageHelper在这里做一次拦截器操作
  6. List<AdvertInfo> advertList = advertMapper.getAdvertList(advertInfoParam);
  7. //使用PageInfo包装结果
  8. PageInfo<AdvertInfo> pageInfo = new PageInfo<>(advertList);

上述操作是这样的,但是如果我们需要将查询的 List<AdvertInfo>转换成前端展示的 ViewObject 对象,那么我们想当然会在中间做一次操作:

  1. PageHelper.startPage(pageNum, pageSize);
  2. List<AdvertInfo> advertList = advertMapper.getAdvertList(advertInfoParam);
  3. //将AdvertInfo某些字段要隐藏,不在前台展示,所以需要转换成前端需要的bean对象
  4. List<AdvertInfoVO> AdvertInfoList = new ArrayList<>();
  5. for (AdvertInfo info : pageInfo.getList()) {
  6. res.add(convertAdvertInfoToVO(info));
  7. }
  8. //然后再包装一下前端对象
  9. PageInfo<AdvertInfoVO> pageInfo = new PageInfo<>(AdvertInfoList);

这样获取的 pageInfo.getTotal()一直是当前的 pageSize总数,而不是查询的总条数。所以,我们最好不要在 pageHelper 两个语句中间插入其它语句,而是在后面做一些操作:

  1. //分页查询
  2. PageHelper.startPage(pageNum, pageSize);
  3. List<AdvertInfo> advertList = advertMapper.getAdvertList(advertInfoParam);
  4. PageInfo<AdvertInfo> pageInfo = new PageInfo<>(advertList);
  5. //转换成前端VO
  6. List<AdvertInfoVO> advertInfoList = new ArrayList<>();
  7. for (AdvertInfoinfo : pageInfo.getList()) {
  8. advertInfoList.add(convertAdvertInfoToVO(info));
  9. }
  10. //那么这样就可以正确返回了!
  11. return new LayuiTableResult(0, "查询成功", pageInfo.getTotal(), advertInfoList);

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/993916
推荐阅读
相关标签
  

闽ICP备14008679号