分页查询
小于 1 分钟
分页查询
参考资料
<黑马苍穹外卖,菜品分页查询业务>
个人粗略理解,可能存在错误!!!
Controller接收前端传来的Page 以及 PageSize
ServiceImpl中通过PageHelper类将Page和PageSize参数传递给Page
ServiceImpl代码
public PageResult pageQuery(DishPageQueryDTO dishPageQueryDTO) {
PageHelper.startPage(dishPageQueryDTO.getPage(), dishPageQueryDTO.getPageSize());
Page<DishVO> page = dishMapper.pageQuery(dishPageQueryDTO);
return new PageResult(page.getTotal(), page.getResult());
}
PageHelper
public class PageHelper extends PageMethod
PageMethod,startPage()
public abstract class PageMethod {
protected static final ThreadLocal<Page> LOCAL_PAGE = new ThreadLocal();
protected static void setLocalPage(Page page) {
LOCAL_PAGE.set(page);
}
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继承了ArrayList
public class Page<E> extends ArrayList<E> implements Closeable {
private static final long serialVersionUID = 1L;
private int pageNum;
private int pageSize;
private long startRow;
private long endRow;
private long total;
private int pages;
MySQL分页查询
SELECT * FROM table_name
ORDER BY some_column
-- pageSize 是每页显示的记录数,currentPage 是当前页码
LIMIT pageSize OFFSET (currentPage - 1) * pageSize;