github地址https://github.com/heng1234/mybatis_plus
基于https://blog.csdn.net/qq_39313596/article/details/100943090文章
需求如果多张表比如说 user user_a user_b 里面的字段一样的表名不一样需求需要动态表名替换查询
那么sql解析器就祈祷作用了
在MybatisPlusConfig加入sql解析器
public static ThreadLocal<String> myTableName = new ThreadLocal<>();
/**
* 分页插件
* @return
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
/*动态表名*/
List<ISqlParser> sqlParserList = new ArrayList<>();
DynamicTableNameParser dynamicTableNameParser = new DynamicTableNameParser();
Map<String, ITableNameHandler> tableNameHandlerMap = new HashMap<>();
//User是数据库表名
tableNameHandlerMap.put("User", new ITableNameHandler() {
@Override
public String dynamicTableName(MetaObject metaObject, String sql, String tableName) {
return myTableName.get();//返回null不会替换 注意 多租户过滤会将它一块过滤不会替换@SqlParser(filter=true) 可不会替换
}
});
dynamicTableNameParser.setTableNameHandlerMap(tableNameHandlerMap);
sqlParserList.add(dynamicTableNameParser);
paginationInterceptor.setSqlParserList(sqlParserList);
return paginationInterceptor;
}
测试
/**
* 查询所有user
*/
@Test
public void testSelect() {
MybatisPlusConfig.myTableName.set("user_2019");
System.out.println(("----- selectAll method test ------"));
List<User> userList = userMapper.selectList(null);
// Assert.assertEquals(5, userList.size());
userList.forEach(System.out::println);
}
执行sql
Consume Time:171 ms 2019-09-18 22:20:15
Execute SQL:SELECT id,name,age,email,manager_id,created_time,update_time,version FROM user_2019 WHERE deleted=0
注意
返回null不会替换 注意 多租户过滤会将它一块过滤不会替换@SqlParser(filter=true) 可不会替换