ruoyi-vue学习01

简介

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

ruoyi项目依赖关系

内容

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

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

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

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

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

1
2
3
4
5
6
7
8
9
10
/**
* 获取用户列表
*/
@PreAuthorize("@ss.hasPermi('system:user:list')")
@GetMapping("/list")
public TableDataInfo list(SysUser user) {
startPage();
List<SysUser> list = userService.selectUserList(user);
return getDataTable(list);
}

那么就研究一下吧

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
/**
* 设置请求分页数据
*/
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();

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
* 封装分页对象
*/
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这个类

1
2
3
4
5
6
7
8
9
10
11
12
13
/**
* 获取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,然后获取对应的相关分页参数,这样就完成了

1
2
3
4
5
6
7
8
9
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
userName: undefined,
phonenumber: undefined,
status: undefined,
deptId: undefined
},

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

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class TableDataInfo implements Serializable {
private static final long serialVersionUID = 1L;

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

/**
* 列表数据
*/
private List<?> rows;

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

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

...
}

它的设置是在BaseControllergetDataTable方法中

1
2
3
4
5
6
7
8
9
10
11
12
/**
* 响应请求分页数据
*/
@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即可,但关于这个还要另讲,其中牵扯到一个我遇到的问题

总结

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