// 一般在查询参数中定义分页变量
queryParams: {
pageNum: 1,
pageSize: 10
},
// 页面添加分页组件,传入分页变量
// 调用后台方法,传入参数 获取结果
listUser(this.queryParams).then(response => {
this.userList = response.rows;
this.total = response.total;
}
);
@PostMapping("/list")
@ResponseBody
public TableDataInfo list(User user)
{
startPage(); // 此方法配合前端完成自动分页
List list = userService.selectUserList(user);
return getDataTable(list);
}
注:
博客:
https://blog.csdn.net/badao_liumang_qizhi
关注公众号
霸道的程序猿
获取编程相关电子书、教程推送与免费下载。
使用若依自动生成的代码
前端使用pagination控件,基于Bootstrap的轻量级表格插件 BootstrapTable
其中pageNum代表当前页号,即第几页,pageSize代表每页显示的条数。
将此俩个参数封装进queryParams对象中,此对象也包含前端要传递给后端的查询参数。
首先要对此查询对象进行声明
// 查询参数
queryParams: {
pageNum: 1,
pageSize: 10,
gh: undefined,
xm: undefined,
lxyf: undefined,
},
并且给pageNum和pageSize设置默认值,其他参数是绑定的查询参数,比如工号、姓名等。
上面分页控件的进行分页时会执行getList方法,此方法是请求后台数据的方法。
在此方法中
getList() {
listLxsz(this.queryParams).then((response) => {
this.lxszList = response.rows;
this.total = response.total;
});
},
调用js接口方法的listLxsz方法并将查询参数对象作为参数传递。
其中就包含分页所需的两个参数。
来到js对应的方法listLxsz中
export function listLxsz(query) {
return request({
url: '/kqgl/lxsz/list',
method: 'get',
params: query
})
}
其中request是封装的axios的对象,用来发送请求。
这里是get请求并且传递了查询参数对象。
来到SpringBoot对应的接口中
@GetMapping("/list")
public TableDataInfo list(KqLxsz kqLxsz)
{
startPage();
List list = kqLxszService.selectKqLxszList(kqLxsz);
return getDataTable(list);
}
后台需要调用startPage方法,并且此方法必须放在查询出数据的前一行。
list是后台查询的需要返回前端的数据,此方法必须放在此查询之前。
进入到startPage方法中
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());
PageHelper.startPage(pageNum, pageSize, orderBy);
}
}
分析:
最终是调用的MyBatis的PageHelper来进行分页,只需要给其传递分页所需的两个参数和排序字段即可。
那么这两个分页参数时来自pageDomain这个实体类。
进入到生成这个实体类的方法TableSupport.buildPageRequest中
public static PageDomain buildPageRequest()
{
return getPageDomain();
}
返回的是getPageDomain这个方法的返回值,进入到该方法
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));
return pageDomain;
}
可以看到此实体类的分页的参数是从工具类ServletUtils中获取的参数
其中ServletUtils是客户端工具类
package com.ruoyi.common.utils;
import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import org.springframework.web.context.request.RequestAttributes;
import org.springframework.web.context.request.RequestContextHolder;
import org.springframework.web.context.request.ServletRequestAttributes;
import com.ruoyi.common.core.text.Convert;
/**
* 客户端工具类
*
* @author ruoyi
*/
public class ServletUtils
{
/**
* 获取String参数
*/
public static String getParameter(String name)
{
return getRequest().getParameter(name);
}
/**
* 获取String参数
*/
public static String getParameter(String name, String defaultValue)
{
return Convert.toStr(getRequest().getParameter(name), defaultValue);
}
/**
* 获取Integer参数
*/
public static Integer getParameterToInt(String name)
{
return Convert.toInt(getRequest().getParameter(name));
}
/**
* 获取Integer参数
*/
public static Integer getParameterToInt(String name, Integer defaultValue)
{
return Convert.toInt(getRequest().getParameter(name), defaultValue);
}
/**
* 获取request
*/
public static HttpServletRequest getRequest()
{
return getRequestAttributes().getRequest();
}
/**
* 获取response
*/
public static HttpServletResponse getResponse()
{
return getRequestAttributes().getResponse();
}
/**
* 获取session
*/
public static HttpSession getSession()
{
return getRequest().getSession();
}
public static ServletRequestAttributes getRequestAttributes()
{
RequestAttributes attributes = RequestContextHolder.getRequestAttributes();
return (ServletRequestAttributes) attributes;
}
/**
* 将字符串渲染到客户端
*
* @param response 渲染对象
* @param string 待渲染的字符串
* @return null
*/
public static String renderString(HttpServletResponse response, String string)
{
try
{
response.setStatus(200);
response.setContentType("application/json");
response.setCharacterEncoding("utf-8");
response.getWriter().print(string);
}
catch (IOException e)
{
e.printStackTrace();
}
return null;
}
/**
* 是否是Ajax异步请求
*
* @param request
*/
public static boolean isAjaxRequest(HttpServletRequest request)
{
String accept = request.getHeader("accept");
if (accept != null && accept.indexOf("application/json") != -1)
{
return true;
}
String xRequestedWith = request.getHeader("X-Requested-With");
if (xRequestedWith != null && xRequestedWith.indexOf("XMLHttpRequest") != -1)
{
return true;
}
String uri = request.getRequestURI();
if (StringUtils.inStringIgnoreCase(uri, ".json", ".xml"))
{
return true;
}
String ajax = request.getParameter("__ajax");
if (StringUtils.inStringIgnoreCase(ajax, "json", "xml"))
{
return true;
}
return false;
}
}
获取分页参数时调用的getParameterToInt定义如下
/**
* 获取Integer参数
*/
public static Integer getParameterToInt(String name)
{
return Convert.toInt(getRequest().getParameter(name));
}
调用了getRequest方法,此方法定义如下
/**
* 获取request
*/
public static HttpServletRequest getRequest()
{
return getRequestAttributes().getRequest();
}
此方法是获取request请求参数
而request请求对象是来自会话session,所以在getRequestAttributes中
public static ServletRequestAttributes getRequestAttributes()
{
RequestAttributes attributes = RequestContextHolder.getRequestAttributes();
return (ServletRequestAttributes) attributes;
}
所以最终在进行get请求时,直接将分页参数作为参数传递给后台即可。
因为在get请求时会将参数拼接在url中,这样后台就能从请求中获取分页参数并传递给MyBatis的
pageHelper实现分页。
如果是post请求那,post请求时传递的是一个实体,如果将分页参数放在实体中,则后台没法通过请求获取分页参数。
可以通过在post请求的url中添加分页参数实现
比如在如下前端请求时
getList() {
listDdjl(this.queryParams).then((response) => {
this.ddjlList = response.rows;
this.total = response.total;
this.loading = false;
});
},
最终调用请求数据的方法
export function listDdjl(query) {
return request({
url: '/kqgl/ddjl/getListBySx?pageNum='+query.pageNum+'&pageSize='+query.pageSize,
method: 'post',
data: query
})
}
请求方式是post请求,分页参数存放在实体中,可以通过在url中手动拼接分页参数的方式进行传递分页参数。