Appearance
动态表名
动态表名指的是用户在对数据进行 增删改查 的时候,传入表名能够根据上下文信息(比如用户信息、应用信息)等,动态修改当前的表。
使用场景
- 1、多租户,不同的租户拥有不同的表
- 2、分库分表,减轻数据压力
如何使用
在应用启动时,通过调用 TableManager.setDynamicTableProcessor()
配置动态表名处理器 DynamicTableProcessor
即可,如下代码所示:
java
TableManager.setDynamicTableProcessor(new DynamicTableProcessor() {
@Override
public String process(String tableName) {
return tableName + "_01";
}
});
通过以上配置后,我们对数据库进行增删改查,MyBatis-Flex 都会调用 DynamicTableProcessor.process
方法,获得最新的表名进行 SQL 构建操作。因此,我们应该在 process
方法中, 判断当前的上下文(用户信息、应用信息)等,动态的返回对应的表名。
在某些情况下,我们临时修改映射关系,而非通过 DynamicTableProcessor.process
方法获取,可以通过如下配置:
java
try{
TableManager.setHintTableMapping("tb_account", "tb_account_01");
//这里写您的业务逻辑
} finally {
TableManager.clear();
}
那么此时,当前线程不再通过 DynamicTableProcessor
去获取。
动态 Schema
动态 Schema 和动态表名类似,通过 TableManager.setDynamicSchemaProcessor()
配置动态 Schema 处理器 DynamicSchemaProcessor
即可,如下代码所示:
java
TableManager.setDynamicSchemaProcessor(new DynamicSchemaProcessor() {
@Override
public String process(String schema, String table) {
return schema + "_01";
}
});
动态 Schema 的配置,只对使用了注解 @Table(schema="xxx")
的 Entity 有效。
SpringBoot 支持
在 SpringBoot 项目下,直接通过 @Configuration
即可使用:
java
@Configuration
public class MyConfiguration {
@Bean
public DynamicTableProcessor dynamicTableProcessor(){
DynamicTableProcessor processor = new ....;
return processor;
}
@Bean
public DynamicSchemaProcessor dynamicSchemaProcessor(){
DynamicSchemaProcessor processor = new ....;
return processor;
}
}