起因
同事有一个分页查询接口,发现总条目数查询不正确。其原因是对查询数据列表二次处理时造成信息丢失
根本原因
PageHelper使用了MyBatis
拦截器功能实现,查询时会将数据重新封装成自定义类型page
封装,并由其传输分页信息。
Page
类型继承自ArrayList
,平时查询后会用List
接口类型接收数据;所以了解不深的人,不会发现这个类型,一般正常使用时,会直接将这个Page
交给PageInfo
的构造方法进行初始化并返回
简而言之,就是返回的List
的真实类型,是含有更多信息的PageHelper的自定义类型Page
在不知情的条件下,如果进行二次封装,很容易就把数据给搞丢了
排查过程
需要带着目的去找:何时将错误的total
值写入PageInfo
中