罗_亮 2023-08-23 14:05 采纳率: 0%
浏览 9

将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执行拦截之后手动设置分页数据

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-08-23 16:55
    关注

    【相关推荐】




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

报告相同问题?

问题事件

  • 创建了问题 8月23日

悬赏问题

  • ¥15 Mac版Fiddler Everywhere4.0.1提示强制更新
  • ¥15 android 集成sentry上报时报错。
  • ¥50 win10链接MySQL
  • ¥35 跳过我的世界插件ip验证
  • ¥15 抖音看过的视频,缓存在哪个文件
  • ¥15 自定义损失函数报输入参数的数目不足
  • ¥15 如果我想学习C大家有是的的资料吗
  • ¥15 根据文件名称对文件进行排序
  • ¥15 deploylinux的ubuntu系统无法成功安装使用MySQL❓
  • ¥15 有人会用py或者r画这种图吗