确认

  • [x] 我使用的版本是最新版, 并且使用插件确认过项目里无依赖版本冲突
  • [x] 我已经在 issue 中搜索过, 确认问题没有被提出过
  • [x] 我已经修改标题, 将标题中的 描述 替换为遇到的问题

当前程序版本

3.5.10.1

问题描述

使用mp 3.5.10.1开启多租户插件,查询数据列表,拼接多个租户ID

详细堆栈日志

Consume Time:0 ms

Execute SQL:SELECT a.id, a."name", a.pid, a."type", a."path", a.icon, a."sort", a."status", a.create_time FROM sys_menu a WHERE a.del_flag = 0 AND a."type" = ('0'::int4) AND a.status = ('0'::int4) AND a.tenant_id = 0 AND a.tenant_id = 0 ORDER BY a."sort" DESC

Comment From: miemieYaho

给出你的复现demo

Comment From: KouShenhai

项目地址:https://github.com/KouShenhai/mybatis-plus-bug-demo

开启异步写入CaffeineJsqlParseCache

    static {
        JsqlParserGlobal.setJsqlParseCache(new FurySerialCaffeineJsqlParseCache(
                Caffeine.newBuilder().maximumSize(4096).expireAfterWrite(10, TimeUnit.MINUTES).build(),
                Executors.newVirtualThreadPerTaskExecutor(), true));
    }
public class FurySerialCaffeineJsqlParseCache extends AbstractCaffeineJsqlParseCache {

    public FurySerialCaffeineJsqlParseCache(Cache<String, byte[]> cache, Executor executor, boolean async) {
        super(cache);
        // 开启异步
        super.async = async;
        super.executor = executor;
    }
}

项目直接运行,然后访问 http://localhost:8012

打印的SQL出现租户ID多次拼接的情况

==>  Preparing: SELECT id, name, tenant_id FROM t_user WHERE (name = ? AND id = ?) AND tenant_id = 0 AND tenant_id = 0
==> Parameters: laokou(String), 1(Integer)
<==    Columns: ID, NAME, TENANT_ID
<==        Row: 1, laokou, 0
<==      Total: 1

Comment From: miemieYaho

应该关闭异步写入,这算一个bug,后面的版本会考虑移除异步

Comment From: KouShenhai

应该关闭异步写入,这算一个bug,后面的版本会考虑移除异步

OK