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` 方法获取,可以通过如下配置:
```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;
}
}
```
```

View File

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

View File

@ -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<Map<String, String>> tableNameMappingTL = ThreadLocal.withInitial(HashMap::new);
private static final ThreadLocal<Map<String, String>> schemaMappingTL = ThreadLocal.withInitial(HashMap::new);
private static final ThreadLocal<Map<String, String>> tableNameMappingTL = new ThreadLocal<>();
private static final ThreadLocal<Map<String, String>> 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<String, String> 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<String, String> 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<String, String> mapping = tableNameMappingTL.get();
if (mapping != null) {
String dynamicTableName = mapping.get(tableName);
if (StringUtil.isNotBlank(dynamicTableName)) {
return dynamicTableName;
}
}
if (dynamicTableProcessor == null) {
return tableName;
}
Map<String, String> 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<String, String> mapping = schemaMappingTL.get();
if (mapping != null) {
String dynamicSchema = mapping.get(schema);
if (StringUtil.isNotBlank(dynamicSchema)) {
return dynamicSchema;
}
}
if (dynamicSchemaProcessor == null) {
return schema;
}
Map<String, String> 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();
}
}