mybatisplus动态查询根据时间分的表

public class DynamicTableNameOnBuHelper {

    private static final ThreadLocal> DYNAMIC_TABLE_DATA = new ThreadLocal<>();

    public static void setDynamicTableData(Map dynamicTableData) {
        DYNAMIC_TABLE_DATA.set(dynamicTableData);
    }

    public static void setDynamicTableData(LocalDateTime localDateTime) {
        DYNAMIC_TABLE_DATA.set(new HashMap() {
            {put("", localDateTime);}
        });
    }


    public static  T getRequestData(String param) {
        Map dataMap = getDynamicTableData();
        if (CollectionUtils.isNotEmpty(dataMap)) {
            return (T) dataMap.get(param);
        }
        return null;
    }

    public static Map 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 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 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();
    }

你可能感兴趣的:(java,开发语言)