请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

pageHelper源码问题

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回答

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

0 回复 有任何疑惑可以回复我~
  • 提问者 指令狂人 #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2017-08-22 19:54:22
  • 提问者 指令狂人 #2
    我调试了一下,是因为PageHelper.startPage()里面的本地线程获取到了正在执形的SQL,然后将返回的对象转换为Page<E> 对象所以在new PageInfor();要放入productList的SQL原生执行的结果集因为此时,productList已经被封装成Page<E>对象中了,所以在PageInfo源码中 第一步判断List instanceof Page == true,所以返回了分页的相关信息。
    回复 有任何疑惑可以回复我~ 2017-08-22 22:45:21
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信