diff --git a/njcn-db/mybatis-plus/src/main/java/com/njcn/db/mybatisplus/config/MybatisConfig.java b/njcn-db/mybatis-plus/src/main/java/com/njcn/db/mybatisplus/config/MybatisConfig.java index bc2929b..33c1a12 100644 --- a/njcn-db/mybatis-plus/src/main/java/com/njcn/db/mybatisplus/config/MybatisConfig.java +++ b/njcn-db/mybatis-plus/src/main/java/com/njcn/db/mybatisplus/config/MybatisConfig.java @@ -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 map = new HashMap<>(); + map.put("ad_harmonic_xx",new DynamicTableNameHandler()); + dynamicTableNameInnerInterceptor.setTableNameHandlerMap(map); + interceptor.addInnerInterceptor(dynamicTableNameInnerInterceptor); + return interceptor; } diff --git a/njcn-db/mybatis-plus/src/main/java/com/njcn/db/mybatisplus/handler/DynamicTableNameHandler.java b/njcn-db/mybatis-plus/src/main/java/com/njcn/db/mybatisplus/handler/DynamicTableNameHandler.java new file mode 100644 index 0000000..0fc0ded --- /dev/null +++ b/njcn-db/mybatis-plus/src/main/java/com/njcn/db/mybatisplus/handler/DynamicTableNameHandler.java @@ -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 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(); + } +}