Sfoglia il codice sorgente

fix: sql not return after change

yuxiaobin 6 anni fa
parent
commit
eb4d0e2ca7

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

@@ -69,18 +69,18 @@ public abstract class AbstractSqlParserHandler {
                 statementHandler = metaObject.hasGetter("delegate") ? (StatementHandler) metaObject.getValue("delegate") : statementHandler;
                 if (!(statementHandler instanceof CallableStatementHandler)) {
                     // 标记是否修改过 SQL
-                    int flag = 0;
+                    boolean sqlChangedFlag = false;
                     String originalSql = (String) metaObject.getValue(PluginUtils.DELEGATE_BOUNDSQL_SQL);
                     for (ISqlParser sqlParser : this.sqlParserList) {
                         if (sqlParser.doFilter(metaObject, originalSql)) {
                             SqlInfo sqlInfo = sqlParser.parser(metaObject, originalSql);
                             if (null != sqlInfo) {
                                 originalSql = sqlInfo.getSql();
-                                ++flag;
+                                sqlChangedFlag = true;
                             }
                         }
                     }
-                    if (flag >= 1) {
+                    if (sqlChangedFlag) {
                         metaObject.setValue(PluginUtils.DELEGATE_BOUNDSQL_SQL, originalSql);
                     }
                 }

+ 13 - 9
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/parsers/DynamicTableNameParser.java

@@ -15,17 +15,19 @@
  */
 package com.baomidou.mybatisplus.extension.parsers;
 
+import java.util.Collection;
+import java.util.Map;
+
+import org.apache.ibatis.reflection.MetaObject;
+
 import com.baomidou.mybatisplus.core.parser.ISqlParser;
 import com.baomidou.mybatisplus.core.parser.SqlInfo;
 import com.baomidou.mybatisplus.core.toolkit.Assert;
 import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.TableNameParser;
+
 import lombok.Data;
 import lombok.experimental.Accessors;
-import org.apache.ibatis.reflection.MetaObject;
-
-import java.util.Collection;
-import java.util.Map;
 
 /**
  * 动态表名 SQL 解析器
@@ -36,6 +38,7 @@ import java.util.Map;
 @Data
 @Accessors(chain = true)
 public class DynamicTableNameParser implements ISqlParser {
+
     private Map<String, ITableNameHandler> tableNameHandlerMap;
 
     @Override
@@ -44,16 +47,17 @@ public class DynamicTableNameParser implements ISqlParser {
         if (allowProcess(metaObject)) {
             Collection<String> tables = new TableNameParser(sql).tables();
             if (CollectionUtils.isNotEmpty(tables)) {
-                int flag = 0;
+                boolean sqlParsed = false;
+                String parsedSql = sql;
                 for (final String table : tables) {
                     ITableNameHandler tableNameHandler = tableNameHandlerMap.get(table);
                     if (null != tableNameHandler) {
-                        tableNameHandler.process(metaObject, sql, table);
-                        ++flag;
+                        parsedSql = tableNameHandler.process(metaObject, parsedSql, table);
+                        sqlParsed = true;
                     }
                 }
-                if (flag > 0) {
-                    return SqlInfo.newInstance().setSql(sql);
+                if (sqlParsed) {
+                    return SqlInfo.newInstance().setSql(parsedSql);
                 }
             }
         }

+ 3 - 2
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/parsers/ITableNameHandler.java

@@ -33,11 +33,12 @@ public interface ITableNameHandler {
      * @param tableName  表名
      * @return
      */
-    default void process(MetaObject metaObject, String sql, String tableName) {
+    default String process(MetaObject metaObject, String sql, String tableName) {
         String dynamicTableName = dynamicTableName(metaObject, sql, tableName);
         if (null != dynamicTableName && !dynamicTableName.equalsIgnoreCase(tableName)) {
-            sql.replaceAll(tableName, dynamicTableName);
+            return sql.replaceAll(tableName, dynamicTableName);
         }
+        return sql;
     }
 
     /**