将sql拦截后导致分页条数和实际返回条数不一致

在使用mybatisplus拦截器时,分页出现问题。

@Override
    public Object intercept(Invocation invocation) throws Throwable {
        StatementHandler statementHandler = PluginUtils.realTarget(invocation.getTarget());
        MetaObject metaObject = SystemMetaObject.forObject(statementHandler);
        MappedStatement mappedStatement = (MappedStatement) metaObject.getValue("delegate.mappedStatement");
        String id = mappedStatement.getId();
        if (!id.contains("cn.induschain.dal.mapper.MainObjectMapper") || UserContextHandler.get() == null || UserContextHandler.get().getOrgIds() == null) {
            return invocation.proceed();
        }
        // 备份原始的分页参数
        RowBounds originalRowBounds = (RowBounds) metaObject.getValue("delegate.rowBounds");
        RowBounds newRowBounds = new RowBounds(originalRowBounds.getOffset(), originalRowBounds.getLimit());
        // 获取到原始sql语句
        String sql = statementHandler.getBoundSql().getSql();
        // 获取原始的总条数
        String countSql = getCountSql(sql);
        int originalTotal = getTotal(countSql, mappedStatement, statementHandler.getBoundSql().getParameterObject());
        // 修改sql
        sql = getSql(sql);

        // 更新分页参数
        metaObject.setValue("delegate.boundSql.sql", sql);
        metaObject.setValue("delegate.rowBounds", newRowBounds);
        // 执行查询
        Object proceed = invocation.proceed();
        if (proceed instanceof IPage) {
            IPage page = (IPage) proceed;
            page.setTotal(originalTotal);
        }
        return proceed;
    }

将代码拦截后导致分页数据和实际返回数据不一致,于是我想在执行查询之后将返回的数据手动设置分页条数,可是Object proceed为代理对象,无法执行到设置页数。
原因怀疑为mybatisplus的分页插件拦截导致。
目前解决方法为具体拦截sql执行拦截之后手动设置分页数据

【相关推荐】




如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^