pageHelper ,一个分页插件,在PageHelper.StartPage之后,会拦截第一条查询SQL,进行分页和总数的查询,注意!!是第一条。有些时候分页失效了,那就是在需要分页查询前面执行了别的查询语句
场景:
有一个列表查询的接口,之前的人直接在controller进行PageHelper.StartPage(pageNum,pageSize)了,后面需求有更改,实现类里面要增加一个过滤查询,就是根据另外一张表一个字段的状态来控制列表的查询。就是得在列表的查询之前做一个查询,查询出状态了,再控制列表的查询。结果就造成列表的分页失效了。因为PageHelper是跟着第一个查询进行分页的。
解决方案:
(一)在执行这个不分页的查询之前,先把分页的参数拿到:
Page page = PageHelper.getLocalPage();
(二)然后把当前线程中的PageHelper本地变量移除:
PageMethod.clearPage();
(三)执行不需要分页的查询
(四)把PageHelper的参数设置回去:
PageHelper.startPage(page.getPageNum(),page.getPageSize());
(五)执行需要分页的查询。完毕
(六)遇到过分页可以但是一直不查总数的,那就手动查一下并设置进去:
page.setTotal(xxxxxx);//这里就是上面第五步执行查询的语句的总数。