Skip to content

Commit 1ea86ea

Browse files
authored
Merge pull request #865 from jeffgbutler/renderer-factory
Implement Renderer Factory
2 parents c96a12f + 3ddf8bd commit 1ea86ea

File tree

11 files changed

+171
-51
lines changed

11 files changed

+171
-51
lines changed

src/main/java/org/mybatis/dynamic/sql/delete/DeleteModel.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@
2323
import org.mybatis.dynamic.sql.common.CommonBuilder;
2424
import org.mybatis.dynamic.sql.common.OrderByModel;
2525
import org.mybatis.dynamic.sql.configuration.StatementConfiguration;
26-
import org.mybatis.dynamic.sql.delete.render.DeleteRenderer;
2726
import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider;
27+
import org.mybatis.dynamic.sql.render.RendererFactory;
2828
import org.mybatis.dynamic.sql.render.RenderingStrategy;
2929
import org.mybatis.dynamic.sql.where.EmbeddedWhereModel;
3030

@@ -67,11 +67,8 @@ public Optional<OrderByModel> orderByModel() {
6767

6868
@NotNull
6969
public DeleteStatementProvider render(RenderingStrategy renderingStrategy) {
70-
return DeleteRenderer.withDeleteModel(this)
71-
.withRenderingStrategy(renderingStrategy)
72-
.withStatementConfiguration(statementConfiguration)
73-
.build()
74-
.render();
70+
return RendererFactory.createDeleteRenderer(this, statementConfiguration)
71+
.render(renderingStrategy);
7572
}
7673

7774
public static Builder withTable(SqlTable table) {

src/main/java/org/mybatis/dynamic/sql/insert/BatchInsertModel.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
import org.jetbrains.annotations.NotNull;
2121
import org.mybatis.dynamic.sql.insert.render.BatchInsert;
22-
import org.mybatis.dynamic.sql.insert.render.BatchInsertRenderer;
22+
import org.mybatis.dynamic.sql.render.RendererFactory;
2323
import org.mybatis.dynamic.sql.render.RenderingStrategy;
2424
import org.mybatis.dynamic.sql.util.Validator;
2525

@@ -33,10 +33,8 @@ private BatchInsertModel(Builder<T> builder) {
3333

3434
@NotNull
3535
public BatchInsert<T> render(RenderingStrategy renderingStrategy) {
36-
return BatchInsertRenderer.withBatchInsertModel(this)
37-
.withRenderingStrategy(renderingStrategy)
38-
.build()
39-
.render();
36+
return RendererFactory.createBatchInsertRenderer(this)
37+
.render(renderingStrategy);
4038
}
4139

4240
public static <T> Builder<T> withRecords(Collection<T> records) {

src/main/java/org/mybatis/dynamic/sql/insert/GeneralInsertModel.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,8 @@
2323
import org.jetbrains.annotations.NotNull;
2424
import org.mybatis.dynamic.sql.SqlTable;
2525
import org.mybatis.dynamic.sql.configuration.StatementConfiguration;
26-
import org.mybatis.dynamic.sql.insert.render.GeneralInsertRenderer;
2726
import org.mybatis.dynamic.sql.insert.render.GeneralInsertStatementProvider;
27+
import org.mybatis.dynamic.sql.render.RendererFactory;
2828
import org.mybatis.dynamic.sql.render.RenderingStrategy;
2929
import org.mybatis.dynamic.sql.util.AbstractColumnMapping;
3030
import org.mybatis.dynamic.sql.util.Validator;
@@ -52,11 +52,8 @@ public SqlTable table() {
5252

5353
@NotNull
5454
public GeneralInsertStatementProvider render(RenderingStrategy renderingStrategy) {
55-
return GeneralInsertRenderer.withInsertModel(this)
56-
.withRenderingStrategy(renderingStrategy)
57-
.withStatementConfiguration(statementConfiguration)
58-
.build()
59-
.render();
55+
return RendererFactory.createGeneralInsertRenderer(this, statementConfiguration)
56+
.render(renderingStrategy);
6057
}
6158

6259
public static class Builder {

src/main/java/org/mybatis/dynamic/sql/insert/InsertModel.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@
2222

2323
import org.jetbrains.annotations.NotNull;
2424
import org.mybatis.dynamic.sql.SqlTable;
25-
import org.mybatis.dynamic.sql.insert.render.InsertRenderer;
2625
import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider;
26+
import org.mybatis.dynamic.sql.render.RendererFactory;
2727
import org.mybatis.dynamic.sql.render.RenderingStrategy;
2828
import org.mybatis.dynamic.sql.util.AbstractColumnMapping;
2929
import org.mybatis.dynamic.sql.util.Validator;
@@ -54,10 +54,8 @@ public SqlTable table() {
5454

5555
@NotNull
5656
public InsertStatementProvider<T> render(RenderingStrategy renderingStrategy) {
57-
return InsertRenderer.withInsertModel(this)
58-
.withRenderingStrategy(renderingStrategy)
59-
.build()
60-
.render();
57+
return RendererFactory.createInsertRenderer(this)
58+
.render(renderingStrategy);
6159
}
6260

6361
public static <T> Builder<T> withRow(T row) {

src/main/java/org/mybatis/dynamic/sql/insert/InsertSelectModel.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@
2121
import org.jetbrains.annotations.NotNull;
2222
import org.mybatis.dynamic.sql.SqlTable;
2323
import org.mybatis.dynamic.sql.configuration.StatementConfiguration;
24-
import org.mybatis.dynamic.sql.insert.render.InsertSelectRenderer;
2524
import org.mybatis.dynamic.sql.insert.render.InsertSelectStatementProvider;
25+
import org.mybatis.dynamic.sql.render.RendererFactory;
2626
import org.mybatis.dynamic.sql.render.RenderingStrategy;
2727
import org.mybatis.dynamic.sql.select.SelectModel;
2828

@@ -53,11 +53,8 @@ public Optional<InsertColumnListModel> columnList() {
5353

5454
@NotNull
5555
public InsertSelectStatementProvider render(RenderingStrategy renderingStrategy) {
56-
return InsertSelectRenderer.withInsertSelectModel(this)
57-
.withRenderingStrategy(renderingStrategy)
58-
.withStatementConfiguration(statementConfiguration)
59-
.build()
60-
.render();
56+
return RendererFactory.createInsertSelectRenderer(this, statementConfiguration)
57+
.render(renderingStrategy);
6158
}
6259

6360
public static Builder withTable(SqlTable table) {

src/main/java/org/mybatis/dynamic/sql/insert/MultiRowInsertModel.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,8 @@
1818
import java.util.Collection;
1919

2020
import org.jetbrains.annotations.NotNull;
21-
import org.mybatis.dynamic.sql.insert.render.MultiRowInsertRenderer;
2221
import org.mybatis.dynamic.sql.insert.render.MultiRowInsertStatementProvider;
22+
import org.mybatis.dynamic.sql.render.RendererFactory;
2323
import org.mybatis.dynamic.sql.render.RenderingStrategy;
2424
import org.mybatis.dynamic.sql.util.Validator;
2525

@@ -33,10 +33,8 @@ private MultiRowInsertModel(Builder<T> builder) {
3333

3434
@NotNull
3535
public MultiRowInsertStatementProvider<T> render(RenderingStrategy renderingStrategy) {
36-
return MultiRowInsertRenderer.withMultiRowInsertModel(this)
37-
.withRenderingStrategy(renderingStrategy)
38-
.build()
39-
.render();
36+
return RendererFactory.createMultiRowInsertRenderer(this)
37+
.render(renderingStrategy);
4038
}
4139

4240
public static <T> Builder<T> withRecords(Collection<T> records) {
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
/*
2+
* Copyright 2016-2024 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package org.mybatis.dynamic.sql.render;
17+
18+
@FunctionalInterface
19+
public interface Renderer<T, R> {
20+
R render(T t);
21+
}
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
/*
2+
* Copyright 2016-2024 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package org.mybatis.dynamic.sql.render;
17+
18+
import org.mybatis.dynamic.sql.configuration.StatementConfiguration;
19+
import org.mybatis.dynamic.sql.delete.DeleteModel;
20+
import org.mybatis.dynamic.sql.delete.render.DeleteRenderer;
21+
import org.mybatis.dynamic.sql.delete.render.DeleteStatementProvider;
22+
import org.mybatis.dynamic.sql.insert.BatchInsertModel;
23+
import org.mybatis.dynamic.sql.insert.GeneralInsertModel;
24+
import org.mybatis.dynamic.sql.insert.InsertModel;
25+
import org.mybatis.dynamic.sql.insert.InsertSelectModel;
26+
import org.mybatis.dynamic.sql.insert.MultiRowInsertModel;
27+
import org.mybatis.dynamic.sql.insert.render.BatchInsert;
28+
import org.mybatis.dynamic.sql.insert.render.BatchInsertRenderer;
29+
import org.mybatis.dynamic.sql.insert.render.GeneralInsertRenderer;
30+
import org.mybatis.dynamic.sql.insert.render.GeneralInsertStatementProvider;
31+
import org.mybatis.dynamic.sql.insert.render.InsertRenderer;
32+
import org.mybatis.dynamic.sql.insert.render.InsertSelectRenderer;
33+
import org.mybatis.dynamic.sql.insert.render.InsertSelectStatementProvider;
34+
import org.mybatis.dynamic.sql.insert.render.InsertStatementProvider;
35+
import org.mybatis.dynamic.sql.insert.render.MultiRowInsertRenderer;
36+
import org.mybatis.dynamic.sql.insert.render.MultiRowInsertStatementProvider;
37+
import org.mybatis.dynamic.sql.select.MultiSelectModel;
38+
import org.mybatis.dynamic.sql.select.SelectModel;
39+
import org.mybatis.dynamic.sql.select.render.MultiSelectRenderer;
40+
import org.mybatis.dynamic.sql.select.render.SelectRenderer;
41+
import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
42+
import org.mybatis.dynamic.sql.update.UpdateModel;
43+
import org.mybatis.dynamic.sql.update.render.UpdateRenderer;
44+
import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider;
45+
46+
public interface RendererFactory {
47+
static Renderer<RenderingStrategy, DeleteStatementProvider> createDeleteRenderer(DeleteModel deleteModel,
48+
StatementConfiguration statementConfiguration) {
49+
return renderingStrategy -> DeleteRenderer.withDeleteModel(deleteModel)
50+
.withStatementConfiguration(statementConfiguration)
51+
.withRenderingStrategy(renderingStrategy)
52+
.build()
53+
.render();
54+
}
55+
56+
static <T> Renderer<RenderingStrategy, BatchInsert<T>> createBatchInsertRenderer(
57+
BatchInsertModel<T> batchInsertModel) {
58+
return renderingStrategy -> BatchInsertRenderer.withBatchInsertModel(batchInsertModel)
59+
.withRenderingStrategy(renderingStrategy)
60+
.build()
61+
.render();
62+
}
63+
64+
static Renderer<RenderingStrategy, GeneralInsertStatementProvider> createGeneralInsertRenderer(
65+
GeneralInsertModel generalInsertModel, StatementConfiguration statementConfiguration) {
66+
return renderingStrategy -> GeneralInsertRenderer.withInsertModel(generalInsertModel)
67+
.withStatementConfiguration(statementConfiguration)
68+
.withRenderingStrategy(renderingStrategy)
69+
.build()
70+
.render();
71+
}
72+
73+
static <T> Renderer<RenderingStrategy, InsertStatementProvider<T>> createInsertRenderer(
74+
InsertModel<T> insertModel) {
75+
return renderingStrategy -> InsertRenderer.withInsertModel(insertModel)
76+
.withRenderingStrategy(renderingStrategy)
77+
.build()
78+
.render();
79+
}
80+
81+
static Renderer<RenderingStrategy, InsertSelectStatementProvider> createInsertSelectRenderer(
82+
InsertSelectModel insertSelectModel, StatementConfiguration statementConfiguration) {
83+
return renderingStrategy -> InsertSelectRenderer.withInsertSelectModel(insertSelectModel)
84+
.withStatementConfiguration(statementConfiguration)
85+
.withRenderingStrategy(renderingStrategy)
86+
.build()
87+
.render();
88+
}
89+
90+
static <T> Renderer<RenderingStrategy, MultiRowInsertStatementProvider<T>> createMultiRowInsertRenderer(
91+
MultiRowInsertModel<T> multiRowInsertModel) {
92+
return renderingStrategy -> MultiRowInsertRenderer.withMultiRowInsertModel(multiRowInsertModel)
93+
.withRenderingStrategy(renderingStrategy)
94+
.build()
95+
.render();
96+
}
97+
98+
static Renderer<RenderingStrategy, SelectStatementProvider> createMultiSelectRenderer(
99+
MultiSelectModel multiSelectModel, StatementConfiguration statementConfiguration) {
100+
return renderingStrategy -> new MultiSelectRenderer.Builder()
101+
.withMultiSelectModel(multiSelectModel)
102+
.withStatementConfiguration(statementConfiguration)
103+
.withRenderingStrategy(renderingStrategy)
104+
.build()
105+
.render();
106+
}
107+
108+
static Renderer<RenderingContext, SelectStatementProvider> createSelectRenderer(
109+
SelectModel selectModel) {
110+
return renderingContext -> SelectRenderer.withSelectModel(selectModel)
111+
.withRenderingContext(renderingContext)
112+
.build()
113+
.render();
114+
}
115+
116+
static Renderer<RenderingStrategy, UpdateStatementProvider> createUpdateRenderer(
117+
UpdateModel updateModel, StatementConfiguration statementConfiguration) {
118+
return renderingStrategy -> UpdateRenderer.withUpdateModel(updateModel)
119+
.withStatementConfiguration(statementConfiguration)
120+
.withRenderingStrategy(renderingStrategy)
121+
.build()
122+
.render();
123+
}
124+
}

src/main/java/org/mybatis/dynamic/sql/select/MultiSelectModel.java

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@
2121
import java.util.stream.Stream;
2222

2323
import org.jetbrains.annotations.NotNull;
24+
import org.mybatis.dynamic.sql.render.RendererFactory;
2425
import org.mybatis.dynamic.sql.render.RenderingStrategy;
25-
import org.mybatis.dynamic.sql.select.render.MultiSelectRenderer;
2626
import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
2727
import org.mybatis.dynamic.sql.util.Validator;
2828

@@ -47,12 +47,8 @@ public Stream<UnionQuery> unionQueries() {
4747

4848
@NotNull
4949
public SelectStatementProvider render(RenderingStrategy renderingStrategy) {
50-
return new MultiSelectRenderer.Builder()
51-
.withMultiSelectModel(this)
52-
.withRenderingStrategy(renderingStrategy)
53-
.withStatementConfiguration(statementConfiguration)
54-
.build()
55-
.render();
50+
return RendererFactory.createMultiSelectRenderer(this, statementConfiguration)
51+
.render(renderingStrategy);
5652
}
5753

5854
public static class Builder extends AbstractBuilder<Builder> {

src/main/java/org/mybatis/dynamic/sql/select/SelectModel.java

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,9 +21,9 @@
2121
import java.util.stream.Stream;
2222

2323
import org.jetbrains.annotations.NotNull;
24+
import org.mybatis.dynamic.sql.render.RendererFactory;
2425
import org.mybatis.dynamic.sql.render.RenderingContext;
2526
import org.mybatis.dynamic.sql.render.RenderingStrategy;
26-
import org.mybatis.dynamic.sql.select.render.SelectRenderer;
2727
import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
2828
import org.mybatis.dynamic.sql.util.Validator;
2929

@@ -56,10 +56,7 @@ public SelectStatementProvider render(RenderingStrategy renderingStrategy) {
5656
*/
5757
@NotNull
5858
public SelectStatementProvider render(RenderingContext renderingContext) {
59-
return SelectRenderer.withSelectModel(this)
60-
.withRenderingContext(renderingContext)
61-
.build()
62-
.render();
59+
return RendererFactory.createSelectRenderer(this).render(renderingContext);
6360
}
6461

6562
public static Builder withQueryExpressions(List<QueryExpressionModel> queryExpressions) {

src/main/java/org/mybatis/dynamic/sql/update/UpdateModel.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@
2626
import org.mybatis.dynamic.sql.common.CommonBuilder;
2727
import org.mybatis.dynamic.sql.common.OrderByModel;
2828
import org.mybatis.dynamic.sql.configuration.StatementConfiguration;
29+
import org.mybatis.dynamic.sql.render.RendererFactory;
2930
import org.mybatis.dynamic.sql.render.RenderingStrategy;
30-
import org.mybatis.dynamic.sql.update.render.UpdateRenderer;
3131
import org.mybatis.dynamic.sql.update.render.UpdateStatementProvider;
3232
import org.mybatis.dynamic.sql.util.AbstractColumnMapping;
3333
import org.mybatis.dynamic.sql.util.Validator;
@@ -79,11 +79,8 @@ public Optional<OrderByModel> orderByModel() {
7979

8080
@NotNull
8181
public UpdateStatementProvider render(RenderingStrategy renderingStrategy) {
82-
return UpdateRenderer.withUpdateModel(this)
83-
.withRenderingStrategy(renderingStrategy)
84-
.withStatementConfiguration(statementConfiguration)
85-
.build()
86-
.render();
82+
return RendererFactory.createUpdateRenderer(this, statementConfiguration)
83+
.render(renderingStrategy);
8784
}
8885

8986
public static Builder withTable(SqlTable table) {

0 commit comments

Comments
 (0)