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

来源:8-9 商品管理模块所有功能自测

慕沐0328834

2017-08-05

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) 

求解!!!

写回答

1回答

Geely

2017-08-05

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


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


希望你能理解哈~~

6
5
Geely
回复
sam爱java
是这样的,另外 从哪里跌倒还是在爬起来 同学回答的非常正确,几个点总结的。很好
2018-06-03
共5条回复

从0开始 独立完成企业级Java电商网站服务端开发

前后端分离,数据库接口设计,架构设计,功能开发,上线运维

9476 学习 · 8804 问题

查看课程