当前使用版本(必填,否则不予处理)
3.4.2
该问题是如何引起的?(确定最新版也有问题再提!!!)
public class SchemaTableNameHandler implements TableNameHandler {
@Override
public String dynamicTableName(String sql, String tableName) {
Client client = SecurityContextUtils.getClientInfo();
tableName = tableName.replaceFirst("public.","");
if(client == null)
return tableName;
return client.getClientId() +"." + tableName;
}
}
@Bean
public MybatisPlusInterceptor paginationInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
SchemaTableNameHandler schemaTableNameHandler = new SchemaTableNameHandler();
DynamicTableNameInnerInterceptor dynamicTableNameInnerInterceptor = new DynamicTableNameInnerInterceptor();
dynamicTableNameInnerInterceptor.setTableNameHandlerMap(new HashMap() {{
put("t_alarm", schemaTableNameHandler);
put("t_fence", schemaTableNameHandler);
put("t_group", schemaTableNameHandler);
put("t_trackable", schemaTableNameHandler);
put("r_trackable_fence", schemaTableNameHandler);
put("r_trackable_group", schemaTableNameHandler);
put("r_trackable_tag", schemaTableNameHandler);
put("t_fence_history", schemaTableNameHandler);
put("t_alarm_type", schemaTableNameHandler);
put("r_inspection_bind", schemaTableNameHandler);
put("r_route_fence", schemaTableNameHandler);
put("r_schedule_bind", schemaTableNameHandler);
put("r_schedule_fence", schemaTableNameHandler);
put("t_attendance_notification", schemaTableNameHandler);
put("t_inspection", schemaTableNameHandler);
put("t_inspection_checkpoint", schemaTableNameHandler);
put("t_inspection_notification", schemaTableNameHandler);
put("r_inspection_route", schemaTableNameHandler);
put("t_inspection_task", schemaTableNameHandler);
put("t_mileage", schemaTableNameHandler);
put("t_position", schemaTableNameHandler);
put("t_route", schemaTableNameHandler);
put("t_schedule", schemaTableNameHandler);
put("t_schedule_rule", schemaTableNameHandler);
put("t_schedule_attendance", schemaTableNameHandler);
put("t_sensor_type", schemaTableNameHandler);
put("t_sensor_value", schemaTableNameHandler);
put("t_shift", schemaTableNameHandler);
put("t_special_event", schemaTableNameHandler);
put("t_timeoff_event", schemaTableNameHandler);
}});
interceptor.addInnerInterceptor(dynamicTableNameInnerInterceptor);
//向Mybatis过滤器链中添加分页拦截器
PaginationInnerInterceptor paginationInnerInterceptor = new PaginationInnerInterceptor(DbType.POSTGRE_SQL);
interceptor.addInnerInterceptor(paginationInnerInterceptor);
return interceptor;
}
重现步骤(如果有就写完整)
动态表名拦截器和分页插件一起使用的时候不起作用。
报错信息
没有错误信息。但是表名拦截器不会被触发。
Comment From: nishimoguima
请确认该配置类被spring管理,或者pg是否存在schema,如果有schema表名需要加上schema
Comment From: laorentouyjk
3.4.3.2 我也遇到这个问题了,定义了一个拦截器,定义一个 类实现 TableNameHandler 改写表名称,执行语句的时候只进TableNamehandler实现类,不进拦截器,当把TableNameHandler 实现类全部注释后,正常进入拦截器,试了试 最新版本也不行请问这两个是有冲突吗
Comment From: db117
我这边发现的情况是分页 count 时表没有改名称。
因为分页默认会先执行 count 。当分页插件先执行时是没有走动态表插件的。
解决办法就是动态修改表名的插件先放入拦截器,再放入分页插件,这样就可以先改表名称了。