فهرست منبع

fix gitee issues/3826 优化动态表名处理器

hubin 3 سال پیش
والد
کامیت
115780793c

+ 17 - 5
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/inner/DynamicTableNameInnerInterceptor.java

@@ -16,12 +16,14 @@
 package com.baomidou.mybatisplus.extension.plugins.inner;
 
 import com.baomidou.mybatisplus.core.plugins.InterceptorIgnoreHelper;
+import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils;
 import com.baomidou.mybatisplus.core.toolkit.PluginUtils;
 import com.baomidou.mybatisplus.core.toolkit.TableNameParser;
 import com.baomidou.mybatisplus.extension.plugins.handler.TableNameHandler;
 import lombok.AllArgsConstructor;
-import lombok.Data;
+import lombok.Getter;
 import lombok.NoArgsConstructor;
+import lombok.Setter;
 import org.apache.ibatis.executor.Executor;
 import org.apache.ibatis.executor.statement.StatementHandler;
 import org.apache.ibatis.mapping.BoundSql;
@@ -42,13 +44,20 @@ import java.util.Map;
  * @author jobob
  * @since 3.4.0
  */
-@Data
+@Getter
+@Setter
 @NoArgsConstructor
 @AllArgsConstructor
 @SuppressWarnings({"rawtypes"})
 public class DynamicTableNameInnerInterceptor implements InnerInterceptor {
 
+    /**
+     * 该方法废弃,避免多表使用统一策略多次注入,切换使用 TableNameHandler 自行判断表面处理逻辑
+     * 该注入方法后续版本会移除
+     */
+    @Deprecated
     private Map<String, TableNameHandler> tableNameHandlerMap;
+    private TableNameHandler tableNameHandler;
 
     @Override
     public void beforeQuery(Executor executor, MappedStatement ms, Object parameter, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql) throws SQLException {
@@ -80,9 +89,12 @@ public class DynamicTableNameInnerInterceptor implements InnerInterceptor {
             if (start != last) {
                 builder.append(sql, last, start);
                 String value = name.getValue();
-                TableNameHandler handler = tableNameHandlerMap.get(value);
-                if (handler != null) {
-                    builder.append(handler.dynamicTableName(sql, value));
+                if (null == tableNameHandler) {
+                    tableNameHandler = tableNameHandlerMap.get(value);
+                }
+                ExceptionUtils.throwMpe(null == tableNameHandler,"Please implement TableNameHandler processing logic");
+                if (null != tableNameHandler) {
+                    builder.append(tableNameHandler.dynamicTableName(sql, value));
                 } else {
                     builder.append(value);
                 }