@Configuration
public class MybatisConfiguration {
@Bean
public DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor() {
// 准备一个Map,用于存储TableNameHandler
//Map
// 存入一个TableNameHandler,用来替换points_board表名称
// 替换方式,就是从TableInfoContext中读取保存好的动态表名
// Map
// map.put("points_board", (sql, tableName) -> TableInfoContext.getInfo() == null ? tableName : TableInfoContext.getInfo());
// return new DynamicTableNameInnerInterceptor(map);
//上面是官方的报错,用下豆包的
TableNameHandler tableNameHandler = (sql, tableName) -> {
String dynamicTableName = TableInfoContext.getInfo();
return dynamicTableName != null ? dynamicTableName : tableName;
};
// 创建拦截器并添加表名处理器(3.5+版本方式)
DynamicTableNameInnerInterceptor interceptor = new DynamicTableNameInnerInterceptor();
// 为points_board表添加处理器
interceptor.setTableNameHandler(tableNameHandler);
return interceptor;
}
}上面对应的插件配置类,用于配置修改表名
对应的拦截器插件注入
@Bean
@ConditionalOnMissingBean
public MybatisPlusInterceptor mybatisPlusInterceptor(@Autowired(required = false) DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor) {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
//该拦截器必须在分页拦截器的前面 ,注入
if(dynamicTableNameInnerInterceptor!=null){
interceptor.addInnerInterceptor(dynamicTableNameInnerInterceptor);
}
PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.MYSQL);
paginationInnerInterceptor.setMaxLimit(200L);
interceptor.addInnerInterceptor(paginationInnerInterceptor);
interceptor.addInnerInterceptor(new MyBatisAutoFillInterceptor());
return interceptor;
}