PageHelper-supportMethodsArguments参数作用
application.yml
# PageHelper分页插件
pagehelper:
supportMethodsArguments: true
supportMethodsArguments
:支持通过 Mapper 接口参数来传递分页参数,默认值false,分页插件会从查询方法的参数值中,自动根据上面 params 配置的字段中取值,查找到合适的值时就会自动分页。 使用方法可以参考测试代码中的 com.github.pagehelper.test.basic 包下的 ArgumentsMapTest 和 ArgumentsObjTest。
/**
* PageObjectUtil
* 从对象中获取分页参数。
*
* @param params 请求参数对象。
* @param required 是否必须存在分页参数。
* @return 返回封装了分页信息的Page对象。
* @throws PageException 如果无法获取或解析分页参数,则抛出此异常。
*/
public static <T> Page<T> getPageFromObject(Object params, boolean required) {
// 检查参数对象是否为空,为空则抛出异常
if (params == null) {
throw new PageException("无法获取分页查询参数!");
}
// 如果参数对象实现了IPage接口,则直接从接口中获取分页信息
if(params instanceof IPage){
IPage pageParams = (IPage) params;
Page page = null;
// 如果存在pageNum和pageSize,则创建Page对象并设置分页信息
if(pageParams.getPageNum() != null && pageParams.getPageSize() != null){
page = new Page(pageParams.getPageNum(), pageParams.getPageSize());
}
// 如果存在orderBy信息,则设置排序字段
if (StringUtil.isNotEmpty(pageParams.getOrderBy())) {
if(page != null){
page.setOrderBy(pageParams.getOrderBy());
} else {
page = new Page();
page.setOrderBy(pageParams.getOrderBy());
page.setOrderByOnly(true);
}
}
return page;
}
// 获取分页参数的辅助对象
int pageNum;
int pageSize;
MetaObject paramsObject = null;
// 如果当前环境支持从特定请求对象中获取参数,则尝试获取
if (hasRequest && requestClass.isAssignableFrom(params.getClass())) {
try {
paramsObject = MetaObjectUtil.forObject(getParameterMap.invoke(params, new Object[]{}));
} catch (Exception e) {
// 忽略异常
}
} else {
paramsObject = MetaObjectUtil.forObject(params);
}
// 如果无法获取或解析参数对象,则抛出异常
if (paramsObject == null) {
throw new PageException("分页查询参数处理失败!");
}
// 检查并获取排序字段信息
Object orderBy = getParamValue(paramsObject, "orderBy", false);
boolean hasOrderBy = false;
if (orderBy != null && orderBy.toString().length() > 0) {
hasOrderBy = true;
}
// 尝试从参数对象中获取pageNum和pageSize,如果获取失败且必须存在分页参数,则抛出异常
try {
Object _pageNum = getParamValue(paramsObject, "pageNum", required);
Object _pageSize = getParamValue(paramsObject, "pageSize", required);
// 如果只存在排序字段,但没有pageNum和pageSize,则只返回排序信息
if (_pageNum == null || _pageSize == null) {
if(hasOrderBy){
Page page = new Page();
page.setOrderBy(orderBy.toString());
page.setOrderByOnly(true);
return page;
}
return null;
}
// 解析并校验pageNum和pageSize的值
pageNum = Integer.parseInt(String.valueOf(_pageNum));
pageSize = Integer.parseInt(String.valueOf(_pageSize));
} catch (NumberFormatException e) {
throw new PageException("分页参数不是合法的数字类型!", e);
}
// 创建Page对象并设置基本的分页信息
Page page = new Page(pageNum, pageSize);
// 尝试获取并设置是否需要进行总数查询的标志
//count查询
Object _count = getParamValue(paramsObject, "count", false);
if (_count != null) {
page.setCount(Boolean.valueOf(String.valueOf(_count)));
}
// 如果存在排序字段,则设置排序信息
//排序
if (hasOrderBy) {
page.setOrderBy(orderBy.toString());
}
// 尝试获取并设置分页合理化的标志
//分页合理化
Object reasonable = getParamValue(paramsObject, "reasonable", false);
if (reasonable != null) {
page.setReasonable(Boolean.valueOf(String.valueOf(reasonable)));
}
// 尝试获取并设置是否支持pageSize为0时查询所有数据的标志
//查询全部
Object pageSizeZero = getParamValue(paramsObject, "pageSizeZero", false);
if (pageSizeZero != null) {
page.setPageSizeZero(Boolean.valueOf(String.valueOf(pageSizeZero)));
}
return page;
}
所以说当设置了supportMethodsArguments
,就算没有去使用PageHelper.startPage(1,10);
,当你的mapper中有pageNum、pageSize的参数名称时候,就会自动去分页,但是他只会去执行count语句,不会执行查询语句,所以就导致返回的list是0
参考链接: