1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.dynamic.sql.select.render;
17
18 import java.util.Objects;
19
20 import org.jspecify.annotations.Nullable;
21 import org.mybatis.dynamic.sql.render.RenderingContext;
22 import org.mybatis.dynamic.sql.render.RenderingStrategy;
23 import org.mybatis.dynamic.sql.select.SelectModel;
24 import org.mybatis.dynamic.sql.util.FragmentAndParameters;
25
26 public class SelectRenderer {
27 private final SelectModel selectModel;
28 private final RenderingStrategy renderingStrategy;
29
30 private SelectRenderer(Builder builder) {
31 selectModel = Objects.requireNonNull(builder.selectModel);
32 renderingStrategy = Objects.requireNonNull(builder.renderingStrategy);
33 }
34
35 public SelectStatementProvider render() {
36 RenderingContext renderingContext = RenderingContext.withRenderingStrategy(renderingStrategy)
37 .withStatementConfiguration(selectModel.statementConfiguration())
38 .build();
39
40 FragmentAndParameters fragmentAndParameters = SubQueryRenderer.withSelectModel(selectModel)
41 .withRenderingContext(renderingContext)
42 .build()
43 .render();
44
45 return DefaultSelectStatementProvider.withSelectStatement(fragmentAndParameters.fragment())
46 .withParameters(fragmentAndParameters.parameters())
47 .build();
48 }
49
50 public static Builder withSelectModel(SelectModel selectModel) {
51 return new Builder().withSelectModel(selectModel);
52 }
53
54 public static class Builder {
55 private @Nullable SelectModel selectModel;
56 private @Nullable RenderingStrategy renderingStrategy;
57
58 public Builder withRenderingStrategy(RenderingStrategy renderingStrategy) {
59 this.renderingStrategy = renderingStrategy;
60 return this;
61 }
62
63 public Builder withSelectModel(SelectModel selectModel) {
64 this.selectModel = selectModel;
65 return this;
66 }
67
68 public SelectRenderer build() {
69 return new SelectRenderer(this);
70 }
71 }
72 }