添加动态修改表名拦截器

This commit is contained in:
2024-12-25 10:09:15 +08:00
parent cb3b8fd01f
commit ce49355e47
2 changed files with 49 additions and 0 deletions

View File

@@ -2,13 +2,19 @@ package com.njcn.db.mybatisplus.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.handler.TableNameHandler;
import com.baomidou.mybatisplus.extension.plugins.inner.DynamicTableNameInnerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import com.njcn.db.mybatisplus.handler.AutoFillValueHandler;
import com.njcn.db.mybatisplus.handler.BatchInjector;
import com.njcn.db.mybatisplus.handler.DynamicTableNameHandler;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.annotation.Order;
import java.util.HashMap;
import java.util.Map;
/**
* @author hongawen
* @version 1.0.0
@@ -24,6 +30,14 @@ public class MybatisConfig {
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor = new DynamicTableNameInnerInterceptor();
// 将TableNameHandler的实现类设置到拦截器中
Map<String, TableNameHandler> map = new HashMap<>();
map.put("ad_harmonic_xx",new DynamicTableNameHandler());
dynamicTableNameInnerInterceptor.setTableNameHandlerMap(map);
interceptor.addInnerInterceptor(dynamicTableNameInnerInterceptor);
return interceptor;
}

View File

@@ -0,0 +1,35 @@
package com.njcn.db.mybatisplus.handler;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.baomidou.mybatisplus.extension.plugins.handler.TableNameHandler;
/**
* 动态修改表标题后再执行sql
*/
public class DynamicTableNameHandler implements TableNameHandler {
// 使用ThreadLocal进行线程隔离存储需要替换的表名
private static final ThreadLocal<String> tableNameTL = ThreadLocal.withInitial(() -> "");
@Override
public String dynamicTableName(String sql, String tableName) {
System.out.println(tableName+"进入动态修复表明拦截器。。。。。。。。");
if("ad_harmonic_xx".equals(tableName)) {
// 从ThreadLocal中获取动态表名
String dynamicTableName = tableNameTL.get();
// 如果动态表名不为空,则返回动态表名;否则返回原始表名
return StringUtils.isNotBlank(dynamicTableName) ? dynamicTableName : tableName;
}else {
return tableName;
}
}
// 设置动态表名的方法
public static void setTableName(String tableName) {
tableNameTL.set(tableName);
}
// 清除动态表名的方法
public static void remove() {
tableNameTL.remove();
}
}