当前使用版本(必填,否则不予处理)

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 。当分页插件先执行时是没有走动态表插件的。 解决办法就是动态修改表名的插件先放入拦截器,再放入分页插件,这样就可以先改表名称了。