简介
毕设用的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
|
public static Integer getParameterToInt(String name) { return Convert.toInt(getRequest().getParameter(name)); }
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; ... }
|
它的设置是在BaseController
的getDataTable
方法中
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
即可,但关于这个还要另讲,其中牵扯到一个我遇到的问题
总结
这是第一篇,只讲了关于分页请求的相关实现,之后继续分享