diff --git a/docs/zh/core/dynamic-table.md b/docs/zh/core/dynamic-table.md index e617877d..955b16d6 100644 --- a/docs/zh/core/dynamic-table.md +++ b/docs/zh/core/dynamic-table.md @@ -26,7 +26,15 @@ TableManager.setDynamicTableProcessor(new DynamicTableProcessor() { 在某些情况下,我们临时修改映射关系,而非通过 `DynamicTableProcessor.process` 方法获取,可以通过如下配置: ```java -TableManager.setHintTableMapping("tb_account", "tb_account_01") +try{ + TableManager.setHintTableMapping("tb_account", "tb_account_01") + + //这里写您的业务逻辑 + +}finally{ + TableManager.clear() +} + ``` 那么此时,当前线程不再通过 `DynamicTableProcessor` 去获取。 @@ -57,13 +65,13 @@ public class MyConfiguration { DynamicTableProcessor processor = new ....; return processor; } - - + + @Bean public DynamicSchemaProcessor dynamicSchemaProcessor(){ DynamicSchemaProcessor processor = new ....; return processor; } - + } -``` \ No newline at end of file +``` 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 d122038f..1403c4ee 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 @@ -22,6 +22,9 @@ import com.mybatisflex.core.table.TableManager; import java.util.List; +/** + * @author michael + */ public interface IDialect { String wrap(String keyword); 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 b0328564..ab41fe03 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 @@ -20,6 +20,9 @@ import com.mybatisflex.core.util.StringUtil; import java.util.HashMap; import java.util.Map; +/** + * @author michael + */ public class TableManager { private TableManager() { @@ -28,8 +31,8 @@ public class TableManager { private static DynamicTableProcessor dynamicTableProcessor; private static DynamicSchemaProcessor dynamicSchemaProcessor; - private static final ThreadLocal> tableNameMappingTL = ThreadLocal.withInitial(HashMap::new); - private static final ThreadLocal> schemaMappingTL = ThreadLocal.withInitial(HashMap::new); + private static final ThreadLocal> tableNameMappingTL = new ThreadLocal<>(); + private static final ThreadLocal> schemaMappingTL = new ThreadLocal<>(); public static DynamicTableProcessor getDynamicTableProcessor() { @@ -49,7 +52,12 @@ public class TableManager { } public static void setHintTableMapping(String tableName, String mappingTable) { - tableNameMappingTL.get().put(tableName, mappingTable); + Map hintTables = tableNameMappingTL.get(); + if (hintTables == null) { + hintTables = new HashMap<>(); + tableNameMappingTL.set(hintTables); + } + hintTables.put(tableName, mappingTable); } public static String getHintTableMapping(String tableName) { @@ -57,7 +65,12 @@ public class TableManager { } public static void setHintSchemaMapping(String schema, String mappingSchema) { - schemaMappingTL.get().put(schema, mappingSchema); + Map hintTables = schemaMappingTL.get(); + if (hintTables == null) { + hintTables = new HashMap<>(); + schemaMappingTL.set(hintTables); + } + hintTables.put(schema, mappingSchema); } public static String getHintSchemaMapping(String schema) { @@ -66,47 +79,45 @@ public class TableManager { public static String getRealTable(String tableName) { + + Map mapping = tableNameMappingTL.get(); + if (mapping != null) { + String dynamicTableName = mapping.get(tableName); + if (StringUtil.isNotBlank(dynamicTableName)) { + return dynamicTableName; + } + } + if (dynamicTableProcessor == null) { return tableName; } - Map mapping = tableNameMappingTL.get(); - - String dynamicTableName = mapping.get(tableName); - if (StringUtil.isNotBlank(dynamicTableName)) { - return dynamicTableName; - } - - dynamicTableName = dynamicTableProcessor.process(tableName); - mapping.put(tableName, dynamicTableName); - return dynamicTableName; + String dynamicTableName = dynamicTableProcessor.process(tableName); + return StringUtil.isNotBlank(dynamicTableName) ? dynamicTableName : tableName; } public static String getRealSchema(String schema) { + Map mapping = schemaMappingTL.get(); + if (mapping != null) { + String dynamicSchema = mapping.get(schema); + if (StringUtil.isNotBlank(dynamicSchema)) { + return dynamicSchema; + } + } + if (dynamicSchemaProcessor == null) { return schema; } - Map mapping = schemaMappingTL.get(); - String dynamiSchema = mapping.get(schema); - if (StringUtil.isNotBlank(dynamiSchema)) { - return dynamiSchema; - } - - dynamiSchema = dynamicSchemaProcessor.process(schema); - mapping.put(schema, dynamiSchema); - return dynamiSchema; + String dynamicSchema = dynamicSchemaProcessor.process(schema); + return StringUtil.isNotBlank(dynamicSchema) ? dynamicSchema : schema; } -// public static void clear() { -// if (dynamicTableProcessor != null) { -// tableNameMappingTL.remove(); -// } -// if (dynamicSchemaProcessor != null) { -// schemaMappingTL.remove(); -// } -// } + public static void clear() { + tableNameMappingTL.remove(); + schemaMappingTL.remove(); + } }