1.前端页面分页,调用后台请求时,传递分页参数
//一般在查询参数中定义分页变量
queryParams: {
pageNum: 1,
pageSize: 10},
//页面添加分页组件,传入分页变量
<pagination
v-show="total>0":total="total":page.sync="queryParams.pageNum":limit.sync="queryParams.pageSize"@pagination="getList"
/>
//调用后台方法,传入参数 获取结果
listUser(this.queryParams).then(response =>{
this.userList =response.rows;
this.total =response.total;
}
);
@PostMapping("/list")
@ResponseBody
publicTableDataInfo list(User user)
{
startPage(); //此方法配合前端完成自动分页
List<User> list =userService.selectUserList(user);
returngetDataTable(list);
}
startPage开启分页解析,进入startPage 代码
protected voidstartPage()
{
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 staticPageDomain buildPageRequest() {
returngetPageDomain();
}
返回的是getPageDomain这个方法的返回值,进入到该方法
public staticPageDomain getPageDomain()
{
PageDomain pageDomain = newPageDomain();
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));
returnpageDomain;
}
可以看到此实体类的分页的参数是从工具类ServletUtils中获取的参数,时从request中获取的分页参数
其中ServletUtils是客户端工具类
获取分页参数时调用的getParameterToInt定义如下
/**
* 获取Integer参数
*/
public staticInteger getParameterToInt(String name)
{
returnConvert.toInt(getRequest().getParameter(name));
}
调用了getRequest方法,此方法定义如下
/**
* 获取request
*/
public staticHttpServletRequest getRequest()
{
returngetRequestAttributes().getRequest();
}
此方法是获取request请求参数
而request请求对象是来自会话session,所以在
getRequestAttributes中
public staticServletRequestAttributes getRequestAttributes()
{
RequestAttributes attributes =RequestContextHolder.getRequestAttributes();
return(ServletRequestAttributes) attributes;
}
PageHelper只会对startpage开启后的第一个sql进行分页,并且分页后不能进行其他处理。否则分页失败。
解决:
1.查询到Page集合后,获取total总数
2.在对集合进行其他处理
3.整合集合和total