四、PageHelper分页

(1)分页的入口是startPage()



(2)PageUtils.startPage

    public static void startPage() {
        // 从HttpServletRequest中获取前端传入的参数,并设置到PageDomain对应的字段中
        PageDomain pageDomain = TableSupport.buildPageRequest();
        // 从PageDomain中获取pageNum、pageSize
        Integer pageNum = pageDomain.getPageNum();
        Integer pageSize = pageDomain.getPageSize();
        // pageNum、pageSize都不为null时才进行分页
        if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize))
        {
            // 用这则表达式验证 order by 语法是否符合规范
            String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());
            // 获取reasonable
            Boolean reasonable = pageDomain.getReasonable();
            // PageHelper.startPage经过层层调用,会创建Page对象,将分页参数保存在Page对象中,
            // 该Page对象最终会设置在PageMethod.LOCAL_PAGE中,LOCAL_PAGE的类型为
            // ThreadLocal<Page>,在mybatis插件PageInterceptor的intercept方法中,
            // 最终会从该LOCAL_PAGE中获取Page中的分页参数,拼接到SQL语句中实现分页
            PageHelper.startPage(pageNum, pageSize, orderBy)
                // reasonable为true:如果pageNum<=0,则将pageNum设置为1
                .setReasonable(reasonable);
        }
    }

(3)TableSupport.getPageDomain

    public static PageDomain getPageDomain() {
        // 这里会从HttpServletRequest中获取前端传入的参数,并设置到PageDomain对应的字段中
        PageDomain pageDomain = new PageDomain();
        // 如果前端传入的pageNum、pageSize不是数值类型,那么getParameterToInt的返回值最终为null
        // 设置起始页号
        pageDomain.setPageNum(ServletUtils.getParameterToInt(PAGE_NUM));
        // 设置每页条数
        pageDomain.setPageSize(ServletUtils.getParameterToInt(PAGE_SIZE));
        // 设置排序字段
        pageDomain.setOrderByColumn(ServletUtils.getParameter(ORDER_BY_COLUMN));
        // 设置排序方向
        pageDomain.setIsAsc(ServletUtils.getParameter(IS_ASC));
        // 设置参数是否合理化
        pageDomain.setReasonable(ServletUtils.getParameterToBool(REASONABLE));
        return pageDomain;
    }
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容