1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.dynamic.sql.insert;
17
18 import java.util.Objects;
19 import java.util.Optional;
20
21 import org.jspecify.annotations.Nullable;
22 import org.mybatis.dynamic.sql.SqlTable;
23 import org.mybatis.dynamic.sql.configuration.StatementConfiguration;
24 import org.mybatis.dynamic.sql.insert.render.InsertSelectRenderer;
25 import org.mybatis.dynamic.sql.insert.render.InsertSelectStatementProvider;
26 import org.mybatis.dynamic.sql.render.RenderingStrategy;
27 import org.mybatis.dynamic.sql.select.SelectModel;
28
29 public class InsertSelectModel {
30 private final SqlTable table;
31 private final @Nullable InsertColumnListModel columnList;
32 private final SelectModel selectModel;
33 private final StatementConfiguration statementConfiguration;
34
35 private InsertSelectModel(Builder builder) {
36 table = Objects.requireNonNull(builder.table);
37 columnList = builder.columnList;
38 selectModel = Objects.requireNonNull(builder.selectModel);
39 statementConfiguration = Objects.requireNonNull(builder.statementConfiguration);
40 }
41
42 public SqlTable table() {
43 return table;
44 }
45
46 public SelectModel selectModel() {
47 return selectModel;
48 }
49
50 public Optional<InsertColumnListModel> columnList() {
51 return Optional.ofNullable(columnList);
52 }
53
54 public StatementConfiguration statementConfiguration() {
55 return statementConfiguration;
56 }
57
58 public InsertSelectStatementProvider render(RenderingStrategy renderingStrategy) {
59 return InsertSelectRenderer.withInsertSelectModel(this)
60 .withRenderingStrategy(renderingStrategy)
61 .build()
62 .render();
63 }
64
65 public static Builder withTable(SqlTable table) {
66 return new Builder().withTable(table);
67 }
68
69 public static class Builder {
70 private @Nullable SqlTable table;
71 private @Nullable InsertColumnListModel columnList;
72 private @Nullable SelectModel selectModel;
73 private @Nullable StatementConfiguration statementConfiguration;
74
75 public Builder withTable(SqlTable table) {
76 this.table = table;
77 return this;
78 }
79
80 public Builder withColumnList(@Nullable InsertColumnListModel columnList) {
81 this.columnList = columnList;
82 return this;
83 }
84
85 public Builder withSelectModel(SelectModel selectModel) {
86 this.selectModel = selectModel;
87 return this;
88 }
89
90 public Builder withStatementConfiguration(StatementConfiguration statementConfiguration) {
91 this.statementConfiguration = statementConfiguration;
92 return this;
93 }
94
95 public InsertSelectModel build() {
96 return new InsertSelectModel(this);
97 }
98 }
99 }