简介
毕设用的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;
...
}
它的设置是在BaseController
的getDataTable
方法中
/**
* 响应请求分页数据
*/
@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
即可,但关于这个还要另讲,其中牵扯到一个我遇到的问题
总结
这是第一篇,只讲了关于分页请求的相关实现,之后继续分享