1717
1818import static org .mybatis .dynamic .sql .util .StringUtilities .spaceBefore ;
1919
20+ import java .util .HashMap ;
21+ import java .util .List ;
22+ import java .util .Map ;
2023import java .util .Objects ;
2124import java .util .Optional ;
2225import java .util .function .Function ;
26+ import java .util .stream .Collectors ;
2327
2428import org .mybatis .dynamic .sql .insert .GeneralInsertModel ;
2529import org .mybatis .dynamic .sql .render .RenderingStrategy ;
@@ -37,19 +41,19 @@ private GeneralInsertRenderer(Builder builder) {
3741
3842 public GeneralInsertStatementProvider render () {
3943 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 ());
4246
43- return DefaultGeneralInsertStatementProvider .withInsertStatement (calculateInsertStatement (collector ))
44- .withParameters (collector . parameters ( ))
47+ return DefaultGeneralInsertStatementProvider .withInsertStatement (calculateInsertStatement (fieldsAndValues ))
48+ .withParameters (calculateParameters ( fieldsAndValues ))
4549 .build ();
4650 }
4751
48- private String calculateInsertStatement (FieldAndValueAndParametersCollector collector ) {
52+ private String calculateInsertStatement (List < Optional < FieldAndValueAndParameters >> fieldsAndValues ) {
4953 return "insert into" //$NON-NLS-1$
5054 + spaceBefore (model .table ().tableNameAtRuntime ())
51- + spaceBefore (collector . columnsPhrase ( ))
52- + spaceBefore (collector . valuesPhrase ( ));
55+ + spaceBefore (calculateColumnsPhrase ( fieldsAndValues ))
56+ + spaceBefore (calculateValuesPhrase ( fieldsAndValues ));
5357 }
5458
5559 private Function <AbstractColumnMapping , Optional <FieldAndValueAndParameters >> toFieldAndValue (
@@ -62,6 +66,30 @@ private Optional<FieldAndValueAndParameters> toFieldAndValue(GeneralInsertValueP
6266 return insertMapping .accept (visitor );
6367 }
6468
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+
6593 public static Builder withInsertModel (GeneralInsertModel model ) {
6694 return new Builder ().withInsertModel (model );
6795 }
0 commit comments