16
16
package org .mybatis .dynamic .sql .where .render ;
17
17
18
18
import java .util .ArrayList ;
19
- import java .util .Collections ;
20
19
import java .util .HashMap ;
21
20
import java .util .List ;
22
21
import java .util .Map ;
30
29
import org .mybatis .dynamic .sql .ConditionVisitor ;
31
30
import org .mybatis .dynamic .sql .SqlColumn ;
32
31
33
- public class ConditionRenderer <T > implements ConditionVisitor <T > {
32
+ public class ConditionRenderer <T > implements ConditionVisitor <T , FragmentAndParameters > {
34
33
35
34
private static final String PARAMETERS_PREFIX = "parameters" ; //$NON-NLS-1$
36
35
37
- private StringBuilder buffer = new StringBuilder ();
38
- private Map <String , Object > parameters = new HashMap <>();
39
36
private AtomicInteger sequence ;
40
37
private SqlColumn <?> column ;
41
38
private Function <SqlColumn <?>, String > nameFunction ;
@@ -46,48 +43,47 @@ private ConditionRenderer(AtomicInteger sequence, SqlColumn<?> column, Function<
46
43
this .nameFunction = nameFunction ;
47
44
}
48
45
49
- public String fragment () {
50
- return buffer .toString ();
51
- }
52
-
53
- public Map <String , Object > parameters () {
54
- return Collections .unmodifiableMap (parameters );
55
- }
56
-
57
46
@ Override
58
- public void visit (AbstractNoValueCondition <T > condition ) {
59
- buffer . append (condition .render (calculateColumnName ()));
47
+ public FragmentAndParameters visit (AbstractNoValueCondition <T > condition ) {
48
+ return new FragmentAndParameters . Builder (condition .render (calculateColumnName ())). build ( );
60
49
}
61
50
62
51
@ Override
63
- public void visit (AbstractSingleValueCondition <T > condition ) {
52
+ public FragmentAndParameters visit (AbstractSingleValueCondition <T > condition ) {
64
53
String mapKey = formatParameterMapKey (sequence .getAndIncrement ());
65
- buffer .append (condition .render (calculateColumnName (), column .getFormattedJdbcPlaceholder (PARAMETERS_PREFIX , mapKey )));
66
- parameters .put (mapKey , condition .value ());
54
+ return new FragmentAndParameters .Builder (condition .render (calculateColumnName (), column .getFormattedJdbcPlaceholder (PARAMETERS_PREFIX , mapKey )))
55
+ .withParameter (mapKey , condition .value ())
56
+ .build ();
67
57
}
68
58
69
59
@ Override
70
- public void visit (AbstractTwoValueCondition <T > condition ) {
60
+ public FragmentAndParameters visit (AbstractTwoValueCondition <T > condition ) {
71
61
String mapKey1 = formatParameterMapKey (sequence .getAndIncrement ());
72
62
String mapKey2 = formatParameterMapKey (sequence .getAndIncrement ());
73
- buffer . append ( condition .render (calculateColumnName (),
63
+ String fragment = condition .render (calculateColumnName (),
74
64
column .getFormattedJdbcPlaceholder (PARAMETERS_PREFIX , mapKey1 ),
75
- column .getFormattedJdbcPlaceholder (PARAMETERS_PREFIX , mapKey2 )));
76
- parameters .put (mapKey1 , condition .value1 ());
77
- parameters .put (mapKey2 , condition .value2 ());
65
+ column .getFormattedJdbcPlaceholder (PARAMETERS_PREFIX , mapKey2 ));
66
+
67
+ return new FragmentAndParameters .Builder (fragment )
68
+ .withParameter (mapKey1 , condition .value1 ())
69
+ .withParameter (mapKey2 , condition .value2 ())
70
+ .build ();
78
71
}
79
72
80
73
@ Override
81
- public void visit (AbstractListValueCondition <T > condition ) {
74
+ public FragmentAndParameters visit (AbstractListValueCondition <T > condition ) {
82
75
List <String > placeholders = new ArrayList <>();
76
+ Map <String , Object > parameters = new HashMap <>();
83
77
84
78
condition .values ().forEach (v -> {
85
79
String mapKey = formatParameterMapKey (sequence .getAndIncrement ());
86
80
placeholders .add (column .getFormattedJdbcPlaceholder (PARAMETERS_PREFIX , mapKey ));
87
81
parameters .put (mapKey , v );
88
82
});
89
83
90
- buffer .append (condition .render (calculateColumnName (), placeholders .stream ()));
84
+ return new FragmentAndParameters .Builder (condition .render (calculateColumnName (), placeholders .stream ()))
85
+ .withParameters (parameters )
86
+ .build ();
91
87
}
92
88
93
89
private String formatParameterMapKey (int number ) {
0 commit comments