From 24338207d1f454825a563af9195358fa4dc135c9 Mon Sep 17 00:00:00 2001 From: nieqiurong Date: Sat, 22 Feb 2025 22:24:47 +0800 Subject: [PATCH] Share blank nodes --- .../apache/ibatis/scripting/xmltags/XMLScriptBuilder.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/org/apache/ibatis/scripting/xmltags/XMLScriptBuilder.java b/src/main/java/org/apache/ibatis/scripting/xmltags/XMLScriptBuilder.java index e3f1131abde..df4ad636839 100644 --- a/src/main/java/org/apache/ibatis/scripting/xmltags/XMLScriptBuilder.java +++ b/src/main/java/org/apache/ibatis/scripting/xmltags/XMLScriptBuilder.java @@ -19,6 +19,7 @@ import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import org.apache.ibatis.builder.BaseBuilder; import org.apache.ibatis.builder.BuilderException; @@ -38,6 +39,7 @@ public class XMLScriptBuilder extends BaseBuilder { private boolean isDynamic; private final Class parameterType; private final Map nodeHandlerMap = new HashMap<>(); + private final static Map EMPTY_TEXT_NODE = new ConcurrentHashMap<>(); public XMLScriptBuilder(Configuration configuration, XNode context) { this(configuration, context, null); @@ -80,6 +82,11 @@ protected MixedSqlNode parseDynamicTags(XNode node) { XNode child = node.newXNode(children.item(i)); if (child.getNode().getNodeType() == Node.CDATA_SECTION_NODE || child.getNode().getNodeType() == Node.TEXT_NODE) { String data = child.getStringBody(""); + if (data.trim().isEmpty()) { + StaticTextSqlNode staticTextSqlNode = EMPTY_TEXT_NODE.computeIfAbsent(data, StaticTextSqlNode::new); + contents.add(staticTextSqlNode); + continue; + } TextSqlNode textSqlNode = new TextSqlNode(data); if (textSqlNode.isDynamic()) { contents.add(textSqlNode);