在进行查询数据的时候,由于数据的数量太多,我们通常需要进行分页操作,但是却发现返回结果中total返回的是每一页的数据量而不是全部的数据量,很是困惑,因为我没有进行任何的操作,只是从数据库将所需要的数据查出来,封装成vo对象进行返回。这个问题的出现就是由于将返回对象封装成vo对象返回导致的,如果直接将查出来数据返回是不会出现这个问题
//pagehelper所需的依赖
<dependency>
<artifactId>pagehelper</artifactId>
<groupId>com.github.pagehelper</groupId>
<version>5.3.1</version>
</dependency>
代码:
PageHelper.startPage(page,size);
ArrayList<RecordVersion> list=versionConfigService.selectVersion(type,upgrade,entNum);
ArrayList<RecordVersionVo> voList=new ArrayList<>();
if(list.size()>0 && list !=null){
for (RecordVersion recordVersion : list) {
RecordVersionVo vo=new RecordVersionVo();
//封装成vo对象返回给前端
BeanUtils.copyProperties(recordVersion,vo);
voList.add(vo);
}
}
PageInfo<RecordVersionVo> listVo=new PageInfo<RecordVersionVo>(voList);
return ResultUtils.ok(listVo);
在这里,对查出来的RecordVersion对象进行一层封装,返回的是RecordVersionVo对象。
查看源码,PageInfo类的构造方法,参数是list集合。我们可知,在这个方法中进行pageNum和pageSize等的赋值,但是并没有看见关于total的赋值,我们点进super(list)查看。
点进super(list)中,看到total的赋值,是根据if条件进行判断的
点击Page,我们可知他继承了ArrayList类,意思就是,当执行分页后,我们从数据库查出来的数据的数据类型其实是Page,根据上面的if条件判断可知,若是我们将多条数据(list<RecordVersion>)查出来后直接返回,那么total值是总条数,但是我在这里将查出来的数据封装成list<RecordVersionVo>对象,所以它会走else,返回的就是每页的条数。
解决办法:手动total值赋值
//设置数据总数
listVo.setTotal(((Page)list).getTotal());
return ResultUtils.ok(listVo);
这样运行后,完美解决问题!!!!