Skip to content

Commit ce7a29c

Browse files
committed
Write a utility method for use in a rendering pipeline
1 parent a802a5e commit ce7a29c

File tree

7 files changed

+25
-24
lines changed

7 files changed

+25
-24
lines changed

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -23,17 +23,16 @@
2323
public class BatchInsertRenderer<T> {
2424

2525
private final BatchInsertModel<T> model;
26-
private final RenderingStrategy renderingStrategy;
26+
private final MultiRowValuePhraseVisitor visitor;
2727

2828
private BatchInsertRenderer(Builder<T> builder) {
2929
model = Objects.requireNonNull(builder.model);
30-
renderingStrategy = Objects.requireNonNull(builder.renderingStrategy);
30+
visitor = new MultiRowValuePhraseVisitor(builder.renderingStrategy, "row"); //$NON-NLS-1$)
3131
}
3232

3333
public BatchInsert<T> render() {
34-
MultiRowValuePhraseVisitor visitor = new MultiRowValuePhraseVisitor(renderingStrategy, "row"); //$NON-NLS-1$)
3534
FieldAndValueCollector collector = model.columnMappings()
36-
.map(m -> m.accept(visitor))
35+
.map(visitor::renderMapping)
3736
.collect(FieldAndValueCollector.collect());
3837

3938
String insertStatement = InsertRenderingUtilities.calculateInsertStatement(model.table(), collector);

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,19 +27,19 @@
2727
public class GeneralInsertRenderer {
2828

2929
private final GeneralInsertModel model;
30-
private final RenderingContext renderingContext;
30+
private final GeneralInsertValuePhraseVisitor visitor;
3131

3232
private GeneralInsertRenderer(Builder builder) {
3333
model = Objects.requireNonNull(builder.model);
34-
renderingContext = RenderingContext.withRenderingStrategy(builder.renderingStrategy)
34+
RenderingContext renderingContext = RenderingContext.withRenderingStrategy(builder.renderingStrategy)
3535
.withStatementConfiguration(builder.statementConfiguration)
3636
.build();
37+
visitor = new GeneralInsertValuePhraseVisitor(renderingContext);
3738
}
3839

3940
public GeneralInsertStatementProvider render() {
40-
GeneralInsertValuePhraseVisitor visitor = new GeneralInsertValuePhraseVisitor(renderingContext);
4141
FieldAndValueCollector collector = model.columnMappings()
42-
.map(m -> m.accept(visitor))
42+
.map(visitor::renderMapping)
4343
.filter(Optional::isPresent)
4444
.map(Optional::get)
4545
.collect(FieldAndValueCollector.collect());

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

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,18 +25,16 @@
2525
public class InsertRenderer<T> {
2626

2727
private final InsertModel<T> model;
28-
private final RenderingStrategy renderingStrategy;
28+
private final ValuePhraseVisitor visitor;
2929

3030
private InsertRenderer(Builder<T> builder) {
3131
model = Objects.requireNonNull(builder.model);
32-
renderingStrategy = Objects.requireNonNull(builder.renderingStrategy);
32+
visitor = new ValuePhraseVisitor(builder.renderingStrategy);
3333
}
3434

3535
public InsertStatementProvider<T> render() {
36-
ValuePhraseVisitor visitor = new ValuePhraseVisitor(renderingStrategy);
37-
3836
FieldAndValueCollector collector = model.columnMappings()
39-
.map(m -> m.accept(visitor))
37+
.map(visitor::renderMapping)
4038
.filter(Optional::isPresent)
4139
.map(Optional::get)
4240
.collect(FieldAndValueCollector.collect());

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

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,19 +25,17 @@
2525
public class MultiRowInsertRenderer<T> {
2626

2727
private final MultiRowInsertModel<T> model;
28-
private final RenderingStrategy renderingStrategy;
28+
private final MultiRowValuePhraseVisitor visitor;
2929

3030
private MultiRowInsertRenderer(Builder<T> builder) {
3131
model = Objects.requireNonNull(builder.model);
32-
renderingStrategy = Objects.requireNonNull(builder.renderingStrategy);
32+
// the prefix is a generic format that will be resolved below with String.format(...)
33+
visitor = new MultiRowValuePhraseVisitor(builder.renderingStrategy, "records[%s]"); //$NON-NLS-1$
3334
}
3435

3536
public MultiRowInsertStatementProvider<T> render() {
36-
// the prefix is a generic format that will be resolved below with String.format(...)
37-
MultiRowValuePhraseVisitor visitor =
38-
new MultiRowValuePhraseVisitor(renderingStrategy, "records[%s]"); //$NON-NLS-1$
3937
FieldAndValueCollector collector = model.columnMappings()
40-
.map(m -> m.accept(visitor))
38+
.map(visitor::renderMapping)
4139
.collect(FieldAndValueCollector.collect());
4240

4341
String insertStatement = calculateInsertStatement(collector);

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,15 @@
2525
import org.mybatis.dynamic.sql.util.StringConstantMapping;
2626
import org.mybatis.dynamic.sql.util.StringUtilities;
2727

28+
import java.util.Objects;
29+
2830
public class MultiRowValuePhraseVisitor extends MultiRowInsertMappingVisitor<FieldAndValueAndParameters> {
2931
protected final RenderingStrategy renderingStrategy;
3032
protected final String prefix;
3133

3234
protected MultiRowValuePhraseVisitor(RenderingStrategy renderingStrategy, String prefix) {
33-
this.renderingStrategy = renderingStrategy;
34-
this.prefix = prefix;
35+
this.renderingStrategy = Objects.requireNonNull(renderingStrategy);
36+
this.prefix = Objects.requireNonNull(prefix);
3537
}
3638

3739
@Override

src/main/java/org/mybatis/dynamic/sql/update/render/UpdateRenderer.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@
3737
public class UpdateRenderer {
3838
private final UpdateModel updateModel;
3939
private final RenderingContext renderingContext;
40+
private final SetPhraseVisitor visitor;
4041

4142
private UpdateRenderer(Builder builder) {
4243
updateModel = Objects.requireNonNull(builder.updateModel);
@@ -48,6 +49,7 @@ private UpdateRenderer(Builder builder) {
4849
.withTableAliasCalculator(tableAliasCalculator)
4950
.withStatementConfiguration(builder.statementConfiguration)
5051
.build();
52+
visitor = new SetPhraseVisitor(renderingContext);
5153
}
5254

5355
public UpdateStatementProvider render() {
@@ -75,10 +77,8 @@ private FragmentAndParameters calculateUpdateStatementStart() {
7577
}
7678

7779
private FragmentAndParameters calculateSetPhrase() {
78-
SetPhraseVisitor visitor = new SetPhraseVisitor(renderingContext);
79-
8080
List<Optional<FragmentAndParameters>> fragmentsAndParameters = updateModel.columnMappings()
81-
.map(m -> m.accept(visitor))
81+
.map(visitor::renderMapping)
8282
.collect(Collectors.toList());
8383

8484
Validator.assertFalse(fragmentsAndParameters.stream().noneMatch(Optional::isPresent),

src/main/java/org/mybatis/dynamic/sql/util/ColumnMappingVisitor.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,10 @@
3131
* The type of object created by the visitor
3232
*/
3333
public interface ColumnMappingVisitor<R> {
34+
default R renderMapping(AbstractColumnMapping mapping) {
35+
return mapping.accept(this);
36+
}
37+
3438
R visit(NullMapping mapping);
3539

3640
R visit(ConstantMapping mapping);

0 commit comments

Comments
 (0)