记录SpringBoot+Mybatis+PageHelper分页踩坑:Pages总页数查出来始终为1,Total数有误
本人通过上面这位博主的文章解决了此方法,大家可以去支持一下。这里我再以我的方式讲一遍,可以让你们来理解两种不同的讲法,顺便增加一下这个坑的搜索度。我会通过代码加解释来说明。
//开启分页
PageHelper.startPage(page,limit);
List<Pojo> pojoList=pojoService.getPageList();
解释名词:page:当前的页面, limit :需要查询的条数。
开启分页后,他会把查询到的数据进行统计 ,然后除以 你的limit ,以得到你的页数。
比如你通过pojoService.getPageList() 查询到31条数据,但是你的limit为10 ,那么它就会把你的前端分成 4页也就是下面的 1、2、3、4 。 page就是你前端当前的页数, 比如你点第二页,那么page=2,假如你要展示10条数据。 那就是PageHelper.startPage(2,10); 也就是从第11条-20条数据展示到前端页面。(但是注意,他还是会统计查询到的所有数据31,所以你前端才会分页)
那么,坑来了,当你开启分页后,它会把你的limit和page 传递给你的第一个查询sql的操作。
当你再执行第二个查询sql的业务时,它就不会进行我上面说的分页操作了。可能会出现两种情况
1、前端直接把所有数据给展示了,limit根本没用。(很有可能是你执行了两个一样的sql查询。比如执行了两次 pojoService.getPageList() 。解决方法:直接弄一个变量存起来用就好了)
2、前端只展示limit个数据,page永远等于1
原因:你执行了两个不同的返回结果。比如你通过
pojoService.getPageList() 这个返回的数据赋值给 List<Pojo> pojoList。然后将pojoList数据进行业务处理,变成PojoVo 数组( List<Pojo> pojoVoList)后,然后这样
PageInfo <PojoVo> PojoVoListPageInfo = new PageInfo<>(pojoVoList);
return PojoVoListPageInfo;
这个时候PageInfo 的类型已经变了 ,从Pojo分页类型 变成PojoVo的分页类型了。我们是通过pojo得到总数的,现在又通过pojovo来分页返回,这样是不允许的。
下面,我用我的代码来解释。
//在这里donates 相当于 普通的类,也就是pojo, donateDto相当于拓展类,也就是pojoVO
List<Donate> donates = new ArrayList<Donate>();
donates = donateMapper.getDonateInfos();
PageInfo donatePageInfo = new PageInfo<>(donates); //注意这里不要设置类型
List<DonateDto> donateList = getDtoList(donates);
donatePageInfo.setList(donateList);
return donatePageInfo;