refactor: optimize TableManager.java

This commit is contained in:
开源海哥 2023-07-30 10:32:46 +08:00
parent f3551127a2
commit e2b347a28c
3 changed files with 58 additions and 36 deletions

View File

@ -26,7 +26,15 @@ TableManager.setDynamicTableProcessor(new DynamicTableProcessor() {
在某些情况下,我们临时修改映射关系,而非通过 `DynamicTableProcessor.process` 方法获取,可以通过如下配置: 在某些情况下,我们临时修改映射关系,而非通过 `DynamicTableProcessor.process` 方法获取,可以通过如下配置:
```java ```java
TableManager.setHintTableMapping("tb_account", "tb_account_01") try{
TableManager.setHintTableMapping("tb_account", "tb_account_01")
//这里写您的业务逻辑
}finally{
TableManager.clear()
}
``` ```
那么此时,当前线程不再通过 `DynamicTableProcessor` 去获取。 那么此时,当前线程不再通过 `DynamicTableProcessor` 去获取。
@ -57,13 +65,13 @@ public class MyConfiguration {
DynamicTableProcessor processor = new ....; DynamicTableProcessor processor = new ....;
return processor; return processor;
} }
@Bean @Bean
public DynamicSchemaProcessor dynamicSchemaProcessor(){ public DynamicSchemaProcessor dynamicSchemaProcessor(){
DynamicSchemaProcessor processor = new ....; DynamicSchemaProcessor processor = new ....;
return processor; return processor;
} }
} }
``` ```

View File

@ -22,6 +22,9 @@ import com.mybatisflex.core.table.TableManager;
import java.util.List; import java.util.List;
/**
* @author michael
*/
public interface IDialect { public interface IDialect {
String wrap(String keyword); String wrap(String keyword);

View File

@ -20,6 +20,9 @@ import com.mybatisflex.core.util.StringUtil;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
/**
* @author michael
*/
public class TableManager { public class TableManager {
private TableManager() { private TableManager() {
@ -28,8 +31,8 @@ public class TableManager {
private static DynamicTableProcessor dynamicTableProcessor; private static DynamicTableProcessor dynamicTableProcessor;
private static DynamicSchemaProcessor dynamicSchemaProcessor; private static DynamicSchemaProcessor dynamicSchemaProcessor;
private static final ThreadLocal<Map<String, String>> tableNameMappingTL = ThreadLocal.withInitial(HashMap::new); private static final ThreadLocal<Map<String, String>> tableNameMappingTL = new ThreadLocal<>();
private static final ThreadLocal<Map<String, String>> schemaMappingTL = ThreadLocal.withInitial(HashMap::new); private static final ThreadLocal<Map<String, String>> schemaMappingTL = new ThreadLocal<>();
public static DynamicTableProcessor getDynamicTableProcessor() { public static DynamicTableProcessor getDynamicTableProcessor() {
@ -49,7 +52,12 @@ public class TableManager {
} }
public static void setHintTableMapping(String tableName, String mappingTable) { public static void setHintTableMapping(String tableName, String mappingTable) {
tableNameMappingTL.get().put(tableName, mappingTable); Map<String, String> hintTables = tableNameMappingTL.get();
if (hintTables == null) {
hintTables = new HashMap<>();
tableNameMappingTL.set(hintTables);
}
hintTables.put(tableName, mappingTable);
} }
public static String getHintTableMapping(String tableName) { public static String getHintTableMapping(String tableName) {
@ -57,7 +65,12 @@ public class TableManager {
} }
public static void setHintSchemaMapping(String schema, String mappingSchema) { public static void setHintSchemaMapping(String schema, String mappingSchema) {
schemaMappingTL.get().put(schema, mappingSchema); Map<String, String> hintTables = schemaMappingTL.get();
if (hintTables == null) {
hintTables = new HashMap<>();
schemaMappingTL.set(hintTables);
}
hintTables.put(schema, mappingSchema);
} }
public static String getHintSchemaMapping(String schema) { public static String getHintSchemaMapping(String schema) {
@ -66,47 +79,45 @@ public class TableManager {
public static String getRealTable(String tableName) { public static String getRealTable(String tableName) {
Map<String, String> mapping = tableNameMappingTL.get();
if (mapping != null) {
String dynamicTableName = mapping.get(tableName);
if (StringUtil.isNotBlank(dynamicTableName)) {
return dynamicTableName;
}
}
if (dynamicTableProcessor == null) { if (dynamicTableProcessor == null) {
return tableName; return tableName;
} }
Map<String, String> mapping = tableNameMappingTL.get(); String dynamicTableName = dynamicTableProcessor.process(tableName);
return StringUtil.isNotBlank(dynamicTableName) ? dynamicTableName : tableName;
String dynamicTableName = mapping.get(tableName);
if (StringUtil.isNotBlank(dynamicTableName)) {
return dynamicTableName;
}
dynamicTableName = dynamicTableProcessor.process(tableName);
mapping.put(tableName, dynamicTableName);
return dynamicTableName;
} }
public static String getRealSchema(String schema) { public static String getRealSchema(String schema) {
Map<String, String> mapping = schemaMappingTL.get();
if (mapping != null) {
String dynamicSchema = mapping.get(schema);
if (StringUtil.isNotBlank(dynamicSchema)) {
return dynamicSchema;
}
}
if (dynamicSchemaProcessor == null) { if (dynamicSchemaProcessor == null) {
return schema; return schema;
} }
Map<String, String> mapping = schemaMappingTL.get(); String dynamicSchema = dynamicSchemaProcessor.process(schema);
String dynamiSchema = mapping.get(schema); return StringUtil.isNotBlank(dynamicSchema) ? dynamicSchema : schema;
if (StringUtil.isNotBlank(dynamiSchema)) {
return dynamiSchema;
}
dynamiSchema = dynamicSchemaProcessor.process(schema);
mapping.put(schema, dynamiSchema);
return dynamiSchema;
} }
// public static void clear() { public static void clear() {
// if (dynamicTableProcessor != null) { tableNameMappingTL.remove();
// tableNameMappingTL.remove(); schemaMappingTL.remove();
// } }
// if (dynamicSchemaProcessor != null) {
// schemaMappingTL.remove();
// }
// }
} }