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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy