pageHelper源码问题

来源:8-4 后台商品列表动态分页功能开发

指令狂人

2017-08-21

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 = SqlUtil.getLocalPage();
   if (oldPage != null && oldPage.isOrderByOnly()) {
       page.setOrderBy(oldPage.getOrderBy());
   }
   SqlUtil.setLocalPage(page);
   return page;
}

里面没有用到核心方法Intercept()和plugin()方法,并且PageInfo里的list也不是很理解,pageInfo怎么和PageHelper联系上呢进而实现分页呢

写回答

1回答

看你笑呵呵

2017-08-22

pageHelper.startPage紧跟着的第一个方法会被分页,分页时,实际返回的结果list类型是Page<E>,如果想取出分页信息,需要强制转换为Page<E>,或者用PageInfo来对结果包装,所以老师每次使用PageInfo的时候,在new PageInfo(xx)这里,xx都是放的startPage下面的方法返回然后setList实际结果

0
2
指令狂人
我调试了一下,是因为PageHelper.startPage()里面的本地线程获取到了正在执形的SQL,然后将返回的对象转换为Page 对象所以在new PageInfor();要放入productList的SQL原生执行的结果集因为此时,productList已经被封装成Page对象中了,所以在PageInfo源码中 第一步判断List instanceof Page == true,所以返回了分页的相关信息。
2017-08-22
共2条回复

从0开始 独立完成企业级Java电商网站服务端开发

前后端分离,数据库接口设计,架构设计,功能开发,上线运维

9430 学习 · 8789 问题

查看课程