diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/IDialect.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/IDialect.java index 8c60b851..9d993fb5 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/IDialect.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/IDialect.java @@ -35,8 +35,8 @@ public interface IDialect { return TableManager.getRealTable(table); } - default String getRealSchema(String schema) { - return TableManager.getRealSchema(schema); + default String getRealSchema(String schema, String table) { + return TableManager.getRealSchema(schema, table); } String forHint(String hintString); diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/impl/CommonsDialectImpl.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/impl/CommonsDialectImpl.java index 8f078f98..4431ec49 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/impl/CommonsDialectImpl.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/impl/CommonsDialectImpl.java @@ -96,12 +96,13 @@ public class CommonsDialectImpl implements IDialect { index++; } + String table = getRealTable(tableName); StringBuilder sql = new StringBuilder(); sql.append(INSERT_INTO); if (StringUtil.isNotBlank(schema)) { - sql.append(wrap(getRealSchema(schema))).append(REFERENCE); + sql.append(wrap(getRealSchema(schema, table))).append(REFERENCE); } - sql.append(wrap(getRealTable(tableName))); + sql.append(wrap(table)); sql.append(BRACKET_LEFT).append(fields).append(BRACKET_RIGHT); sql.append(VALUES).append(BRACKET_LEFT).append(paramsOrPlaceholder).append(BRACKET_RIGHT); return sql.toString(); @@ -131,13 +132,13 @@ public class CommonsDialectImpl implements IDialect { } } - + String table = getRealTable(tableName); StringBuilder sql = new StringBuilder(); sql.append(INSERT_INTO); if (StringUtil.isNotBlank(schema)) { - sql.append(wrap(getRealSchema(schema))).append(REFERENCE); + sql.append(wrap(getRealSchema(schema, table))).append(REFERENCE); } - sql.append(wrap(getRealTable(tableName))); + sql.append(wrap(table)); sql.append(BLANK).append(BRACKET_LEFT) .append(fields) .append(BRACKET_RIGHT).append(BLANK); @@ -148,12 +149,13 @@ public class CommonsDialectImpl implements IDialect { @Override public String forDeleteById(String schema, String tableName, String[] primaryKeys) { + String table = getRealTable(tableName); StringBuilder sql = new StringBuilder(); sql.append(DELETE_FROM); if (StringUtil.isNotBlank(schema)) { - sql.append(wrap(getRealSchema(schema))).append(REFERENCE); + sql.append(wrap(getRealSchema(schema, table))).append(REFERENCE); } - sql.append(wrap(getRealTable(tableName))); + sql.append(wrap(table)); sql.append(WHERE); for (int i = 0; i < primaryKeys.length; i++) { if (i > 0) { @@ -167,12 +169,14 @@ public class CommonsDialectImpl implements IDialect { @Override public String forDeleteBatchByIds(String schema, String tableName, String[] primaryKeys, Object[] ids) { + String table = getRealTable(tableName); StringBuilder sql = new StringBuilder(); sql.append(DELETE_FROM); if (StringUtil.isNotBlank(schema)) { - sql.append(wrap(getRealSchema(schema))).append(REFERENCE); + sql.append(wrap(getRealSchema(schema, table))).append(REFERENCE); } - sql.append(wrap(getRealTable(tableName))); + + sql.append(wrap(table)); sql.append(WHERE); //多主键的场景 @@ -210,17 +214,18 @@ public class CommonsDialectImpl implements IDialect { @Override public String forUpdateById(String schema, String tableName, Row row) { + String table = getRealTable(tableName); StringBuilder sql = new StringBuilder(); - Set modifyAttrs = RowCPI.getModifyAttrs(row); Map rawValueMap = RowCPI.getRawValueMap(row); String[] primaryKeys = RowCPI.obtainsPrimaryKeyStrings(row); sql.append(UPDATE); if (StringUtil.isNotBlank(schema)) { - sql.append(wrap(getRealSchema(schema))).append(REFERENCE); + sql.append(wrap(getRealSchema(schema, table))).append(REFERENCE); } - sql.append(wrap(getRealTable(tableName))).append(SET); + + sql.append(wrap(table)).append(SET); int index = 0; for (Map.Entry e : row.entrySet()) { String colName = e.getKey(); @@ -314,11 +319,12 @@ public class CommonsDialectImpl implements IDialect { @Override public String forSelectOneById(String schema, String tableName, String[] primaryKeys, Object[] primaryValues) { + String table = getRealTable(tableName); StringBuilder sql = new StringBuilder(SELECT_ALL_FROM); if (StringUtil.isNotBlank(schema)) { - sql.append(wrap(getRealSchema(schema))).append(REFERENCE); + sql.append(wrap(getRealSchema(schema, table))).append(REFERENCE); } - sql.append(wrap(getRealTable(tableName))).append(WHERE); + sql.append(wrap(table)).append(WHERE); for (int i = 0; i < primaryKeys.length; i++) { if (i > 0) { sql.append(AND); diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/impl/OracleDialect.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/impl/OracleDialect.java index 9289ca4e..517f75c0 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/impl/OracleDialect.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/dialect/impl/OracleDialect.java @@ -168,9 +168,10 @@ public class OracleDialect extends CommonsDialectImpl { StringBuilder sql = new StringBuilder(); sql.append(INSERT_ALL); + String table = getRealTable(tableName); String tableNameWrap = StringUtil.isNotBlank(schema) - ? wrap(getRealSchema(schema)) + REFERENCE + wrap(getRealTable(tableName)) - : wrap(getRealTable(tableName)); + ? wrap(getRealSchema(schema,table)) + REFERENCE + wrap(table) + : wrap(table); String questionStrings = SqlUtil.buildSqlParamPlaceholder(attrs.size()); for (int i = 0; i < rows.size(); i++) { diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryColumn.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryColumn.java index a99d8f79..87003866 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryColumn.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/query/QueryColumn.java @@ -977,7 +977,9 @@ public class QueryColumn implements CloneSupport, Conditional { public String toSql(IDialect dialect) { String sql; if (StringUtil.isNotBlank(schema)) { - sql = dialect.wrap(dialect.getRealSchema(schema)) + "." + dialect.wrap(dialect.getRealTable(name)) + WrapperUtil.buildAlias(alias, dialect); + String table = dialect.getRealTable(name); + sql = dialect.wrap(dialect.getRealSchema(schema, table)) + "." + dialect.wrap(table) + WrapperUtil.buildAlias(alias, dialect); } else { sql = dialect.wrap(dialect.getRealTable(name)) + WrapperUtil.buildAlias(alias, dialect); } diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/table/DynamicSchemaProcessor.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/table/DynamicSchemaProcessor.java index e6853c9b..157d5792 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/table/DynamicSchemaProcessor.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/table/DynamicSchemaProcessor.java @@ -17,6 +17,6 @@ package com.mybatisflex.core.table; public interface DynamicSchemaProcessor { - String process(String schema); + String process(String schema, String table); } diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/table/TableInfo.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/table/TableInfo.java index 2c732197..4379db9a 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/table/TableInfo.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/table/TableInfo.java @@ -143,7 +143,8 @@ public class TableInfo { public String getWrapSchemaAndTableName(IDialect dialect) { if (StringUtil.isNotBlank(schema)) { - return dialect.wrap(dialect.getRealSchema(schema)) + "." + dialect.wrap(dialect.getRealTable(tableName)); + String table = dialect.getRealTable(tableName); + return dialect.wrap(dialect.getRealSchema(schema, table)) + "." + dialect.wrap(table); } else { return dialect.wrap(dialect.getRealTable(tableName)); } diff --git a/mybatis-flex-core/src/main/java/com/mybatisflex/core/table/TableManager.java b/mybatis-flex-core/src/main/java/com/mybatisflex/core/table/TableManager.java index ab41fe03..49271f25 100644 --- a/mybatis-flex-core/src/main/java/com/mybatisflex/core/table/TableManager.java +++ b/mybatis-flex-core/src/main/java/com/mybatisflex/core/table/TableManager.java @@ -97,7 +97,7 @@ public class TableManager { } - public static String getRealSchema(String schema) { + public static String getRealSchema(String schema, String table) { Map mapping = schemaMappingTL.get(); if (mapping != null) { String dynamicSchema = mapping.get(schema); @@ -110,7 +110,7 @@ public class TableManager { return schema; } - String dynamicSchema = dynamicSchemaProcessor.process(schema); + String dynamicSchema = dynamicSchemaProcessor.process(schema, table); return StringUtil.isNotBlank(dynamicSchema) ? dynamicSchema : schema; }