分页插件PageHelper一直没想通这个到底是怎么实现的,这两行代码完全没关系。
PageHelper.startPage(pageNum,pageSize);
Page<Employee> page = EmployeeMapper.page(employeeDTO);
这行代码就是核心了,把页码和每页记录数都给了Page
Page底层是一个Arraylist集合
public static <E> Page<E> startPage(int pageNum, int pageSize, boolean count, Boolean reasonable, Boolean pageSizeZero) {
Page<E> page = new Page(pageNum, pageSize, count);
page.setReasonable(reasonable);
page.setPageSizeZero(pageSizeZero);
Page<E> oldPage = getLocalPage();
if (oldPage != null && oldPage.isOrderByOnly()) {
page.setOrderBy(oldPage.getOrderBy());
}
setLocalPage(page);
return page;
}
然后这个Page就存到了,线程的属性中,ThreadLocal中
protected static final ThreadLocal<Page> LOCAL_PAGE = new ThreadLocal();
protected static boolean DEFAULT_COUNT = true;
public PageMethod() {
}
protected static void setLocalPage(Page page) {
LOCAL_PAGE.set(page);
}
再之后会有一个PageIntecepter拦截器,拦截所有的query方法,再添加limit语句实现分页效果。