概述
分页PageHelper是如何实现分页信息
PageHelper.startPage(0,10);
List<TAccount> tAccounts = tAccountMapper.selectAccountList();
PageInfo pageInfo = new PageInfo<>(tAccounts);
第一步:PageHelper.startPage(0,10);设置page信息到ThreadLocal中
/**
* 开始分页
*
* @param pageNum
页码
* @param pageSize
每页显示数量
* @param count
是否进行count查询
* @param reasonable
分页合理化,null时用默认配置
* @param pageSizeZero true且pageSize=0时返回全部结果,false时分页,null时用默认配置
*/
public static <E> Page<E> startPage(int pageNum, int pageSize, boolean count, Boolean reasonable, Boolean pageSizeZero) {
Page<E> page = new Page<E>(pageNum, pageSize, count);
page.setReasonable(reasonable);
page.setPageSizeZero(pageSizeZero);
//当已经执行过orderBy的时候
Page<E> oldPage = getLocalPage();
if (oldPage != null && oldPage.isOrderByOnly()) {
page.setOrderBy(oldPage.getOrderBy());
}
setLocalPage(page);
return page;
}
第二步: tAccountMapper.selectAccountList();
PageInterceptor对象中intercept方法中调用afterPage方法
pageHelper中的
public Object afterPage(List pageList, Object parameterObject, RowBounds rowBounds) {
//这个方法即使不分页也会被执行,所以要判断 null
AbstractHelperDialect delegate = autoDialect.getDelegate();
if (delegate != null) {
return delegate.afterPage(pageList, parameterObject, rowBounds);
}
return pageList;
}
然后
public Object afterPage(List pageList, Object parameterObject, RowBounds rowBounds) {
Page page = getLocalPage();
if (page == null) {
return pageList;
}
page.addAll(pageList);
if (!page.isCount()) {
page.setTotal(-1);
} else if ((page.getPageSizeZero() != null && page.getPageSizeZero()) && page.getPageSize() == 0) {
page.setTotal(pageList.size());
} else if(page.isOrderByOnly()){
page.setTotal(pageList.size());
}
return page;
}
getLocalPage();从当时ThreadLocal中保存的page对象取出来,然后赋予分页的信息。返回一个page对象
public class Page extends ArrayList implements Closeable,继承了ArrayList所以返回的List可以转成Page接收。
第三步:new PageInfo(list)时会判断list是不是Page对象。
public PageInfo(List<T> list, int navigatePages) {
super(list);
if (list instanceof Page) {
Page page = (Page) list;
this.pageNum = page.getPageNum();
this.pageSize = page.getPageSize();
this.pages = page.getPages();
this.size = page.size();
//由于结果是>startRow的,所以实际的需要+1
if (this.size == 0) {
this.startRow = 0;
this.endRow = 0;
} else {
this.startRow = page.getStartRow() + 1;
//计算实际的endRow(最后一页的时候特殊)
this.endRow = this.startRow - 1 + this.size;
}
}
。。。
}
最后
以上就是爱笑火龙果为你收集整理的分页PageHelper是如何实现分页信息的全部内容,希望文章能够帮你解决分页PageHelper是如何实现分页信息所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复