添加动态修改表名拦截器
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.annotation.DbType;
|
||||||
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
|
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.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
|
||||||
import com.njcn.db.mybatisplus.handler.AutoFillValueHandler;
|
import com.njcn.db.mybatisplus.handler.AutoFillValueHandler;
|
||||||
import com.njcn.db.mybatisplus.handler.BatchInjector;
|
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.Bean;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
import org.springframework.core.annotation.Order;
|
import org.springframework.core.annotation.Order;
|
||||||
|
|
||||||
|
import java.util.HashMap;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @author hongawen
|
* @author hongawen
|
||||||
* @version 1.0.0
|
* @version 1.0.0
|
||||||
@@ -24,6 +30,14 @@ public class MybatisConfig {
|
|||||||
public MybatisPlusInterceptor mybatisPlusInterceptor() {
|
public MybatisPlusInterceptor mybatisPlusInterceptor() {
|
||||||
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
|
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
|
||||||
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
|
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;
|
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