请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

为什么不直接用new pageInfo(productListVolList)

PageHelper.startPage(pageNum,pageSize);
//排序处理
if(StringUtils.isNotBlank(orderBy)){
    if(Const.ProductListOrderBy.PRICE_ASC_DESC.contains(orderBy)){
        String[] orderByArray = orderBy.split("_");
        //PageHelper.orderBy("price asc")这种形式,以price价格进行asc排序
        PageHelper.orderBy(orderByArray[0]+" "+orderByArray[1]);
    }
}
List<Product> productList = productMapper.selectByNameAndCategoryIds(StringUtils.isBlank(keyword)?null:keyword,categoryIdList.size()==0?null:categoryIdList);

List<ProductListVo> productListVoList = Lists.newArrayList();
for(Product product : productList){
    ProductListVo productListVo = assembleProductListVo(product);
    productListVoList.add(productListVo);
}

PageInfo pageInfo = new PageInfo(productList);
pageInfo.setList(productListVoList);

 在做分页的时候,这个pageInfo,为什么不在new pageInfo()的时候就直接把productListVoList给传进去,而是先传productList,在setList(productListVoList) 

求解!!!

正在回答 回答被采纳积分+3

1回答

Geely 2017-08-05 22:58:21

你好,同学,首先课程中有说。pageHelper分页主要是通过 aop来实现,在执行sql之前会在sql语句中添加limit offset这两个参数。这样就完成了动态的分页。


然而我们需要用vo返回给前端。如果我们用vo里的字段,是和pojo总会有不一致的地方。例如时间的类型,又例如添加的一些枚举状态等。那么为了自动分页,我们会用dao层找到原始的pojoList,(因为pageHelper是对dao层在执行mapper的时候才会动态分页,所以我们要先执行一下mapper)然后转换成vo。那么其实这两个list的集合的分页参数是一致的。所以用了一个比较巧妙的办法。来把vo进行分页~~这样就达到了目的~


希望你能理解哈~~

6 回复 有任何疑惑可以回复我~
  • 老师,有没有通俗一点的说法,感觉有点乱,我在pageinfo这一块也有点懵,我看了pageinfo的构造,他好像是为了拿到他的list的数量,但是转换成volist的数量也不会变啊
    回复 有任何疑惑可以回复我~ 2017-08-31 17:20:35
  • 这个数量并不是要它变,而是为了要这个pageinfo对象的分页信息。把数据填充进去而已。
    回复 有任何疑惑可以回复我~ 2017-08-31 23:19:34
  • 老师,是不是因为 
    PageInfo pageResult = new PageInfo(productList);
     pageResult.setList(productListVoList);
    prodcutList 是mapper 查出来的是一个Page对象,而productVoList 只是一个List对象。而new pageInfo()对于不同对象的处理方式不同。所以我们才会出现视频中的写法啊
    回复 有任何疑惑可以回复我~ 2018-05-27 19:38:24
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信