公司现在用的分页插件是PageHelper
地址:https://gitee.com/free/Mybatis_PageHelper。
public PageInfo<Student> list(StudentDTO dto, Pager pager) {
StudentCriteria criteria = this.assemblyQuerycond(dto);
if (null != pager) {
if (null != pager.getPageSize() && null != pager.getPageIndex()) {
PageHelper.startPage(pager.getPageIndex(), pager.getPageSize());
}
}
criteria.setOrderByClause(" create_time desc");
PageInfo<Student> pageInfo = new PageInfo<>(this.studentMapper.selectByExample(criteria));
return pageInfo;
}
只是需要一行代码:PageHelper.startPage(pager.getPageIndex(), pager.getPageSize());
就可以实现物理分页。
原理:
1. PageHelper.startPage(pager.getPageIndex(), pager.getPageSize());
会存放在一个ThreadLocal。
protected static final ThreadLocal<Page> LOCAL_PAGE = new ThreadLocal<Page>();
protected static void setLocalPage(Page page) { LOCAL_PAGE.set(page); }
2. 当进行查询时,会进入到拦截器。
执行类PageInterceptor的方法intercept——》skip方法——》
Page page = pageParams.getPage(parameterObject, rowBounds);