17
17
18
18
import static org .mybatis .dynamic .sql .util .StringUtilities .spaceBefore ;
19
19
20
+ import java .util .HashMap ;
21
+ import java .util .List ;
22
+ import java .util .Map ;
20
23
import java .util .Objects ;
21
24
import java .util .Optional ;
22
25
import java .util .function .Function ;
26
+ import java .util .stream .Collectors ;
23
27
24
28
import org .mybatis .dynamic .sql .insert .GeneralInsertModel ;
25
29
import org .mybatis .dynamic .sql .render .RenderingStrategy ;
@@ -37,19 +41,19 @@ private GeneralInsertRenderer(Builder builder) {
37
41
38
42
public GeneralInsertStatementProvider render () {
39
43
GeneralInsertValuePhraseVisitor visitor = new GeneralInsertValuePhraseVisitor (renderingStrategy );
40
- FieldAndValueAndParametersCollector collector = model .mapColumnMappings (toFieldAndValue (visitor ))
41
- .collect (FieldAndValueAndParametersCollector . collect ());
44
+ List < Optional < FieldAndValueAndParameters >> fieldsAndValues = model .mapColumnMappings (toFieldAndValue (visitor ))
45
+ .collect (Collectors . toList ());
42
46
43
- return DefaultGeneralInsertStatementProvider .withInsertStatement (calculateInsertStatement (collector ))
44
- .withParameters (collector . parameters ( ))
47
+ return DefaultGeneralInsertStatementProvider .withInsertStatement (calculateInsertStatement (fieldsAndValues ))
48
+ .withParameters (calculateParameters ( fieldsAndValues ))
45
49
.build ();
46
50
}
47
51
48
- private String calculateInsertStatement (FieldAndValueAndParametersCollector collector ) {
52
+ private String calculateInsertStatement (List < Optional < FieldAndValueAndParameters >> fieldsAndValues ) {
49
53
return "insert into" //$NON-NLS-1$
50
54
+ spaceBefore (model .table ().tableNameAtRuntime ())
51
- + spaceBefore (collector . columnsPhrase ( ))
52
- + spaceBefore (collector . valuesPhrase ( ));
55
+ + spaceBefore (calculateColumnsPhrase ( fieldsAndValues ))
56
+ + spaceBefore (calculateValuesPhrase ( fieldsAndValues ));
53
57
}
54
58
55
59
private Function <AbstractColumnMapping , Optional <FieldAndValueAndParameters >> toFieldAndValue (
@@ -62,6 +66,30 @@ private Optional<FieldAndValueAndParameters> toFieldAndValue(GeneralInsertValueP
62
66
return insertMapping .accept (visitor );
63
67
}
64
68
69
+ private String calculateColumnsPhrase (List <Optional <FieldAndValueAndParameters >> fieldsAndValues ) {
70
+ return fieldsAndValues .stream ()
71
+ .filter (Optional ::isPresent )
72
+ .map (Optional ::get )
73
+ .map (FieldAndValueAndParameters ::fieldName )
74
+ .collect (Collectors .joining (", " , "(" , ")" )); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
75
+ }
76
+
77
+ private String calculateValuesPhrase (List <Optional <FieldAndValueAndParameters >> fieldsAndValues ) {
78
+ return fieldsAndValues .stream ()
79
+ .filter (Optional ::isPresent )
80
+ .map (Optional ::get )
81
+ .map (FieldAndValueAndParameters ::valuePhrase )
82
+ .collect (Collectors .joining (", " , "values (" , ")" )); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
83
+ }
84
+
85
+ private Map <String , Object > calculateParameters (List <Optional <FieldAndValueAndParameters >> fieldsAndValues ) {
86
+ return fieldsAndValues .stream ()
87
+ .filter (Optional ::isPresent )
88
+ .map (Optional ::get )
89
+ .map (FieldAndValueAndParameters ::parameters )
90
+ .collect (HashMap ::new , HashMap ::putAll , HashMap ::putAll );
91
+ }
92
+
65
93
public static Builder withInsertModel (GeneralInsertModel model ) {
66
94
return new Builder ().withInsertModel (model );
67
95
}
0 commit comments