解决pagehelper会把所有sql追加limit的问题

解决pagehelper会把所有sql追加limit的问题

使用pagehelper遇到的问题

这个坑问题阻碍了我很久,记录一下,希望也能帮到同样遇到此问题的人。

问题描述

多模块工程中,只有其中某一个模块pom依赖了pagehelper,在其他模块sql根本没有调用startpage方法的情况下,会给整个工程的查询sql加上额外的limit,造成本来手动写limit的sql语句执行出错。

会出现类似下面的sql

SELECT * FROM system LIMIT ?,? LIMIT ? 

造成此问题的原因还有很多,例如没有安全使用startpage,可以调用PageHelper.clearPage()方法清理线程。这里就不多介绍了,文章很多。

出现原因

在配置文件中加了supportMethodsArguments 配置,这个配置的官方介绍是支持通过Mapper接口参数来传递分页参数
在这里插入图片描述
注意: 官方介绍的不是特别清楚,其实这是个自动分页的配置,依据的是入参,如果参数中有pageNum,pageSize分页参数,则会自动分页

参数名称默认取:pageNum,pageSize
参数名称也可以自定义但是需要加配置

源码分析

在supportMethodsArguments设置为false后,sql拦截器判断是否需要分页那块会判断为否,跳过pagehelper的分页。
在这里插入图片描述

问题解决

直接去掉配置文件中的supportMethodsArguments,默认值为false,也可以设置为false。这样不会全局影响查询sql,然后可以在需要的地方把supportMethodsArguments设置为true。

例如:

/**
     * 设置请求分页数据
     */
    protected void startPage()
    {
    	//在调用startpage之前把supportMethodsArguments设置为true
        PageInterceptor pageInterceptor = new PageInterceptor();
        Properties properties  = new Properties();
        properties.setProperty("supportMethodsArguments","true");
        pageInterceptor.setProperties(properties);


        PageDomain pageDomain = TableSupport.buildPageRequest();
        Integer pageNum = pageDomain.getPageNum();
        Integer pageSize = pageDomain.getPageSize();
        if (StringUtil.isNotNull(pageNum) && StringUtil.isNotNull(pageSize))
        {
            String orderBy = SqlUtil.escapeOrderBySql(pageDomain.getOrderBy());
            PageHelper.startPage(pageNum, pageSize, orderBy);
        }
    }
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值