ruoyi-vue学习01

简介

毕设用的ruoyi,可以算是一边学习,一边做毕设,学到不少,这里分享一下

[图片上传失败...(image-180549-1648217844894)]

内容

上面展示了ruoyi项目之间的关系

首先就来说一下,ruoyi是怎么做分页的吧

首先ruoyi使用的是PageHelper很清楚了

首先点开一个SysUserController extends BaseController,看到如下获取用户列表,从前端看确实是分页实现的

但是我们确在请求的SysUser找不到分页相关的参数信息,奇怪?怎么做的

/**
 * 获取用户列表
 */
@PreAuthorize("@ss.hasPermi('system:user:list')")
@GetMapping("/list")
public TableDataInfo list(SysUser user) {
    startPage();
    List list = userService.selectUserList(user);
    return getDataTable(list);
}

那么就研究一下吧

首先这个@PreAuthorize("@ss.hasPermi('system:user:list')")ruoyi的一套权限控制,暂且不谈

那么就看这个startPage();,这是父类BaseController的方法

/**
 * 设置请求分页数据
 */
protected void startPage() {
    PageDomain pageDomain = TableSupport.buildPageRequest();
    Integer pageNum = pageDomain.getPageNum();
    Integer pageSize = pageDomain.getPageSize();
    if (StringUtils.isNotNull(pageNum) && StringUtils.isNotNull(pageSize)) {
        String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());
        Boolean reasonable = pageDomain.getReasonable();
        PageHelper.startPage(pageNum, pageSize, orderBy).setReasonable(reasonable);
    }
}

关注第一行PageDomain pageDomain = TableSupport.buildPageRequest();

这里就是分页参数的来源,直接点进TableSupport.buildPageRequest();

/**
 * 封装分页对象
 */
public static PageDomain getPageDomain() {
    PageDomain pageDomain = new PageDomain();
    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();
}

可以看到分页参数都来源于ServletUtils这个类

/**
 * 获取Integer参数
 */
public static Integer getParameterToInt(String name) {
    return Convert.toInt(getRequest().getParameter(name));
}

/**
* 获取request
*/
public static HttpServletRequest getRequest() {
    return getRequestAttributes().getRequest();
}

这是ruoyi的一个工具类,就举获取request请求中int类型的方法

getRequest()获取请求的request,然后获取对应的相关分页参数,这样就完成了

      // 查询参数
      queryParams: {
        pageNum: 1,
        pageSize: 10,
        userName: undefined,
        phonenumber: undefined,
        status: undefined,
        deptId: undefined
      },

找到前端发送请求所带的参数,就一清二楚了,当然这个名称一定要完全一致才行

回到startPage();,就在这开启的PageHelper分页

看这个TableDataInfo的返回对象,这个是真正的响应对象

public class TableDataInfo implements Serializable {
    private static final long serialVersionUID = 1L;

    /**
     * 总记录数
     */
    private long total;

    /**
     * 列表数据
     */
    private List rows;

    /**
     * 消息状态码
     */
    private int code;

    /**
     * 消息内容
     */
    private String msg;
    
    ...
}

它的设置是在BaseControllergetDataTable方法中

/**
 * 响应请求分页数据
 */
@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;
}

这里主要关注total即可,但关于这个还要另讲,其中牵扯到一个我遇到的问题

总结

这是第一篇,只讲了关于分页请求的相关实现,之后继续分享

你可能感兴趣的:(ruoyi-vue学习01)