当前位置: 首页 > news >正文

若依分页的逻辑分析

看了一些网上的感觉都是 听君一席话, 如听一席话.

下面开始简单的分析一下, 随便找一个接口, 看一下前端的请求地址:

请求方式: GET

请求地址:
http://localhost/dev-api/system/role/list?pageNum=1&pageSize=10

后端接口:

    @PreAuthorize("@ss.hasPermi('system:role:list')")
    @GetMapping("/list")
    public TableDataInfo list(SysRole role) {
        startPage();
        List<SysRole> list = roleService.selectRoleList(role);
        return getDataTable(list);
    }

跟一下 startPage();

    public static void startPage()
    {
        PageDomain pageDomain = TableSupport.buildPageRequest();
        Integer pageNum = pageDomain.getPageNum();
        Integer pageSize = pageDomain.getPageSize();
        String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());
        Boolean reasonable = pageDomain.getReasonable();
        PageHelper.startPage(pageNum, pageSize, orderBy).setReasonable(reasonable);
    }

看一下 buildPageRequest 这个方法做了什么

public static PageDomain getPageDomain()
{
    PageDomain pageDomain = new PageDomain();
    pageDomain.setPageNum(Convert.toInt(ServletUtils.getParameter(PAGE_NUM), 1));
    pageDomain.setPageSize(Convert.toInt(ServletUtils.getParameter(PAGE_SIZE), 10));
    pageDomain.setOrderByColumn(ServletUtils.getParameter(ORDER_BY_COLUMN));
    pageDomain.setIsAsc(ServletUtils.getParameter(IS_ASC));
    pageDomain.setReasonable(ServletUtils.getParameterToBool(REASONABLE));
    return pageDomain;
}

简单处理一下常量:

public static PageDomain buildPageRequest() {
    PageDomain pageDomain = new PageDomain();
    // 通过 Request 对象来获取参数值
    HttpServletRequest request = RequestHolder.getRequest();
    pageDomain.setPageNum(StringUtils.isEmpty(request.getParameter("pageNum")) ? 1 : Integer.parseInt(request.getParameter("pageNum")));
    pageDomain.setPageSize(StringUtils.isEmpty(request.getParameter("pageSize")) ? 10 : Integer.parseInt(request.getParameter("pageSize")));
    pageDomain.setOrderBy(request.getParameter("orderBy"));
    pageDomain.setReasonable(ServletUtils.getParameterToBool(REASONABLE));
    return pageDomain;
}

到这里其实就明白了. 底层的处理直接从 HttpServletRequest 这个对象中获取 pageNumpageSize.

所以可以猜想如果前端传了分页这两个值后端在接口中没有接收, 也是可以实现分页的效果的. 测试如下: 即

    @PreAuthorize("@ss.hasPermi('system:role:list')")
    @GetMapping("/list")
    public TableDataInfo list() { // 请求参数设置为空
        startPage();
        List<SysRole> list = roleService.selectRoleList(new SysRole());
        return getDataTable(list);
    }

注: getDataTable 的作用是封装参数并返回 TableDataInfo对象

相关文章:

  • nodejs使用WebSocket实现聊天效果
  • 蓝桥杯 Excel地址
  • ubuntu22.04安装P104-100一些经验(非教程)
  • 【单片机通信技术】串口通信的几种方式与比较,详细解释SPI通信
  • 蓝桥杯2024年第十五届省赛真题-传送阵
  • 机器学习数学基础:42.AMOS 结构方程模型(SEM)分析的系统流程
  • 基于 STC89C52 的 8x8 点阵显示数字
  • DeepSeek私有化部署5:openEuler 24.03-LTS-SP1安装docker
  • 7. 机器人记录数据集(具身智能机器人套件)
  • docker中kibana启动后,通过浏览器访问,出现server is not ready yet
  • React 项目中 SVG 图标的调试和预览方法
  • Python实现鼠标点击获取窗口进程信息
  • UIScrollView与UIStackView的完美组合打造灵活滚动布局
  • 【项目】视频点播
  • Html常用代码
  • Apache SeaTunnel 人物专访 | 张东浩:从使用者到Committer的开源历程
  • 第七步:简单爬虫与网页测试
  • 【达梦数据库】代理用户的使用
  • 网页制作11-html,css,javascript初认识のCCS样式列表(下)
  • SD-WAN解决方案架构(SD WAN Solution Architecture)
  • 东部沿海大省浙江,为何盯上内河航运?
  • 江苏省委组织部副部长高颜已任南京市委常委、组织部部长
  • 讲座|消逝之钟:《红楼梦》与《布登勃洛克一家》中的时间观
  • 龚正市长调研闵行区,更加奋发有为地稳增长促转型,久久为功增强发展后劲
  • 巴菲特谈卸任CEO:开始偶尔失去平衡,但仍然保持敏锐的头脑,仍打算继续工作
  • 秘鲁总统任命前司法部长阿拉纳为新总理