记录Mybatis使用PageHelper遇到的坑:
使用PageHelper时
PageHelper.startPage(page,limit);
List<PostsLikeVo> listPostsLikeVo = postsService.getPostFrontList(postFrontQuery);
PageInfo<PostsLikeVo> postsLikeVoPageInfo = new PageInfo<>(listPostsLikeVo);
long total = postsLikeVoPageInfo.getTotal();
int pages = postsLikeVoPageInfo.getPages();
得到的pages
Pages总页数查出来始终为1
因为平时也没研究过PageHelper原理和源码;所以多方查证后才知道:
是VO拼接姿势不对
pageHelper是多线程操作,通过new PageInfo()查询出总条数和总页数;当为new PageInfo(pojoVo)时,是按照pojoVo去查询,所以无法查pojo到数据库中数据的总数的;需要先查出pojoList,然后拼接到Vo里面,在set到pageInfo中
原来问题出现在Vo上,解决办法之一有
PageHelper.startPage(pageNum,pageSize);
List<Pojo> pojoList=pojoService.getPageList();
PageInfo pageResult = new PageInfo(pojoList);
List<PojoVo> voList=new ArrayList<>();
for(Pojo item:pojoList){
PojoVo pojoVo=assembleRobotListVo(item);
voList.add(pojoVo);
}
//这一步记得添加
pageResult.setList(voList);
private PojoVo assembleRobotListVo(Pojo pojo){
PojoVo pojoVo=new PojoVo ();
pojoVo.setId(pojo.getId());
pojoVo.setMac(pojo.getMac());
pojoVo.setName(pojo.getName());
return pojoVo;
}
转换一下VO
也可能有其他解决办法,特此记录一下