业务背景:替换执行sql的表名为指定数据库+表名
import com.baomidou.mybatisplus.extension.parsers.DynamicTableNameParser;
import com.baomidou.mybatisplus.extension.parsers.ITableNameHandler;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.*;
/*
mybatisplus拦截器 拦截所有sql,匹配配置文件中的表名,匹配成功则替换为库名+表名
*/
@Configuration
@ConfigurationProperties(prefix = "dynamic-table") //获取配置文件的属性
@MapperScan("")
public class MybatisPlusConfig {
private Map<String,String> tables; //dynamic-table.tables
public Map<String, String> getTables() {
return tables;
}
public void setTables(Map<String, String> tables) {
this.tables = tables;
}
@Bean
public PaginationInterceptor paginationInterceptor() {
Set<String> strings = tables.keySet();
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
DynamicTableNameParser dynamicTableNameParser = new DynamicTableNameParser();
dynamicTableNameParser.setTableNameHandlerMap(new HashMap<String, ITableNameHandler>(2) {{
strings.forEach(tableTitle->
put(tableTitle,(metaObject, sql, tableName) -> {
System.out.println("mybatisplus拦截器:"+
tableName+"转换成----->"+tables.get(tableName)+ "." + tableName);
return tables.get(tableName)+ "." + tableName;
}));
}});
paginationInterceptor.setSqlParserList(Collections.singletonList(dynamicTableNameParser));
return paginationInterceptor;
}
}
内置ITableNameHandler源码:
yml文件中的配置:
dynamic-table:
tables:
table_name01: db_name01
table_name02: db_name02