mybatisplus动态查询根据时间分的表
mybatisplus动态查询根据时间分的表
·
public class DynamicTableNameOnBuHelper {
private static final ThreadLocal<Map<String, LocalDateTime>> DYNAMIC_TABLE_DATA = new ThreadLocal<>();
public static void setDynamicTableData(Map<String, LocalDateTime> dynamicTableData) {
DYNAMIC_TABLE_DATA.set(dynamicTableData);
}
public static void setDynamicTableData(LocalDateTime localDateTime) {
DYNAMIC_TABLE_DATA.set(new HashMap<String, LocalDateTime>() {
{put("", localDateTime);}
});
}
public static <T> T getRequestData(String param) {
Map<String, LocalDateTime> dataMap = getDynamicTableData();
if (CollectionUtils.isNotEmpty(dataMap)) {
return (T) dataMap.get(param);
}
return null;
}
public static Map<String, LocalDateTime> getDynamicTableData() {
return DYNAMIC_TABLE_DATA.get();
}
public static void clear() {
DYNAMIC_TABLE_DATA.remove();
}
}
@Configuration
public class MybatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor = new DynamicTableNameInnerInterceptor();
TableNameHandler tableNameHandler = (sql, tableName) -> {
try {
Map<String, LocalDateTime> tableData = DynamicTableNameOnTimeHelper.getDynamicTableData();
if (tableData == null) {
return tableName;
}
LocalDateTime tableNameTime = null;
if (tableData.containsKey(tableName)) {
tableNameTime = tableData.get(tableName);
}
else if (tableData.size() >= 1) {
tableNameTime = tableData.get("");
}
if (tableNameTime == null) {
return tableName;
}
String timeStr = tableNameTime.format(DateTimeFormatter.ofPattern("yyyy_MM"));
return tableName + "_" +timeStr;
}
finally {
DynamicTableNameOnTimeHelper.clear();
}
};
Map<String, TableNameHandler> tableNameHandlerMap = Maps.newHashMap();
tableNameHandlerMap.put("douyin_live", tableNameHandler);
dynamicTableNameInnerInterceptor.setTableNameHandlerMap(tableNameHandlerMap);
interceptor.addInnerInterceptor(dynamicTableNameInnerInterceptor);
// 3.4.3.2 作废该方式
// dynamicTableNameInnerInterceptor.setTableNameHandlerMap(map);
return interceptor;
}
测试一下:
@GetMapping("/info")
public BaseResponse<?> info() {
DynamicTableNameOnTimeHelper.setDynamicTableData(LocalDateTime.now());
Entity entity = mapper.selectById(1);
System.err.println(entity);
// 自己去观察打印 SQL 目前随机访问 user_2018 user_2019 表
for (int i = 0; i < 6; i++) {
}
return BaseResponse.success();
}
魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。
更多推荐

所有评论(0)