Bläddra i källkod

回滚动态脚本换行处理(增加缓存空节点).

https://github.com/baomidou/mybatis-plus/issues/6704
nieqiurong 2 månader sedan
förälder
incheckning
02750cd7ce

+ 6 - 4
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/MybatisXMLScriptBuilder.java

@@ -45,6 +45,7 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 import java.util.WeakHashMap;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
@@ -130,6 +131,8 @@ public class MybatisXMLScriptBuilder extends BaseBuilder {
 
     private static final Pattern PATTERN = Pattern.compile("^\\s+|\\s+$");
 
+    private static final Map<String, StaticTextSqlNode> CACHE_EMPTY_SQL_NODE = new ConcurrentHashMap<>();
+
     /**
      * 将前后空白符替换成空格
      *
@@ -149,12 +152,11 @@ public class MybatisXMLScriptBuilder extends BaseBuilder {
             XNode child = node.newXNode(children.item(i));
             if (child.getNode().getNodeType() == Node.CDATA_SECTION_NODE || child.getNode().getNodeType() == Node.TEXT_NODE) {
                 String text = cacheStr(child.getStringBody(""));
-                String trimText = text.trim();
-                if (trimText.isEmpty()) {
-                    contents.add(SPACE_SQL_NODE);
+                if (text.trim().isEmpty()) {
+                    StaticTextSqlNode staticTextSqlNode = CACHE_EMPTY_SQL_NODE.computeIfAbsent(text, StaticTextSqlNode::new);
+                    contents.add(staticTextSqlNode);
                     continue;
                 }
-                text = replaceLeadingAndTrailingWhitespace(text);
                 TextSqlNode textSqlNode = new TextSqlNode(text);
                 if (textSqlNode.isDynamic()) {
                     contents.add(textSqlNode);

+ 1 - 1
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/injector/AbstractMethod.java

@@ -442,7 +442,7 @@ public abstract class AbstractMethod implements Constants {
      * @since 3.5.3.2
      */
     public SqlSource createSqlSource(Configuration configuration, String script, Class<?> parameterType) {
-        return languageDriver.createSqlSource(configuration, script, parameterType);
+        return languageDriver.createSqlSource(configuration, SqlSourceBuilder.removeExtraWhitespaces(script), parameterType);
     }
 
 }

+ 2 - 0
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/MybatisXMLLanguageDriverTest.java

@@ -2,10 +2,12 @@ package com.baomidou.mybatisplus.core;
 
 import org.apache.ibatis.scripting.xmltags.XMLLanguageDriver;
 import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Disabled;
 import org.junit.jupiter.api.Test;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+@Disabled
 public class MybatisXMLLanguageDriverTest {
 
     private static final Logger LOGGER = LoggerFactory.getLogger(MybatisXMLLanguageDriver.class);