PageHelper-supportMethodsArguments参数作用

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

参考链接:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值