PageHelper分页插件返回total总为1的错误

1,135 阅读2分钟

PageHelper分页插件原理可查看blog.csdn.net/l1884895673…

分页插件要使用在service层,要对直接查询的sql语句进行分页。若写在control层,则分页的total为1。因为pageHelper在统计total的时候,会在查询语句执行之前进行一次count(0)查询,即查询总条数,接着才会处理查询语句,而对service层查询的(其实是已经解析封装的)list结果进行分页,即对处理过的数据进行分页就是对值进行分页,就是一个值(也许)。

查询total

查询分页内容

正确的案例如下:

control层:

public CommonResult query(@RequestBody PlaceInfoRequest jsonRequest){
    PageInfo<PlaceInfoQueryVo> infos = placeInfoService.querySelective(jsonRequest);
    return ResultUtil.success("根据条件查询",infos);
}

service层:

@Override
public PageInfo<PlaceInfoQueryVo> querySelective(PlaceInfoRequest placeInfoRequest) {
    Page page = PageHelper.startPage(placeInfoRequest.getPage(), placeInfoRequest.getPageSize());
    List<PlaceInfoQueryVo> placeInfoQueryVos = placeInfoMapper.selectSelective(placeInfoRequest);
    PageInfo<PlaceInfoQueryVo> pageInfo = new PageInfo<>(placeInfoQueryVos);
    pageInfo.setTotal(page.getTotal());
    return pageInfo;
}

*注:

其中pageinfo用于对Page结果进行包装,提供更多的分页属性

public class PageInfo<T> extends PageSerializable<T> {
    //当前页
    private int pageNum;
    //每页的数量
    private int pageSize;
    //当前页的数量
    private int size;
    //由于startRow和endRow不常用,这里说个具体的用法
    //可以在页面中"显示startRow到endRow 共size条数据"
    //当前页面第一个元素在数据库中的行号
    private int startRow;
    //当前页面最后一个元素在数据库中的行号
    private int endRow;
    //总页数
    private int pages;
    //前一页
    private int prePage;
    //下一页
    private int nextPage;
    //是否为第一页
    private boolean isFirstPage = false;
    //是否为最后一页
    private boolean isLastPage = false;
    //是否有前一页
    private boolean hasPreviousPage = false;
    //是否有下一页
    private boolean hasNextPage = false;
    //导航页码数
    private int navigatePages;
    //所有导航页号
    private int[] navigatepageNums;
    //导航条上的第一页
    private int navigateFirstPage;
    //导航条上的最后一页
    private int navigateLastPage;

分页工具的基础使用,只需下面两行即可(此时page已对placeInfoQueryVos分页)

@Override
public List querySelective(PlaceInfoRequest placeInfoRequest) {
	Page page = PageHelper.startPage(placeInfoRequest.getPage(), placeInfoRequest.getPageSize());
	List<PlaceInfoQueryVo> placeInfoQueryVos = placeInfoMapper.selectSelective(placeInfoRequest);

也可添加主要的分页属性,转为 pageableObject类

@Override
public pageableObject querySelective(PlaceInfoRequest placeInfoRequest) {
	Page page = PageHelper.startPage(placeInfoRequest.getPage(), placeInfoRequest.getPageSize());
	List<PlaceInfoQueryVo> placeInfoQueryVos = placeInfoMapper.selectSelective(placeInfoRequest);
	
	return PageUtil.genPageableObject(list);

pageUtil为简单封装

public class PageUtil {
    public static PageableObject genPageableObject(Page page){

        PageableObject pageableObject = new PageableObject();
        pageableObject.setList(page);
        pageableObject.setTotalCount((int) page.getTotal());
        pageableObject.setPage(page.getPageNum());
        pageableObject.setPageSize(page.getPageSize());

        return pageableObject;
    }
}
public class PageableObject<T> {
    private int page;
    private int pageSize;
    private int totalCount;

    private List<T> list;

感谢阅读!