背景
做项目时前端反应列表查询返回的总行数不对,列表查询使用的是PageHelper组件,实现完全按照文档而来。
排查
搜索了很多实现文档,对比发现实现代码与文档无出入,但总数就是不对,只能从根本入手,查看官方文档,看到如下内容:
在你需要进行分页的 MyBatis 查询方法前调用 PageHelper.startPage
静态方法即可,紧跟在这个方法后的第一个MyBatis 查询方法会被进行分页。
可以看出PageHelper方法后面必须是直接的查询语句否则分页查询的帽子就扣错了
排查代码
...省略代码...
PageHelper.startPage(personSelectRequest.getPage(), personSelectRequest.getRows());
List<User> userList = personService.select(request);
PageInfo<User> pageInfo = new PageInfo<>(userList,personSelectRequest.getRows());
...省略代码...
PageHelper后紧跟的是查询语句,没有问题,崩溃中~~一度想改写接口
举一反三,PageHelper后面必须是查询语句,那么查询语句后面是不是必须是pageInfo的转化?
查看select方法内部是否有处理
//有一个列表解密操作
ListDecryptHelper.decryptUserList(personDao.selectByConditions(personDataRequest));
果然select方法内部对myBatis的查询结果进行了处理,果断去掉一切正常,后将解密操作放在pageinfo后面
总结
在使用PageHelper时,设置startPage、查询数据、转化为pageInfo必须是连贯的三步,中间不能有任何其他处理否则会导致结果不可预期。
后记
之前没用过pageHelper ,感觉这玩意不好用,看过文档后真香~~
方便,简单设置即可使用
网友评论