spring:
datasource:
# 表名与数据库名映射关系,逗号分隔
modTables: yourtablename&yourdbname,tablename&dbname
public class RequestDataHelper {
/**
* 请求参数存取
*/
private static final ThreadLocal<String> REQUEST_DATA = new ThreadLocal<>();
/**
* 设置请求参数
*
* @param requestData 请求参数 String
*/
public static void setRequestData(String requestData) {
REQUEST_DATA.set(requestData);
}
/**
* 获取请求参数
*
* @param param 请求参数
* @return 请求参数 MAP 对象
*/
public static <T> T getRequestData(String param) {
String prefix = getRequestData();
if (null != prefix) {
return (T) prefix;
}
return null;
}
/**
* 获取请求参数
*
* @return 请求参数 MAP 对象
*/
public static String getRequestData() {
return REQUEST_DATA.get();
}
}
@Configuration
@MapperScan("com.bb56.mapper")
public class MybatisPlusConfig {
private static String modTables;
private static Map<String, String> tableMap = new HashMap<>(32);
@Value("${spring.datasource.modTables:null}")
public void setModTables(String modTables) {
MybatisPlusConfig.modTables = modTables;
}
//初始化时执行
@PostConstruct
public void init() throws Exception {
String[] split = modTables.split(",");
for (String s : split) {
String[] split1 = s.split("&");
if (split1.length < 2) {
throw new RuntimeException("分表配置错误");
}
MybatisPlusConfig.tableMap.put(split1[0], split1[1]);
}
}
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor = new DynamicTableNameInnerInterceptor();
dynamicTableNameInnerInterceptor.setTableNameHandler((sql, tableName) -> {
String prefix = tableMap.get(tableName);
if (prefix != null) {
// 获取参数方法
/*String prefix = RequestDataHelper.getRequestData();
if(prefix == null){
throw new RuntimeException("未设置分表配置");
}*/
return prefix + "." + tableName;
}
return tableName;
});
interceptor.addInnerInterceptor(dynamicTableNameInnerInterceptor);
// 3.4.3.2 作废该方式
// dynamicTableNameInnerInterceptor.setTableNameHandlerMap(map);
return interceptor;
}
}
implementation 'cn.hutool:hutool-all:5.7.10'
implementation 'com.baomidou:mybatis-plus-boot-starter:3.5.1'
implementation 'com.baomidou:mybatis-plus-extension:3.5.1'