若依RuoYi-Vue代码学习一---通用分页处理

文章目录

  • 一、先运行看看接口到sql
  • 二、来看看若依怎么处理的分页
  • 三、最后回到接口,及其参数返回

一、先运行看看接口到sql

  • 随便找个表格看看
    若依RuoYi-Vue代码学习一---通用分页处理_第1张图片
  • 可以看到传入了,分页关键属性
    在这里插入图片描述
  • 看看debug的日志打印的sql
  • [debug,137] - ==> Preparing: select dict_id, dict_name, dict_type, status, create_by, create_time, remark from sys_dict_type LIMIT ?
  • [debug,137] - ==> Parameters: 10(Integer)
  • [debug,137] - <== Total: 10

可以看出并没有分页语句

二、来看看若依怎么处理的分页

  • 于是,我找到接口位置
@PreAuthorize("@ss.hasPermi('system:dict:list')")
    @GetMapping("/list")
    public TableDataInfo list(SysDictType dictType)
    {
        //表格通用===分页处理
        startPage();
        List<SysDictType> list = dictTypeService.selectDictTypeList(dictType);
        //响应请求分页数据
        return getDataTable(list);
    }
  • 可以看到,在查sql的前后都有一个处理方法
    先看看startPage();
/**
     * 设置请求分页数据
     */
    protected void startPage()
    {
        //构建分页实体
        PageDomain pageDomain = TableSupport.buildPageRequest();
        Integer pageNum = pageDomain.getPageNum();
        Integer pageSize = pageDomain.getPageSize();

        //分页关键属性 判空
        if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize))
        {
            //按 Sql 转义顺序
            String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());
            //分页参数合理化
            Boolean reasonable = pageDomain.getReasonable();
            //分页工具使用
            PageHelper.startPage(pageNum, pageSize, orderBy).setReasonable(reasonable);
        }
    }
  • 看这里就要进去看最主要的构建了:TableSupport.buildPageRequest();
/**
     * 封装分页对象
     */
    public static PageDomain getPageDomain()
    {
        //分页数据实体
        PageDomain pageDomain = new PageDomain();
        /**
         * ServletUtils客户端工具类
         * getParameterToInt(PAGE_NUM)
         * ====>具体操作:
         * 获取get方法中的参数 getRequest().getParameter(name)
         * 类型转换器转IntConvert.toInt()
         */
        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;
    }

	//指向上面的方法
    public static PageDomain buildPageRequest()
    {
        return getPageDomain();
    }

这是请求参数的枚举
若依RuoYi-Vue代码学习一---通用分页处理_第2张图片

到这里,知道了怎么获取到请求的
pageNum: 1 pageSize: 10

三、最后回到接口,及其参数返回

@PreAuthorize("@ss.hasPermi('system:dict:list')")
    @GetMapping("/list")
    public TableDataInfo list(SysDictType dictType)
    {
        //表格通用===分页处理
        startPage();
        List<SysDictType> list = dictTypeService.selectDictTypeList(dictType);
        //响应请求分页数据
        return getDataTable(list);
    }
  • 来看看getDataTable(list);
/**
     * 响应请求分页数据
     */
    @SuppressWarnings({ "rawtypes", "unchecked" })
    protected TableDataInfo getDataTable(List<?> list)
    {
        //设置分页同意返回
        TableDataInfo rspData = new TableDataInfo();
        rspData.setCode(HttpStatus.SUCCESS);
        rspData.setMsg("查询成功");
        rspData.setRows(list);
        rspData.setTotal(new PageInfo(list).getTotal());
        return rspData;
    }
  • 就可以看到,可复用的,分页专用的返回响应数据
    w(゚Д゚)w!就到这里了

你可能感兴趣的:(若依,后端,大前端,vue.js,前端,javascript)