自定义BladeXSqlParser,执行list部分时候不经过sqlParser的原因?

Blade 未结 2 1440
1059315740
1059315740 2020-07-11 18:47
悬赏:5

一、该问题的重现步骤是什么?

  1. 修改BladeXSqlParser,将 tenant_id =? 修改为 (tenant_id = ? && is_global = ?) 添加了is_global字段

  2. 重新查验,发现mybatis的 TenantSqlParser 和 BladeX的 BladeXSqlParser这两个逻辑,进行list查询都不走这两个类。


二、你期待的结果是什么?实际看到的又是什么?

每次查询都会经过BladeXsqlParser 执行修改后的sql,目前有时候执行Parser有时候又不执行。请见下图。


三、你正在使用的是什么产品,什么版本?在什么操作系统上?

bladeX v2.5.0 ubuntu


四、请提供详细的错误堆栈信息,这很重要。

image.png

image.png


五、若有更多详细信息,请在下面提供。

2条回答
  •  smallchill
    smallchill (楼主)
    2020-07-13 11:09

    is_global = ? 这个字段推荐你手动加上,因为多租户插件会有过滤、跳过的情况。

    比如request没有token请求头、超管请求、手动排除的表这些条件有一个满足则会直接跳过,不启用多租户插件。如果把自定义的参数放到插件里,那么他也会一起跳过。

    这样的配置对于自定义的业务模块会有隐患,所以推荐还是手动加上这个条件比较好一些。

    如果是单纯想要加一个全局的参数,推荐给mybatis-plus增加一个sql拦截器,处理完毕后给select操作加上这一个统一的条件即可。(数据权限插件就是用的这个思路)

提交回复