当前位置: 首页 > 后端技术 > Java

解决PageHelper.startPage(page, size)后total和PageSize总是相等的问题

时间:2023-04-02 09:08:11 Java

解决PageHelper.startPage(page,size)后total和PageSize一直相等,甚至一直等于设置的PageSize的问题,但是查阅了很多博客资料,发现只说了一半,这没有解决初学者的问题。今天彻底解决了问题。1.问题PageHelper.startPage(pageParam.getPageNum(),pageParam.getPageSize(),pageParam.getOrderBy());//第一次与数据库交互ListcouponList=couponMapper.selectByExample(couponExample);//封装ListsearchCouponResponseList=couponDao.getSearchCouponResponse(couponList,userId);//返回给前端returnnewPageInfo(searchCouponResponseList);网上说PageHelper.startPage后面一定要跟一个跟数据库交互的函数。这样,他们就可以拦截第一次与数据库交互的数据,并进行分页处理。确实是这样,不过后来我就按照拿到的单子打包了。这对许多企业来说是必不可少的。但是封装后的数据丢失了很多属性,数据总量也丢失了。要想解决这个问题,首先要知道为什么会这样。2.原因代码块1publicPageInfo(Listlist,intnavigatePages){super(list);//关键,代码块2显示超级内容if(listinstanceofPage){//关键页面page=(Page)列表;this.pageNum=page.getPageNum();this.pageSize=page.getPageSize();this.pages=page.getPages();this.size=page.size();//由于结果是>startRow是的,所以实际需要+1if(this.size==0){this.startRow=0;this.endRow=0;}else{this.startRow=page.getStartRow()+1;//计算实际的endRow(最后一页特殊)this.endRow=this.startRow-1+this.size;}}elseif(listinstanceofCollection){this.pageNum=1;this.pageSize=list.size();这个.pages=this.pageSize>0?1:0;//关键字this.size=list.size();this.startRow=0;this.endRow=list.size()>0?list.size()-1:0;}代码块2//第一个构造函数有一个super(),这里是super的内容publicPageSerializable(Listlist){this.list=list;if(listinstanceofPage){this.total=((Page)list).getTotal();}else{this.total=list.size();}}根据代码块1,稍有常识的人都可以发现,我们传入的List其实是一个Page,所以他需要判断传入的List是否可以转化为Page对象。为什么?因为我们说第一次和数据库交互的时候,被拦截封装了。然后返回给你的这部分数据是分页的,保留具体的信息,这个过程就是把数据库搜索到的list封装成一个页面的过程,也就是说ListcouponList=couponMapper.selectByExample(优惠券示例);这个couponList不再是一个真正的List,它是一个Page类型。有兴趣的朋友打个断点看看他是什么。所以这意味着返回给我的列表是分页的,所有必要的数据都被保存了。然后我就想,我能不能自己创建一个PageInfo,我把必要的数据塞进去,但是列表会塞我封装的数据,做个狸猫做太子操作。3.解决方案publicPageInfo(Listlist,intnavigatePages){super(list);if(listinstanceofPage){页面page=(Page)list;this.pageNum=page.getPageNum();this.pageSize=page.getPageSize();这。pages=page.getPages();//一共几页this.size=page.size();}publicPageSerializable(Listlist){this.list=list;if(listinstanceofPage){this.total=((Page)list).getTotal();}else{this.total=list.size();那么对于PageInfo稍有常识的人都能发现他需要pageNum、pageSize、pages、size、total。前两个是我们自定义的,后三个已经在第一次交互返回给我们列表的变量中了。还有一个this.list=list,换成我们打包好的不就好了吗?4.结果......................................省略PageHelper.startPage(pageParam.getPageNum(),pageParam.getPageSize(),pageParam.getOrderBy());List<优惠券>couponList=couponMapper.selectByExample(couponExample);//封装ListsearchCouponResponseList=couponDao.getSearchCouponResponse(couponList,userId);PageInfopageInfo=newPageInfo();if(couponListinstanceofcom.github.page){pageInfo=buildPageInfo((com.github.pagehelper.Page)couponList);//提取属性并创建一个新的pageInfo}pageInfo.setList(searchCouponResponseList);//把我们打包好的东西放进去,狸猫换王子if(couponList.size()==0)returnnewPage(newPageInfo(newArrayList()));;返回新页面(pageInfo);.....................省略}privatePageInfobuildPageInfo(com.github.pagehelper.PagepageList){PageInfopageInfo=newPageInfo();pageInfo.setPageNum(pageList.getPageNum());pageInfo.setPageSize(pageList.getPageSize());pageInfo.setPages(pageList.getPages());pageInfo.setTotal(pageList.getTotal());返回页面信息;}我的CSDN原地址