简介
毕设用的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<SysUser> 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即可,但关于这个还要另讲,其中牵扯到一个我遇到的问题
总结
这是第一篇,只讲了关于分页请求的相关实现,之后继续分享




