mybatis的分页组件github.pagehelper使用问题

注意,这个分页下标是从1开始的。

查源码:com.github.pagehelper.Page

构造方法:



这里面的calculateStartAndEndRow方法是计算开始下标的,看实现:

/**
 * 计算起止行号
 */
private void calculateStartAndEndRow() {
	this.startRow = this.pageNum > 0 ? (this.pageNum - 1) * this.pageSize : 0;
	this.endRow = this.startRow + this.pageSize * (this.pageNum > 0 ? 1 : 0);
}

就是说传入PageNum=0时startRow=0,

pageNum=1时startRow=(pageNum-1)*pageSize=0

两个值的startRow都是0,所以说下标是从1开始。


Page的优雅用法,所谓优雅,就是用泛型,不强转。

首先要清楚的是,一旦被pagehelper拦截了,Mapper类返回的就是com.github.pagehelper.Page对象了,但我们为满足我们的一点原生态的心,还是把返回对象定义成java.util.List。

为了不强转,先把这里直接定义成Page吧,如:

public Page queryViolations(@Param("violation")ViolationSearchCondDTO violation,@Param("pageSize")int pageSize,@Param("pageNum")int pageNum);

在业务层(Service)可能我们又不能直接返回DTO,还要把这个Page里的东西转换下格式,怎么办呢?

//先取正常的DTO,如:

Page resultList = violationMapper.queryViolations(violation, pageSize, pageNum);

//遍历并转换resultList,成List rstList ,

//关键点,返回新的Page对象,如下:

Page rstPage = new Page();
rstPage.addAll(rstList);
rstPage.setPageNum(resultList.getPageNum());
rstPage.setPageSize(resultList.getPageSize());
rstPage.setTotal(resultList.getTotal());
rstPage.setPages(resultList.getPages());
return rstPage;

这里没有用到强转吧


pagehelper注入问题:

PageHelper.startPage(pageNum, pageSize);

有了上面这行代码,注意后面的sql都会被加limit 10,而如果你的sql代码里已经有limit ,那么就会报错了。所以把你有limit 的sql放到这行代码的上面去。


文/程忠 浏览次数:0次   2018-05-11 15:40:44

相关阅读

微信扫描-捐赠支持
加入QQ群-技术交流

评论: