Skip to content

Commit 4b70644

Browse files
committed
Refactor to make things simpler.
Sometimes it is better to use an "if" statement than to use Optional theatre.
1 parent 0fb841f commit 4b70644

File tree

12 files changed

+180
-184
lines changed

12 files changed

+180
-184
lines changed

src/main/java/org/mybatis/dynamic/sql/CriteriaGroupWithConnector.java renamed to src/main/java/org/mybatis/dynamic/sql/AndOrCriteriaGroup.java

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -16,17 +16,24 @@
1616
package org.mybatis.dynamic.sql;
1717

1818
import java.util.ArrayList;
19+
import java.util.Collections;
1920
import java.util.List;
2021
import java.util.Objects;
21-
import java.util.function.Function;
22-
import java.util.stream.Stream;
2322

24-
public class CriteriaGroupWithConnector {
23+
/**
24+
* This class represents a criteria group with either an AND or an OR connector.
25+
* This class is intentionally NOT derived from SqlCriterion because we only want it to be
26+
* available where an AND or an OR condition is appropriate.
27+
*
28+
* @author Jeff Butler
29+
* @since 1.4.0
30+
*/
31+
public class AndOrCriteriaGroup {
2532
private final String connector;
2633
private final SqlCriterion initialCriterion;
27-
private final List<CriteriaGroupWithConnector> subCriteria;
34+
private final List<AndOrCriteriaGroup> subCriteria;
2835

29-
private CriteriaGroupWithConnector(Builder builder) {
36+
private AndOrCriteriaGroup(Builder builder) {
3037
connector = Objects.requireNonNull(builder.connector);
3138
initialCriterion = Objects.requireNonNull(builder.initialCriterion);
3239
subCriteria = builder.subCriteria;
@@ -40,14 +47,14 @@ public SqlCriterion initialCriterion() {
4047
return initialCriterion;
4148
}
4249

43-
public <R> Stream<R> mapSubCriteria(Function<CriteriaGroupWithConnector, R> mapper) {
44-
return subCriteria.stream().map(mapper);
50+
public List<AndOrCriteriaGroup> subCriteria() {
51+
return Collections.unmodifiableList(subCriteria);
4552
}
4653

4754
public static class Builder {
4855
private String connector;
4956
private SqlCriterion initialCriterion;
50-
private final List<CriteriaGroupWithConnector> subCriteria = new ArrayList<>();
57+
private final List<AndOrCriteriaGroup> subCriteria = new ArrayList<>();
5158

5259
public Builder withConnector(String connector) {
5360
this.connector = connector;
@@ -59,13 +66,13 @@ public Builder withInitialCriterion(SqlCriterion initialCriterion) {
5966
return this;
6067
}
6168

62-
public Builder withSubCriteria(List<CriteriaGroupWithConnector> subCriteria) {
69+
public Builder withSubCriteria(List<AndOrCriteriaGroup> subCriteria) {
6370
this.subCriteria.addAll(subCriteria);
6471
return this;
6572
}
6673

67-
public CriteriaGroupWithConnector build() {
68-
return new CriteriaGroupWithConnector(this);
74+
public AndOrCriteriaGroup build() {
75+
return new AndOrCriteriaGroup(this);
6976
}
7077
}
7178
}

src/main/java/org/mybatis/dynamic/sql/CriteriaGroup.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,14 @@
1717

1818
import java.util.Objects;
1919

20+
/**
21+
* This class represents a criteria group without an AND or an OR connector. This is useful
22+
* in situations where the initial SqlCriterion in a list should be further grouped
23+
* as in an expression like ((A &lt; 5 and B &gt; 6) or C = 3)
24+
*
25+
* @author Jeff Butler, inspired by @JoshuaJeme
26+
* @since 1.4.0
27+
*/
2028
public class CriteriaGroup extends SqlCriterion {
2129
private final SqlCriterion initialCriterion;
2230

src/main/java/org/mybatis/dynamic/sql/SqlBuilder.java

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -215,42 +215,42 @@ static WhereDSL where() {
215215
}
216216

217217
static <T> WhereDSL where(BindableColumn<T> column, VisitableCondition<T> condition,
218-
CriteriaGroupWithConnector... subCriteria) {
218+
AndOrCriteriaGroup... subCriteria) {
219219
return WhereDSL.where().where(column, condition, subCriteria);
220220
}
221221

222-
static WhereDSL where(ExistsPredicate existsPredicate, CriteriaGroupWithConnector... subCriteria) {
222+
static WhereDSL where(ExistsPredicate existsPredicate, AndOrCriteriaGroup... subCriteria) {
223223
return WhereDSL.where().where(existsPredicate, subCriteria);
224224
}
225225

226226
// where condition connectors
227227
static <T> CriteriaGroup group(BindableColumn<T> column, VisitableCondition<T> condition,
228-
CriteriaGroupWithConnector...subCriteria) {
228+
AndOrCriteriaGroup...subCriteria) {
229229
return new CriteriaGroup.Builder()
230230
.withInitialCriterion(new ColumnAndConditionCriterion.Builder<T>().withColumn(column)
231231
.withCondition(condition).build())
232232
.withSubCriteria(Arrays.asList(subCriteria))
233233
.build();
234234
}
235235

236-
static CriteriaGroup group(ExistsPredicate existsPredicate, CriteriaGroupWithConnector...subCriteria) {
236+
static CriteriaGroup group(ExistsPredicate existsPredicate, AndOrCriteriaGroup...subCriteria) {
237237
return new CriteriaGroup.Builder()
238238
.withInitialCriterion(new ExistsCriterion.Builder()
239239
.withExistsPredicate(existsPredicate).build())
240240
.withSubCriteria(Arrays.asList(subCriteria))
241241
.build();
242242
}
243243

244-
static CriteriaGroup group(CriteriaGroup criterionGroup, CriteriaGroupWithConnector...subCriteria) {
244+
static CriteriaGroup group(CriteriaGroup criterionGroup, AndOrCriteriaGroup...subCriteria) {
245245
return new CriteriaGroup.Builder()
246246
.withInitialCriterion(criterionGroup)
247247
.withSubCriteria(Arrays.asList(subCriteria))
248248
.build();
249249
}
250250

251-
static <T> CriteriaGroupWithConnector or(BindableColumn<T> column, VisitableCondition<T> condition,
252-
CriteriaGroupWithConnector...subCriteria) {
253-
return new CriteriaGroupWithConnector.Builder()
251+
static <T> AndOrCriteriaGroup or(BindableColumn<T> column, VisitableCondition<T> condition,
252+
AndOrCriteriaGroup...subCriteria) {
253+
return new AndOrCriteriaGroup.Builder()
254254
.withInitialCriterion(ColumnAndConditionCriterion.withColumn(column)
255255
.withCondition(condition)
256256
.build())
@@ -259,26 +259,26 @@ static <T> CriteriaGroupWithConnector or(BindableColumn<T> column, VisitableCond
259259
.build();
260260
}
261261

262-
static CriteriaGroupWithConnector or(ExistsPredicate existsPredicate, CriteriaGroupWithConnector...subCriteria) {
263-
return new CriteriaGroupWithConnector.Builder()
262+
static AndOrCriteriaGroup or(ExistsPredicate existsPredicate, AndOrCriteriaGroup...subCriteria) {
263+
return new AndOrCriteriaGroup.Builder()
264264
.withInitialCriterion(new ExistsCriterion.Builder()
265265
.withExistsPredicate(existsPredicate).build())
266266
.withConnector("or") //$NON-NLS-1$
267267
.withSubCriteria(Arrays.asList(subCriteria))
268268
.build();
269269
}
270270

271-
static CriteriaGroupWithConnector or(CriteriaGroup criterionGroup, CriteriaGroupWithConnector...subCriteria) {
272-
return new CriteriaGroupWithConnector.Builder()
271+
static AndOrCriteriaGroup or(CriteriaGroup criterionGroup, AndOrCriteriaGroup...subCriteria) {
272+
return new AndOrCriteriaGroup.Builder()
273273
.withConnector("or") //$NON-NLS-1$
274274
.withInitialCriterion(criterionGroup)
275275
.withSubCriteria(Arrays.asList(subCriteria))
276276
.build();
277277
}
278278

279-
static <T> CriteriaGroupWithConnector and(BindableColumn<T> column, VisitableCondition<T> condition,
280-
CriteriaGroupWithConnector...subCriteria) {
281-
return new CriteriaGroupWithConnector.Builder()
279+
static <T> AndOrCriteriaGroup and(BindableColumn<T> column, VisitableCondition<T> condition,
280+
AndOrCriteriaGroup...subCriteria) {
281+
return new AndOrCriteriaGroup.Builder()
282282
.withInitialCriterion(ColumnAndConditionCriterion.withColumn(column)
283283
.withCondition(condition)
284284
.build())
@@ -287,17 +287,17 @@ static <T> CriteriaGroupWithConnector and(BindableColumn<T> column, VisitableCon
287287
.build();
288288
}
289289

290-
static CriteriaGroupWithConnector and(ExistsPredicate existsPredicate, CriteriaGroupWithConnector...subCriteria) {
291-
return new CriteriaGroupWithConnector.Builder()
290+
static AndOrCriteriaGroup and(ExistsPredicate existsPredicate, AndOrCriteriaGroup...subCriteria) {
291+
return new AndOrCriteriaGroup.Builder()
292292
.withInitialCriterion(new ExistsCriterion.Builder()
293293
.withExistsPredicate(existsPredicate).build())
294294
.withConnector("and") //$NON-NLS-1$
295295
.withSubCriteria(Arrays.asList(subCriteria))
296296
.build();
297297
}
298298

299-
static CriteriaGroupWithConnector and(CriteriaGroup criterionGroup, CriteriaGroupWithConnector...subCriteria) {
300-
return new CriteriaGroupWithConnector.Builder()
299+
static AndOrCriteriaGroup and(CriteriaGroup criterionGroup, AndOrCriteriaGroup...subCriteria) {
300+
return new AndOrCriteriaGroup.Builder()
301301
.withConnector("and") //$NON-NLS-1$
302302
.withInitialCriterion(criterionGroup)
303303
.withSubCriteria(Arrays.asList(subCriteria))

src/main/java/org/mybatis/dynamic/sql/SqlCriterion.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,28 +16,27 @@
1616
package org.mybatis.dynamic.sql;
1717

1818
import java.util.ArrayList;
19+
import java.util.Collections;
1920
import java.util.List;
20-
import java.util.function.Function;
21-
import java.util.stream.Stream;
2221

2322
public abstract class SqlCriterion {
2423

25-
private final List<CriteriaGroupWithConnector> subCriteria = new ArrayList<>();
24+
private final List<AndOrCriteriaGroup> subCriteria = new ArrayList<>();
2625

2726
protected SqlCriterion(AbstractBuilder<?> builder) {
2827
subCriteria.addAll(builder.subCriteria);
2928
}
3029

31-
public <R> Stream<R> mapSubCriteria(Function<CriteriaGroupWithConnector, R> mapper) {
32-
return subCriteria.stream().map(mapper);
30+
public List<AndOrCriteriaGroup> subCriteria() {
31+
return Collections.unmodifiableList(subCriteria);
3332
}
3433

3534
public abstract <R> R accept(SqlCriterionVisitor<R> visitor);
3635

3736
protected abstract static class AbstractBuilder<T extends AbstractBuilder<T>> {
38-
private final List<CriteriaGroupWithConnector> subCriteria = new ArrayList<>();
37+
private final List<AndOrCriteriaGroup> subCriteria = new ArrayList<>();
3938

40-
public T withSubCriteria(List<CriteriaGroupWithConnector> subCriteria) {
39+
public T withSubCriteria(List<AndOrCriteriaGroup> subCriteria) {
4140
this.subCriteria.addAll(subCriteria);
4241
return getThis();
4342
}

src/main/java/org/mybatis/dynamic/sql/where/AbstractWhereDSL.java

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -23,47 +23,47 @@
2323
import org.mybatis.dynamic.sql.BindableColumn;
2424
import org.mybatis.dynamic.sql.ColumnAndConditionCriterion;
2525
import org.mybatis.dynamic.sql.CriteriaGroup;
26-
import org.mybatis.dynamic.sql.CriteriaGroupWithConnector;
26+
import org.mybatis.dynamic.sql.AndOrCriteriaGroup;
2727
import org.mybatis.dynamic.sql.ExistsCriterion;
2828
import org.mybatis.dynamic.sql.ExistsPredicate;
2929
import org.mybatis.dynamic.sql.SqlCriterion;
3030
import org.mybatis.dynamic.sql.VisitableCondition;
3131

3232
public abstract class AbstractWhereDSL<T extends AbstractWhereDSL<T>> {
3333
private SqlCriterion initialCriterion; // WARNING - may be null!
34-
private final List<CriteriaGroupWithConnector> subCriteria = new ArrayList<>();
34+
private final List<AndOrCriteriaGroup> subCriteria = new ArrayList<>();
3535

3636
@NotNull
3737
public <S> T where(BindableColumn<S> column, VisitableCondition<S> condition,
38-
CriteriaGroupWithConnector...subCriteria) {
38+
AndOrCriteriaGroup...subCriteria) {
3939
return where(column, condition, Arrays.asList(subCriteria));
4040
}
4141

4242
@NotNull
4343
public <S> T where(BindableColumn<S> column, VisitableCondition<S> condition,
44-
List<CriteriaGroupWithConnector> subCriteria) {
44+
List<AndOrCriteriaGroup> subCriteria) {
4545
initialCriterion = buildCriterion(column, condition, subCriteria);
4646
return getThis();
4747
}
4848

4949
@NotNull
50-
public T where(ExistsPredicate existsPredicate, CriteriaGroupWithConnector...subCriteria) {
50+
public T where(ExistsPredicate existsPredicate, AndOrCriteriaGroup...subCriteria) {
5151
return where(existsPredicate, Arrays.asList(subCriteria));
5252
}
5353

5454
@NotNull
55-
public T where(ExistsPredicate existsPredicate, List<CriteriaGroupWithConnector> subCriteria) {
55+
public T where(ExistsPredicate existsPredicate, List<AndOrCriteriaGroup> subCriteria) {
5656
initialCriterion = buildCriterion(existsPredicate, subCriteria);
5757
return getThis();
5858
}
5959

6060
@NotNull
61-
public T where(CriteriaGroup criterion, CriteriaGroupWithConnector...subCriteria) {
61+
public T where(CriteriaGroup criterion, AndOrCriteriaGroup...subCriteria) {
6262
return where(criterion, Arrays.asList(subCriteria));
6363
}
6464

6565
@NotNull
66-
public T where(CriteriaGroup criterion, List<CriteriaGroupWithConnector> subCriteria) {
66+
public T where(CriteriaGroup criterion, List<AndOrCriteriaGroup> subCriteria) {
6767
initialCriterion = buildCriterion(criterion, subCriteria);
6868
return getThis();
6969
}
@@ -76,70 +76,70 @@ public T applyWhere(WhereApplier whereApplier) {
7676

7777
@NotNull
7878
public <S> T and(BindableColumn<S> column, VisitableCondition<S> condition,
79-
CriteriaGroupWithConnector...subCriteria) {
79+
AndOrCriteriaGroup...subCriteria) {
8080
return and(column, condition, Arrays.asList(subCriteria));
8181
}
8282

8383
@NotNull
8484
public <S> T and(BindableColumn<S> column, VisitableCondition<S> condition,
85-
List<CriteriaGroupWithConnector> subCriteria) {
85+
List<AndOrCriteriaGroup> subCriteria) {
8686
addCriteriaGroup("and", buildCriterion(column, condition), subCriteria);
8787
return getThis();
8888
}
8989

9090
@NotNull
91-
public T and(ExistsPredicate existsPredicate, CriteriaGroupWithConnector...subCriteria) {
91+
public T and(ExistsPredicate existsPredicate, AndOrCriteriaGroup...subCriteria) {
9292
return and(existsPredicate, Arrays.asList(subCriteria));
9393
}
9494

9595
@NotNull
96-
public T and(ExistsPredicate existsPredicate, List<CriteriaGroupWithConnector> subCriteria) {
96+
public T and(ExistsPredicate existsPredicate, List<AndOrCriteriaGroup> subCriteria) {
9797
addCriteriaGroup("and", buildCriterion(existsPredicate), subCriteria);
9898
return getThis();
9999
}
100100

101101
@NotNull
102-
public T and(CriteriaGroup criteriaGroup, CriteriaGroupWithConnector...subCriteria) {
102+
public T and(CriteriaGroup criteriaGroup, AndOrCriteriaGroup...subCriteria) {
103103
return and(criteriaGroup, Arrays.asList(subCriteria));
104104
}
105105

106106
@NotNull
107-
public T and(CriteriaGroup criteriaGroup, List<CriteriaGroupWithConnector> subCriteria) {
107+
public T and(CriteriaGroup criteriaGroup, List<AndOrCriteriaGroup> subCriteria) {
108108
addCriteriaGroup("and", buildCriterion(criteriaGroup), subCriteria);
109109
return getThis();
110110
}
111111

112112
@NotNull
113113
public <S> T or(BindableColumn<S> column, VisitableCondition<S> condition,
114-
CriteriaGroupWithConnector...subCriteria) {
114+
AndOrCriteriaGroup...subCriteria) {
115115
return or(column, condition, Arrays.asList(subCriteria));
116116
}
117117

118118
@NotNull
119119
public <S> T or(BindableColumn<S> column, VisitableCondition<S> condition,
120-
List<CriteriaGroupWithConnector> subCriteria) {
120+
List<AndOrCriteriaGroup> subCriteria) {
121121
addCriteriaGroup("or", buildCriterion(column, condition), subCriteria);
122122
return getThis();
123123
}
124124

125125
@NotNull
126-
public T or(ExistsPredicate existsPredicate, CriteriaGroupWithConnector...subCriteria) {
126+
public T or(ExistsPredicate existsPredicate, AndOrCriteriaGroup...subCriteria) {
127127
return or(existsPredicate, Arrays.asList(subCriteria));
128128
}
129129

130130
@NotNull
131-
public T or(ExistsPredicate existsPredicate, List<CriteriaGroupWithConnector> subCriteria) {
131+
public T or(ExistsPredicate existsPredicate, List<AndOrCriteriaGroup> subCriteria) {
132132
addCriteriaGroup("or", buildCriterion(existsPredicate), subCriteria);
133133
return getThis();
134134
}
135135

136136
@NotNull
137-
public T or(CriteriaGroup criteriaGroup, CriteriaGroupWithConnector...subCriteria) {
137+
public T or(CriteriaGroup criteriaGroup, AndOrCriteriaGroup...subCriteria) {
138138
return or(criteriaGroup, Arrays.asList(subCriteria));
139139
}
140140

141141
@NotNull
142-
public T or(CriteriaGroup criteriaGroup, List<CriteriaGroupWithConnector> subCriteria) {
142+
public T or(CriteriaGroup criteriaGroup, List<AndOrCriteriaGroup> subCriteria) {
143143
addCriteriaGroup("or", buildCriterion(criteriaGroup), subCriteria);
144144
return getThis();
145145
}
@@ -154,7 +154,7 @@ private <R> ColumnAndConditionCriterion<R> buildCriterion(BindableColumn<R> colu
154154
}
155155

156156
private <R> ColumnAndConditionCriterion<R> buildCriterion(BindableColumn<R> column, VisitableCondition<R> condition,
157-
List<CriteriaGroupWithConnector> subCriteria) {
157+
List<AndOrCriteriaGroup> subCriteria) {
158158
return ColumnAndConditionCriterion.withColumn(column)
159159
.withCondition(condition)
160160
.withSubCriteria(subCriteria)
@@ -166,21 +166,21 @@ private ExistsCriterion buildCriterion(ExistsPredicate existsPredicate) {
166166
}
167167

168168
private ExistsCriterion buildCriterion(ExistsPredicate existsPredicate,
169-
List<CriteriaGroupWithConnector> subCriteria) {
169+
List<AndOrCriteriaGroup> subCriteria) {
170170
return new ExistsCriterion.Builder().withExistsPredicate(existsPredicate).withSubCriteria(subCriteria).build();
171171
}
172172

173173
private CriteriaGroup buildCriterion(CriteriaGroup criteriaGroup) {
174174
return new CriteriaGroup.Builder().withInitialCriterion(criteriaGroup).build();
175175
}
176176

177-
private CriteriaGroup buildCriterion(CriteriaGroup criteriaGroup, List<CriteriaGroupWithConnector> subCriteria) {
177+
private CriteriaGroup buildCriterion(CriteriaGroup criteriaGroup, List<AndOrCriteriaGroup> subCriteria) {
178178
return new CriteriaGroup.Builder().withInitialCriterion(criteriaGroup).withSubCriteria(subCriteria).build();
179179
}
180180

181181
private void addCriteriaGroup(String connector, SqlCriterion initialCriterion,
182-
List<CriteriaGroupWithConnector> subCriteria) {
183-
this.subCriteria.add(new CriteriaGroupWithConnector.Builder()
182+
List<AndOrCriteriaGroup> subCriteria) {
183+
this.subCriteria.add(new AndOrCriteriaGroup.Builder()
184184
.withInitialCriterion(initialCriterion)
185185
.withConnector(connector)
186186
.withSubCriteria(subCriteria)

0 commit comments

Comments
 (0)