添加动态修改表名拦截器
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user