大连密封材料 发表于 2023-7-31 13:53:42

使用pagehelper的坑(返回的total和size每页条数一致的问题)

问题描述

众所周知,pagehelper使用时应该在dao查询语句的前一句加上PageHelper.startPage,所以标题的问题由此引出……
原因

PageHelper.startPage使用后会将list隐性的给转换为page类型,如图所示

https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pbWcyMDIzLmNuYmxvZ3MuY29tL2Jsb2cvMjQ4MzIyMC8yMDIzMDcvMjQ4MzIyMC0yMDIzMDczMTEzMjUzNzA0MS0xMzI5NDk2ODQzLnBuZw==
万一没转换成Page类型呢?比如在controller层使用该方法去处理Service层的list数据,或者不按照规范未在Mapper语句上一行使用该方法时...

这样就导致了后面在使用pageInfo时的一些问题,比如getTotal时,发现startPage方法转换过的list并不是Page类型,而是普通的list类型,所以在getTotal时相当于直接调用的list.Size()去获取总数,源码如下:
https://dis.qidao123.com/imgproxy/aHR0cHM6Ly9pbWcyMDIzLmNuYmxvZ3MuY29tL2Jsb2cvMjQ4MzIyMC8yMDIzMDcvMjQ4MzIyMC0yMDIzMDczMTEzMzQwMDU2NC0zMzc4OTc0NDMucG5n
解决方案

1.第一种解决方案:使用PageHelper.startPage时返回的page类传入PageInfo里,比如
Page page = PageHelper.startPage(页码,页数);
List<T> list = mapper/service/***.get(T);//要分页的list
PageInfo<T> pageInfo = new PageInfo<>(page)//传入page而非list
return pageInfo.getTotal();//返回总条数2.第二种解决方案:不要在非Mapper返回的list上做处理,startPage只有在mapper语句的上一行添加才能隐形的把list转换为page类型,其他比如service层返回的list均不能转换为page。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 使用pagehelper的坑(返回的total和size每页条数一致的问题)