问题描述
多表查询时,对查到的数据进行分页,PageHelper封装的数据页数页码等信息有问题。
例如:先把需要的第一部分数据查出来
PageHelper.startPage(iPage, iSize);
List<Portal> portals = portalMapper.selectPortalInfoList(portalVo);
然后再对这部分数据进行二次处理
List<PortalDto> portalDtos = new ArrayList<>();
for (Portal obj:portals) {
PortalDto portalDto = new PortalDto();
portalDto.setIsvId(obj.getIsvId());
portalDtos.add(portalDto);
}
最终我们需要的是带有分页信息的portalDtos
PageInfo pageInfo = new PageInfo(portalDtos);
原因分析:
出现这个错误的原因是PageHelper只对第一条SQL有效,在第一次查询我们需要的数据的时候分页生效,
解决方案:
使用 org.springframework.beans.BeanUtils.copyProperties(obj1,obj2,"xxx");
copyProperties()能够将一个对象的数据复制给另一个数据,并且忽略其中的某些属性。
list 属性是PageInfo对象存放数据的属性,这里我们舍弃掉此属性。
很显然,这时我们只需要将我们需要的数据替换掉带有分页信息的PageInfo对象的数据部分就可以了。
//带有分页信息的PageInfo对象
PageInfo<Portal> pages = new PageInfo<>(tempList);
//带有我们需要的数据,但是分页信息不正确
PageInfo<Portal> pageInfo = new PageInfo<>(portalList);
//把pages的数据复制给pageInfo,忽略list
BeanUtil.copyProperties(pages, pageInfo, "list");