19
19
import java .util .HashMap ;
20
20
import java .util .List ;
21
21
import java .util .Map ;
22
+ import java .util .concurrent .ConcurrentHashMap ;
22
23
23
24
import org .apache .ibatis .builder .BaseBuilder ;
24
25
import org .apache .ibatis .builder .BuilderException ;
@@ -38,6 +39,7 @@ public class XMLScriptBuilder extends BaseBuilder {
38
39
private boolean isDynamic ;
39
40
private final Class <?> parameterType ;
40
41
private final Map <String , NodeHandler > nodeHandlerMap = new HashMap <>();
42
+ private final static Map <String , StaticTextSqlNode > EMPTY_TEXT_NODE = new ConcurrentHashMap <>();
41
43
42
44
public XMLScriptBuilder (Configuration configuration , XNode context ) {
43
45
this (configuration , context , null );
@@ -80,6 +82,11 @@ protected MixedSqlNode parseDynamicTags(XNode node) {
80
82
XNode child = node .newXNode (children .item (i ));
81
83
if (child .getNode ().getNodeType () == Node .CDATA_SECTION_NODE || child .getNode ().getNodeType () == Node .TEXT_NODE ) {
82
84
String data = child .getStringBody ("" );
85
+ if (data .trim ().isEmpty ()) {
86
+ StaticTextSqlNode staticTextSqlNode = EMPTY_TEXT_NODE .computeIfAbsent (data , StaticTextSqlNode ::new );
87
+ contents .add (staticTextSqlNode );
88
+ continue ;
89
+ }
83
90
TextSqlNode textSqlNode = new TextSqlNode (data );
84
91
if (textSqlNode .isDynamic ()) {
85
92
contents .add (textSqlNode );
0 commit comments