Skip to content

Commit 386c6ea

Browse files
committed
Simplify multi insert statement rendering
1 parent 05df9cc commit 386c6ea

File tree

10 files changed

+45
-256
lines changed

10 files changed

+45
-256
lines changed

src/main/java/org/mybatis/dynamic/sql/insert/render/BatchInsertRenderer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ private BatchInsertRenderer(Builder<T> builder) {
3535
}
3636

3737
public BatchInsert<T> render() {
38-
ValuePhraseVisitor visitor = new ValuePhraseVisitor(renderingStrategy);
38+
ValuePhraseVisitor visitor = new ValuePhraseVisitor(renderingStrategy, "record"); //$NON-NLS-1$
3939
FieldAndValueCollector collector = model.mapColumnMappings(toFieldAndValue(visitor))
4040
.collect(FieldAndValueCollector.collect());
4141

src/main/java/org/mybatis/dynamic/sql/insert/render/FieldAndMultipleValues.java

Lines changed: 0 additions & 61 deletions
This file was deleted.

src/main/java/org/mybatis/dynamic/sql/insert/render/FieldAndMultipleValuesCollector.java

Lines changed: 0 additions & 78 deletions
This file was deleted.

src/main/java/org/mybatis/dynamic/sql/insert/render/FieldAndValue.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* Copyright 2016-2017 the original author or authors.
2+
* Copyright 2016-2019 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -34,6 +34,10 @@ public String valuePhrase() {
3434
return valuePhrase;
3535
}
3636

37+
public String valuePhrase(int row) {
38+
return String.format(valuePhrase, row);
39+
}
40+
3741
public static Builder withFieldName(String fieldName) {
3842
return new Builder().withFieldName(fieldName);
3943
}

src/main/java/org/mybatis/dynamic/sql/insert/render/FieldAndValueCollector.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.List;
2020
import java.util.stream.Collector;
2121
import java.util.stream.Collectors;
22+
import java.util.stream.IntStream;
2223

2324
public class FieldAndValueCollector {
2425

@@ -49,6 +50,18 @@ public String valuesPhrase() {
4950
.collect(Collectors.joining(", ", "values (", ")")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
5051
}
5152

53+
public String multiRowInsertValuesPhrase(int rowCount) {
54+
return IntStream.range(0, rowCount)
55+
.mapToObj(this::toSingleRowOfValues)
56+
.collect(Collectors.joining(", ", "values ", "")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
57+
}
58+
59+
private String toSingleRowOfValues(int row) {
60+
return fieldsAndValue.stream()
61+
.map(fmv -> fmv.valuePhrase(row))
62+
.collect(Collectors.joining(", ", "(", ")")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
63+
}
64+
5265
public static Collector<FieldAndValue, FieldAndValueCollector, FieldAndValueCollector> collect() {
5366
return Collector.of(FieldAndValueCollector::new,
5467
FieldAndValueCollector::add,

src/main/java/org/mybatis/dynamic/sql/insert/render/InsertRenderer.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ private InsertRenderer(Builder<T> builder) {
3535
}
3636

3737
public InsertStatementProvider<T> render() {
38-
ValuePhraseVisitor visitor = new ValuePhraseVisitor(renderingStrategy);
38+
ValuePhraseVisitor visitor = new ValuePhraseVisitor(renderingStrategy, "record"); //$NON-NLS-1$
3939
FieldAndValueCollector collector = model.mapColumnMappings(toFieldAndValue(visitor))
4040
.collect(FieldAndValueCollector.collect());
4141

src/main/java/org/mybatis/dynamic/sql/insert/render/MultiRowInsertRenderer.java

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -35,31 +35,28 @@ private MultiRowInsertRenderer(Builder<T> builder) {
3535
}
3636

3737
public MultiRowInsertStatementProvider<T> render() {
38-
MultiRowInsertValuePhraseVisitor visitor =
39-
new MultiRowInsertValuePhraseVisitor(renderingStrategy, model.recordCount());
40-
FieldAndMultipleValuesCollector collector = model.mapColumnMappings(toFieldAndMultipleValues(visitor))
41-
.collect(FieldAndMultipleValuesCollector.collect());
38+
ValuePhraseVisitor visitor = new ValuePhraseVisitor(renderingStrategy, "records[%s]"); //$NON-NLS-1$
39+
FieldAndValueCollector collector = model.mapColumnMappings(toFieldAndValue(visitor))
40+
.collect(FieldAndValueCollector.collect());
4241

4342
return new DefaultMultiRowInsertStatementProvider.Builder<T>().withRecords(model.records())
4443
.withInsertStatement(calculateInsertStatement(collector))
4544
.build();
4645
}
4746

48-
private Function<InsertMapping, FieldAndMultipleValues> toFieldAndMultipleValues(
49-
MultiRowInsertValuePhraseVisitor visitor) {
47+
private Function<InsertMapping, FieldAndValue> toFieldAndValue(ValuePhraseVisitor visitor) {
5048
return insertMapping -> toFieldAndValue(visitor, insertMapping);
5149
}
5250

53-
private FieldAndMultipleValues toFieldAndValue(MultiRowInsertValuePhraseVisitor visitor,
54-
InsertMapping insertMapping) {
51+
private FieldAndValue toFieldAndValue(ValuePhraseVisitor visitor, InsertMapping insertMapping) {
5552
return insertMapping.accept(visitor);
5653
}
5754

58-
private String calculateInsertStatement(FieldAndMultipleValuesCollector collector) {
55+
private String calculateInsertStatement(FieldAndValueCollector collector) {
5956
return "insert into" //$NON-NLS-1$
6057
+ spaceBefore(model.table().tableNameAtRuntime())
6158
+ spaceBefore(collector.columnsPhrase())
62-
+ spaceBefore(collector.valuesPhrase());
59+
+ spaceBefore(collector.multiRowInsertValuesPhrase(model.recordCount()));
6360
}
6461

6562
public static <T> Builder<T> withMultiRowInsertModel(MultiRowInsertModel<T> model) {

src/main/java/org/mybatis/dynamic/sql/insert/render/MultiRowInsertValuePhraseVisitor.java

Lines changed: 0 additions & 85 deletions
This file was deleted.

src/main/java/org/mybatis/dynamic/sql/insert/render/ValuePhraseVisitor.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* Copyright 2016-2017 the original author or authors.
2+
* Copyright 2016-2019 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -28,9 +28,11 @@
2828
public class ValuePhraseVisitor implements InsertMappingVisitor<FieldAndValue> {
2929

3030
private RenderingStrategy renderingStrategy;
31+
private String prefix;
3132

32-
public ValuePhraseVisitor(RenderingStrategy renderingStrategy) {
33+
public ValuePhraseVisitor(RenderingStrategy renderingStrategy, String prefix) {
3334
this.renderingStrategy = renderingStrategy;
35+
this.prefix = prefix;
3436
}
3537

3638
@Override
@@ -62,6 +64,6 @@ public FieldAndValue visit(PropertyMapping mapping) {
6264
}
6365

6466
private Function<SqlColumn<?>, String> toJdbcPlaceholder(String parameterName) {
65-
return column -> renderingStrategy.getFormattedJdbcPlaceholder(column, "record", parameterName); //$NON-NLS-1$
67+
return column -> renderingStrategy.getFormattedJdbcPlaceholder(column, prefix, parameterName);
6668
}
6769
}

0 commit comments

Comments
 (0)