瀏覽代碼

ISqlParser 新增 doFilter 判断是否执行 SQL 解析 parser 方法

hubin 6 年之前
父節點
當前提交
0a302e9a5e

+ 13 - 0
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/parser/ISqlParser.java

@@ -34,4 +34,17 @@ public interface ISqlParser {
      */
     SqlInfo parser(MetaObject metaObject, String sql);
 
+    /**
+     * <p>
+     * 是否执行 SQL 解析 parser 方法
+     * </p>
+     *
+     * @param metaObject 元对象
+     * @param sql        SQL 语句
+     * @return SQL 信息
+     */
+    default boolean doFilter(MetaObject metaObject, String sql) {
+        // 默认 true 执行 SQL 解析, 可重写实现控制逻辑
+        return true;
+    }
 }

+ 13 - 9
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/handlers/AbstractSqlParserHandler.java

@@ -15,19 +15,21 @@
  */
 package com.baomidou.mybatisplus.extension.handlers;
 
+import java.util.List;
+
+import org.apache.ibatis.executor.statement.StatementHandler;
+import org.apache.ibatis.reflection.MetaObject;
+import org.apache.ibatis.reflection.SystemMetaObject;
+
 import com.baomidou.mybatisplus.core.parser.ISqlParser;
 import com.baomidou.mybatisplus.core.parser.ISqlParserFilter;
 import com.baomidou.mybatisplus.core.parser.SqlInfo;
 import com.baomidou.mybatisplus.core.parser.SqlParserHelper;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.PluginUtils;
+
 import lombok.Data;
 import lombok.experimental.Accessors;
-import org.apache.ibatis.executor.statement.StatementHandler;
-import org.apache.ibatis.reflection.MetaObject;
-import org.apache.ibatis.reflection.SystemMetaObject;
-
-import java.util.List;
 
 /**
  * SQL 解析处理器
@@ -63,10 +65,12 @@ public abstract class AbstractSqlParserHandler {
                 int flag = 0;
                 String originalSql = (String) metaObject.getValue(PluginUtils.DELEGATE_BOUNDSQL_SQL);
                 for (ISqlParser sqlParser : this.sqlParserList) {
-                    SqlInfo sqlInfo = sqlParser.parser(metaObject, originalSql);
-                    if (null != sqlInfo) {
-                        originalSql = sqlInfo.getSql();
-                        ++flag;
+                    if (sqlParser.doFilter(metaObject, originalSql)) {
+                        SqlInfo sqlInfo = sqlParser.parser(metaObject, originalSql);
+                        if (null != sqlInfo) {
+                            originalSql = sqlInfo.getSql();
+                            ++flag;
+                        }
                     }
                 }
                 if (flag >= 1) {