版本
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
自行排查