Selaa lähdekoodia

调整动态表解析(支持重写).

nieqiurong 1 kuukausi sitten
vanhempi
commit
a09bddd5c2

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

@@ -16,12 +16,10 @@
 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.Getter;
-import lombok.NoArgsConstructor;
 import lombok.Setter;
 import org.apache.ibatis.executor.Executor;
 import org.apache.ibatis.executor.statement.StatementHandler;
@@ -44,14 +42,28 @@ import java.util.List;
  */
 @Getter
 @Setter
-@NoArgsConstructor
 @SuppressWarnings({"rawtypes"})
 public class DynamicTableNameInnerInterceptor implements InnerInterceptor {
+
+    /**
+     * 回调处理
+     */
     private Runnable hook;
+
     /**
-     * 表名处理器,是否处理表名的情况都在该处理器中自行判断
+     * 表名处理器,是否 处理表名的情况都在该处理器中自行判断
      */
-    private TableNameHandler tableNameHandler;
+    private TableNameHandler tableNameHandler = (sql, tableName) -> sql;
+
+    /**
+     * 默认构建
+     *
+     * @see #DynamicTableNameInnerInterceptor(TableNameHandler)
+     * @deprecated 3.5.11
+     */
+    @Deprecated
+    public DynamicTableNameInnerInterceptor() {
+    }
 
     public DynamicTableNameInnerInterceptor(TableNameHandler tableNameHandler) {
         this.tableNameHandler = tableNameHandler;
@@ -79,7 +91,23 @@ public class DynamicTableNameInnerInterceptor implements InnerInterceptor {
     }
 
     public String changeTable(String sql) {
-        ExceptionUtils.throwMpe(null == tableNameHandler, "Please implement TableNameHandler processing logic");
+        try {
+            return processTableName(sql);
+        } finally {
+            if (hook != null) {
+                hook.run();
+            }
+        }
+    }
+
+    /**
+     * 处理表名解析替换
+     *
+     * @param sql 原始sql
+     * @return 处理完的sql
+     * @since 3.5.11
+     */
+    protected String processTableName(String sql) {
         TableNameParser parser = new TableNameParser(sql);
         List<TableNameParser.SqlToken> names = new ArrayList<>();
         parser.accept(names::add);
@@ -96,9 +124,7 @@ public class DynamicTableNameInnerInterceptor implements InnerInterceptor {
         if (last != sql.length()) {
             builder.append(sql.substring(last));
         }
-        if (hook != null) {
-            hook.run();
-        }
         return builder.toString();
     }
+
 }