参考于 :参考链接(对于传值处进行修改,解决有时无法传值表名的问题)
配置类
@Configuration
public class MybatisPlusConfig {
/***
* 使用ThreadLocal将表名传进来
*/
public static ThreadLocal<String> myTableNameLocal = new ThreadLocal<>();
/**
* 分页插件
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
// 开启 count 的 join 优化,只针对 left join !!!
paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
// DynamicTableNameParser 表名解析器,动态解析表名,ITableNameHandler 表名处理。
DynamicTableNameParser dynamicTableNameParser = new DynamicTableNameParser();
dynamicTableNameParser.setTableNameHandlerMap(new HashMap<String, ITableNameHandler>(2) {{
//metaObject 元对象 ;sql 执行的SQL ;tableName 替换前表名
//这里put的key就是需要替换的原始表名,也就是实体类的表名
//这里的tableName就是我们定义的动态表名变量,
put("asset_add_loop_head", (metaObject, sql, tableName) -> {
// 此时返回值为要替换成的表名
return tableName+"_"+myTableNameLocal.get();
});
}});
paginationInterceptor.setSqlParserList(Collections.singletonList(dynamicTableNameParser));
return paginationInterceptor;
}
}
使用时
MybatisPlusConfig.myTableNameLocal.set(tabName);
如