可以分页,但是数据量错误,total始终等于每页数据量,即pageSize
错误代码如下
//Controller.java 的方法
@GetMapping("/list")
@ApiOperation(value = "商品类型列表查询", notes = "商品类型列表查询")
public TableDataInfo list(Category category){
startPage();
List<CategoryVO> list = categoryService.selectCategoryListC(category);
return getDataTable(list);
}
//Service.java
@Override
public List<CategoryVO> selectCategoryListC(Category category){
List<Category> list=categoryMapper.selectCategoryList(category);
List<CategoryVO> returnList=new ArrayList<>();
for(Category ca :list) {
//省略。。。。。。。。。。。。。。。。。
CategoryVO vo=new CategoryVO();
BeanUtils.copyProperties(ca,vo);
returnList.add(vo);
}
return returnList;
}
//分页工具类代码
protected TableDataInfo getDataTable(List<?> list){
TableDataInfo rspData = new TableDataInfo();
rspData.setCode(HttpStatus.SUCCESS);
rspData.setMsg("查询成功");
rspData.setRows(list);
rspData.setTotal(new PageInfo(list).getTotal());
return rspData;
}
注意这里的 rspData.setTotal(new PageInfo(list).getTotal()); 的值 如果传入的list 是自己封装后的returnList【不是当时分页的】 导致了分页时效
原因就是因为源码里面代码逻辑如下,此时的 returnList 不再是分页时候Page的实例,所以代码走了else ,获取了当前returnList的大小返回去了
PageInfo 的父类 PageSerializable.class 中的一段构造器代码如下,这里调用了父类的构造器和父类的方法getTotal ()
//PageSerializable.class 源码
public PageSerializable(List<T> list) {
this.list = list;
if (list instanceof Page) {
this.total = ((Page)list).getTotal();
} else {
this.total = (long)list.size();
}
}
既然找到了问题所在,那么解决如下
// Controller.java
@GetMapping("/list")
@ApiOperation(value = "商品类型列表查询", notes = "商品类型列表查询")
public TableDataInfo list(Category category){
startPage();
return categoryService.selectCategoryListC(category);
}
// Service.java
public TableDataInfo selectCategoryListC(Category category){
List<Category> list=categoryMapper.selectCategoryList(category);
List<CategoryVO> returnList=new ArrayList<>();
for(Category ca :list) {
//省略。。。。。。。。。。。。。。
CategoryVO vo=new CategoryVO();
BeanUtils.copyProperties(ca,vo);
returnList.add(vo);
}
return getDataTable(returnList,new PageInfo(list).getTotal());
}
private TableDataInfo getDataTable(List<?> list,long total){
TableDataInfo rspData = new TableDataInfo();
rspData.setCode(HttpStatus.SUCCESS);
rspData.setMsg("查询成功");
rspData.setRows(list);
rspData.setTotal(total);
return rspData;
}