Guwan-smartSchool/shapelight-admin/src/main/java/net/shapelight/common/handler/CustomizeTableNameHandler.java

43 lines
1.4 KiB
Java
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package net.shapelight.common.handler;
import com.baomidou.mybatisplus.extension.plugins.handler.TableNameHandler;
import java.util.Arrays;
import java.util.List;
/**
* 按自定义字段参数,组成动态表名
*/
public class CustomizeTableNameHandler implements TableNameHandler {
//用于记录哪些表可以使用该月份动态表名处理器(即哪些表可以分表)
private List<String> tableNames;
//构造函数构造动态表名处理器的时候传递tableNames参数
public CustomizeTableNameHandler(String ...tableNames) {
this.tableNames = Arrays.asList(tableNames);
}
//每个请求线程维护一个分表字段数据避免多线程数据冲突。所以使用ThreadLocal
private static final ThreadLocal<String> CELL_DATA = new ThreadLocal<>();
//设置请求线程的month数据
public static void setData(String month) {
CELL_DATA.set(month);
}
//删除当前请求线程的month数据
public static void removeData() {
CELL_DATA.remove();
}
//动态表名接口实现方法
@Override
public String dynamicTableName(String sql, String tableName) {
if (this.tableNames.contains(tableName)){
return tableName + "_" + CELL_DATA.get(); //表名增加分表字段后缀
}else{
return tableName; //表名原样返回
}
}
}