1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.dynamic.sql.where;
17
18 import java.util.Objects;
19 import java.util.Optional;
20
21 import org.jspecify.annotations.Nullable;
22 import org.mybatis.dynamic.sql.common.AbstractBooleanExpressionModel;
23 import org.mybatis.dynamic.sql.configuration.StatementConfiguration;
24 import org.mybatis.dynamic.sql.render.RenderingContext;
25 import org.mybatis.dynamic.sql.render.RenderingStrategy;
26 import org.mybatis.dynamic.sql.render.TableAliasCalculator;
27 import org.mybatis.dynamic.sql.util.FragmentAndParameters;
28 import org.mybatis.dynamic.sql.where.render.DefaultWhereClauseProvider;
29 import org.mybatis.dynamic.sql.where.render.WhereClauseProvider;
30 import org.mybatis.dynamic.sql.where.render.WhereRenderer;
31
32 public class WhereModel extends AbstractBooleanExpressionModel {
33 private final StatementConfiguration statementConfiguration;
34
35 private WhereModel(Builder builder) {
36 super(builder);
37 statementConfiguration = Objects.requireNonNull(builder.statementConfiguration);
38 }
39
40
41
42
43
44
45
46
47
48 public Optional<WhereClauseProvider> render(RenderingStrategy renderingStrategy) {
49 RenderingContext renderingContext = RenderingContext.withRenderingStrategy(renderingStrategy)
50 .withStatementConfiguration(statementConfiguration).build();
51
52 return render(renderingContext);
53 }
54
55 public Optional<WhereClauseProvider> render(RenderingStrategy renderingStrategy,
56 TableAliasCalculator tableAliasCalculator) {
57 RenderingContext renderingContext = RenderingContext
58 .withRenderingStrategy(renderingStrategy)
59 .withTableAliasCalculator(tableAliasCalculator)
60 .withStatementConfiguration(statementConfiguration)
61 .build();
62
63 return render(renderingContext);
64 }
65
66 public Optional<WhereClauseProvider> render(RenderingStrategy renderingStrategy, String parameterName) {
67 RenderingContext renderingContext = RenderingContext
68 .withRenderingStrategy(renderingStrategy)
69 .withParameterName(parameterName)
70 .withStatementConfiguration(statementConfiguration)
71 .build();
72
73 return render(renderingContext);
74 }
75
76 public Optional<WhereClauseProvider> render(RenderingStrategy renderingStrategy,
77 TableAliasCalculator tableAliasCalculator, String parameterName) {
78 RenderingContext renderingContext = RenderingContext
79 .withRenderingStrategy(renderingStrategy)
80 .withTableAliasCalculator(tableAliasCalculator)
81 .withParameterName(parameterName)
82 .withStatementConfiguration(statementConfiguration)
83 .build();
84
85 return render(renderingContext);
86 }
87
88 private Optional<WhereClauseProvider> render(RenderingContext renderingContext) {
89 return WhereRenderer.withWhereModel(this)
90 .withRenderingContext(renderingContext)
91 .build()
92 .render()
93 .map(this::toWhereClauseProvider);
94 }
95
96 private WhereClauseProvider toWhereClauseProvider(FragmentAndParameters fragmentAndParameters) {
97 return DefaultWhereClauseProvider.withWhereClause(fragmentAndParameters.fragment())
98 .withParameters(fragmentAndParameters.parameters())
99 .build();
100 }
101
102 public static class Builder extends AbstractBuilder<Builder> {
103 private @Nullable StatementConfiguration statementConfiguration;
104
105 public Builder withStatementConfiguration(StatementConfiguration statementConfiguration) {
106 this.statementConfiguration = statementConfiguration;
107 return this;
108 }
109
110 public WhereModel build() {
111 return new WhereModel(this);
112 }
113
114 @Override
115 protected Builder getThis() {
116 return this;
117 }
118 }
119 }