版本

Mybatis-plus V3.4.2

代码

`@Override public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) { switchSqlSchema(boundSql); }

private void switchSqlSchema(BoundSql boundSql) {
    String sql = boundSql.getSql();
    // 简单判断sql中是否包含涉及的知识库表,不包含的话就不用解析了
    if (!isContainsSyncTable(sql)) {
        return;
    }
    String version = DynamicSchemaContextHolder.peek();
    String schema = DynamicSchemaManager.getSchema(version);
    PGSQLStatementParser parser = new PGSQLStatementParser(sql);

// log.info("***sql={}", sql); SQLStatement sqlStatement = parser.parseStatement(); // 访问器 SchemaSwitchVisitorAdapter visitor = new SchemaSwitchVisitorAdapter(schema, DynamicSchemaManager.getSyncTableNames()); sqlStatement.accept(visitor); PluginUtils.mpBoundSql(boundSql).sql(SQLUtils.toSQLString(sqlStatement, DbType.postgresql)); }

@Override
public void beforeUpdate(Executor executor, MappedStatement ms, Object parameter) {
    // 获取BoundSql对象
    BoundSql boundSql = ms.getBoundSql(parameter);
    if (boundSql == null) {
        return;
    }
    switchSqlSchema(boundSql);
}`

现象

主要逻辑是动态修改表的schema,查询sql可以正常执行修改后的sql,更新sql无法执行修改后的sql

Comment From: miemieYaho

自行排查