Skip to content

Commit 0fb841f

Browse files
committed
Little optimizations
1 parent 6385849 commit 0fb841f

File tree

2 files changed

+89
-104
lines changed

2 files changed

+89
-104
lines changed

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

Lines changed: 60 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,15 @@ public abstract class AbstractWhereDSL<T extends AbstractWhereDSL<T>> {
3434
private final List<CriteriaGroupWithConnector> subCriteria = new ArrayList<>();
3535

3636
@NotNull
37-
public <S> T where(BindableColumn<S> column, VisitableCondition<S> condition, CriteriaGroupWithConnector...subCriteria) {
37+
public <S> T where(BindableColumn<S> column, VisitableCondition<S> condition,
38+
CriteriaGroupWithConnector...subCriteria) {
3839
return where(column, condition, Arrays.asList(subCriteria));
3940
}
4041

4142
@NotNull
42-
public <S> T where(BindableColumn<S> column, VisitableCondition<S> condition, List<CriteriaGroupWithConnector> subCriteria) {
43-
initialCriterion = ColumnAndConditionCriterion.withColumn(column)
44-
.withCondition(condition)
45-
.withSubCriteria(subCriteria)
46-
.build();
43+
public <S> T where(BindableColumn<S> column, VisitableCondition<S> condition,
44+
List<CriteriaGroupWithConnector> subCriteria) {
45+
initialCriterion = buildCriterion(column, condition, subCriteria);
4746
return getThis();
4847
}
4948

@@ -54,10 +53,7 @@ public T where(ExistsPredicate existsPredicate, CriteriaGroupWithConnector...sub
5453

5554
@NotNull
5655
public T where(ExistsPredicate existsPredicate, List<CriteriaGroupWithConnector> subCriteria) {
57-
initialCriterion = new ExistsCriterion.Builder()
58-
.withExistsPredicate(existsPredicate)
59-
.withSubCriteria(subCriteria)
60-
.build();
56+
initialCriterion = buildCriterion(existsPredicate, subCriteria);
6157
return getThis();
6258
}
6359

@@ -68,10 +64,7 @@ public T where(CriteriaGroup criterion, CriteriaGroupWithConnector...subCriteria
6864

6965
@NotNull
7066
public T where(CriteriaGroup criterion, List<CriteriaGroupWithConnector> subCriteria) {
71-
initialCriterion = new CriteriaGroup.Builder()
72-
.withInitialCriterion(criterion)
73-
.withSubCriteria(subCriteria)
74-
.build();
67+
initialCriterion = buildCriterion(criterion, subCriteria);
7568
return getThis();
7669
}
7770

@@ -82,17 +75,15 @@ public T applyWhere(WhereApplier whereApplier) {
8275
}
8376

8477
@NotNull
85-
public <S> T and(BindableColumn<S> column, VisitableCondition<S> condition, CriteriaGroupWithConnector...subCriteria) {
78+
public <S> T and(BindableColumn<S> column, VisitableCondition<S> condition,
79+
CriteriaGroupWithConnector...subCriteria) {
8680
return and(column, condition, Arrays.asList(subCriteria));
8781
}
8882

8983
@NotNull
90-
public <S> T and(BindableColumn<S> column, VisitableCondition<S> condition, List<CriteriaGroupWithConnector> subCriteria) {
91-
this.subCriteria.add(new CriteriaGroupWithConnector.Builder()
92-
.withInitialCriterion(ColumnAndConditionCriterion.withColumn(column).withCondition(condition).build())
93-
.withConnector("and") //$NON-NLS-1$
94-
.withSubCriteria(subCriteria)
95-
.build());
84+
public <S> T and(BindableColumn<S> column, VisitableCondition<S> condition,
85+
List<CriteriaGroupWithConnector> subCriteria) {
86+
addCriteriaGroup("and", buildCriterion(column, condition), subCriteria);
9687
return getThis();
9788
}
9889

@@ -103,11 +94,7 @@ public T and(ExistsPredicate existsPredicate, CriteriaGroupWithConnector...subCr
10394

10495
@NotNull
10596
public T and(ExistsPredicate existsPredicate, List<CriteriaGroupWithConnector> subCriteria) {
106-
this.subCriteria.add(new CriteriaGroupWithConnector.Builder()
107-
.withInitialCriterion(new ExistsCriterion.Builder().withExistsPredicate(existsPredicate).build())
108-
.withConnector("and") //$NON-NLS-1$
109-
.withSubCriteria(subCriteria)
110-
.build());
97+
addCriteriaGroup("and", buildCriterion(existsPredicate), subCriteria);
11198
return getThis();
11299
}
113100

@@ -118,26 +105,20 @@ public T and(CriteriaGroup criteriaGroup, CriteriaGroupWithConnector...subCriter
118105

119106
@NotNull
120107
public T and(CriteriaGroup criteriaGroup, List<CriteriaGroupWithConnector> subCriteria) {
121-
this.subCriteria.add(new CriteriaGroupWithConnector.Builder()
122-
.withInitialCriterion(new CriteriaGroup.Builder().withInitialCriterion(criteriaGroup).build())
123-
.withConnector("and") //$NON-NLS-1$
124-
.withSubCriteria(subCriteria)
125-
.build());
108+
addCriteriaGroup("and", buildCriterion(criteriaGroup), subCriteria);
126109
return getThis();
127110
}
128111

129112
@NotNull
130-
public <S> T or(BindableColumn<S> column, VisitableCondition<S> condition, CriteriaGroupWithConnector...subCriteria) {
113+
public <S> T or(BindableColumn<S> column, VisitableCondition<S> condition,
114+
CriteriaGroupWithConnector...subCriteria) {
131115
return or(column, condition, Arrays.asList(subCriteria));
132116
}
133117

134118
@NotNull
135-
public <S> T or(BindableColumn<S> column, VisitableCondition<S> condition, List<CriteriaGroupWithConnector> subCriteria) {
136-
this.subCriteria.add(new CriteriaGroupWithConnector.Builder()
137-
.withInitialCriterion(ColumnAndConditionCriterion.withColumn(column).withCondition(condition).build())
138-
.withConnector("or") //$NON-NLS-1$
139-
.withSubCriteria(subCriteria)
140-
.build());
119+
public <S> T or(BindableColumn<S> column, VisitableCondition<S> condition,
120+
List<CriteriaGroupWithConnector> subCriteria) {
121+
addCriteriaGroup("or", buildCriterion(column, condition), subCriteria);
141122
return getThis();
142123
}
143124

@@ -148,11 +129,7 @@ public T or(ExistsPredicate existsPredicate, CriteriaGroupWithConnector...subCri
148129

149130
@NotNull
150131
public T or(ExistsPredicate existsPredicate, List<CriteriaGroupWithConnector> subCriteria) {
151-
this.subCriteria.add(new CriteriaGroupWithConnector.Builder()
152-
.withInitialCriterion(new ExistsCriterion.Builder().withExistsPredicate(existsPredicate).build())
153-
.withConnector("or") //$NON-NLS-1$
154-
.withSubCriteria(subCriteria)
155-
.build());
132+
addCriteriaGroup("or", buildCriterion(existsPredicate), subCriteria);
156133
return getThis();
157134
}
158135

@@ -163,17 +140,52 @@ public T or(CriteriaGroup criteriaGroup, CriteriaGroupWithConnector...subCriteri
163140

164141
@NotNull
165142
public T or(CriteriaGroup criteriaGroup, List<CriteriaGroupWithConnector> subCriteria) {
166-
this.subCriteria.add(new CriteriaGroupWithConnector.Builder()
167-
.withInitialCriterion(new CriteriaGroup.Builder().withInitialCriterion(criteriaGroup).build())
168-
.withConnector("or") //$NON-NLS-1$
169-
.withSubCriteria(subCriteria)
170-
.build());
143+
addCriteriaGroup("or", buildCriterion(criteriaGroup), subCriteria);
171144
return getThis();
172145
}
173146

174147
protected WhereModel internalBuild() {
175148
return new WhereModel(initialCriterion, subCriteria);
176149
}
177150

151+
private <R> ColumnAndConditionCriterion<R> buildCriterion(BindableColumn<R> column,
152+
VisitableCondition<R> condition) {
153+
return ColumnAndConditionCriterion.withColumn(column).withCondition(condition).build();
154+
}
155+
156+
private <R> ColumnAndConditionCriterion<R> buildCriterion(BindableColumn<R> column, VisitableCondition<R> condition,
157+
List<CriteriaGroupWithConnector> subCriteria) {
158+
return ColumnAndConditionCriterion.withColumn(column)
159+
.withCondition(condition)
160+
.withSubCriteria(subCriteria)
161+
.build();
162+
}
163+
164+
private ExistsCriterion buildCriterion(ExistsPredicate existsPredicate) {
165+
return new ExistsCriterion.Builder().withExistsPredicate(existsPredicate).build();
166+
}
167+
168+
private ExistsCriterion buildCriterion(ExistsPredicate existsPredicate,
169+
List<CriteriaGroupWithConnector> subCriteria) {
170+
return new ExistsCriterion.Builder().withExistsPredicate(existsPredicate).withSubCriteria(subCriteria).build();
171+
}
172+
173+
private CriteriaGroup buildCriterion(CriteriaGroup criteriaGroup) {
174+
return new CriteriaGroup.Builder().withInitialCriterion(criteriaGroup).build();
175+
}
176+
177+
private CriteriaGroup buildCriterion(CriteriaGroup criteriaGroup, List<CriteriaGroupWithConnector> subCriteria) {
178+
return new CriteriaGroup.Builder().withInitialCriterion(criteriaGroup).withSubCriteria(subCriteria).build();
179+
}
180+
181+
private void addCriteriaGroup(String connector, SqlCriterion initialCriterion,
182+
List<CriteriaGroupWithConnector> subCriteria) {
183+
this.subCriteria.add(new CriteriaGroupWithConnector.Builder()
184+
.withInitialCriterion(initialCriterion)
185+
.withConnector(connector)
186+
.withSubCriteria(subCriteria)
187+
.build());
188+
}
189+
178190
protected abstract T getThis();
179191
}

src/main/kotlin/org/mybatis/dynamic/sql/util/kotlin/CriteriaCollector.kt

Lines changed: 29 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import org.mybatis.dynamic.sql.CriteriaGroup
2121
import org.mybatis.dynamic.sql.CriteriaGroupWithConnector
2222
import org.mybatis.dynamic.sql.ExistsCriterion
2323
import org.mybatis.dynamic.sql.ExistsPredicate
24+
import org.mybatis.dynamic.sql.SqlCriterion
2425
import org.mybatis.dynamic.sql.VisitableCondition
2526

2627
typealias CriteriaReceiver = CriteriaCollector.() -> Unit
@@ -34,78 +35,50 @@ class CriteriaCollector {
3435
condition: VisitableCondition<T>,
3536
criteriaReceiver: CriteriaReceiver = {}
3637
): CriteriaCollector =
37-
apply {
38-
criteria.add(CriteriaGroupWithConnector.Builder()
39-
.withInitialCriterion(ColumnAndConditionCriterion.withColumn(column)
40-
.withCondition(condition)
41-
.build())
42-
.withConnector("and")
43-
.withSubCriteria(CriteriaCollector().apply(criteriaReceiver).criteria)
44-
.build()
45-
)
46-
}
38+
addCriteriaGroup("and", buildCriterion(column, condition), criteriaReceiver)
4739

4840
fun and(existsPredicate: ExistsPredicate, criteriaReceiver: CriteriaReceiver = {}): CriteriaCollector =
49-
apply {
50-
criteria.add(CriteriaGroupWithConnector.Builder()
51-
.withInitialCriterion(ExistsCriterion.Builder()
52-
.withExistsPredicate(existsPredicate)
53-
.build())
54-
.withConnector("and")
55-
.withSubCriteria(CriteriaCollector().apply(criteriaReceiver).criteria)
56-
.build()
57-
)
58-
}
41+
addCriteriaGroup("and", buildCriterion(existsPredicate), criteriaReceiver)
5942

6043
fun and(criteriaGroup: CriteriaGroup, criteriaReceiver: CriteriaReceiver = {}): CriteriaCollector =
61-
apply {
62-
criteria.add(CriteriaGroupWithConnector.Builder()
63-
.withInitialCriterion(CriteriaGroup.Builder()
64-
.withInitialCriterion(criteriaGroup)
65-
.build())
66-
.withSubCriteria(CriteriaCollector().apply(criteriaReceiver).criteria)
67-
.withConnector("and")
68-
.build()
69-
)
70-
}
44+
addCriteriaGroup("and", buildCriterion(criteriaGroup), criteriaReceiver)
7145

7246
fun <T> or(
7347
column: BindableColumn<T>,
7448
condition: VisitableCondition<T>,
7549
criteriaReceiver: CriteriaReceiver = {}
7650
): CriteriaCollector =
77-
apply {
78-
criteria.add(CriteriaGroupWithConnector.Builder()
79-
.withInitialCriterion(ColumnAndConditionCriterion.withColumn(column)
80-
.withCondition(condition)
81-
.build())
82-
.withConnector("or")
83-
.withSubCriteria(CriteriaCollector().apply(criteriaReceiver).criteria)
84-
.build()
85-
)
86-
}
51+
addCriteriaGroup("or", buildCriterion(column, condition), criteriaReceiver)
8752

8853
fun or(existsPredicate: ExistsPredicate, criteriaReceiver: CriteriaReceiver = {}): CriteriaCollector =
89-
apply {
90-
criteria.add(CriteriaGroupWithConnector.Builder()
91-
.withInitialCriterion(ExistsCriterion.Builder()
92-
.withExistsPredicate(existsPredicate)
93-
.build())
94-
.withConnector("or")
95-
.withSubCriteria(CriteriaCollector().apply(criteriaReceiver).criteria)
96-
.build()
97-
)
98-
}
54+
addCriteriaGroup("or", buildCriterion(existsPredicate), criteriaReceiver)
9955

10056
fun or(criteriaGroup: CriteriaGroup, criteriaReceiver: CriteriaReceiver = {}): CriteriaCollector =
57+
addCriteriaGroup("or", buildCriterion(criteriaGroup), criteriaReceiver)
58+
59+
private fun <T> buildCriterion(
60+
column: BindableColumn<T>,
61+
condition: VisitableCondition<T>
62+
): ColumnAndConditionCriterion<T> =
63+
ColumnAndConditionCriterion.withColumn(column).withCondition(condition).build()
64+
65+
private fun buildCriterion(existsPredicate: ExistsPredicate): ExistsCriterion =
66+
ExistsCriterion.Builder().withExistsPredicate(existsPredicate).build()
67+
68+
private fun buildCriterion(criteriaGroup: CriteriaGroup): CriteriaGroup =
69+
CriteriaGroup.Builder().withInitialCriterion(criteriaGroup).build()
70+
71+
private fun addCriteriaGroup(
72+
connector: String,
73+
initialCriterion: SqlCriterion,
74+
criteriaReceiver: CriteriaReceiver
75+
) =
10176
apply {
10277
criteria.add(CriteriaGroupWithConnector.Builder()
103-
.withInitialCriterion(CriteriaGroup.Builder()
104-
.withInitialCriterion(criteriaGroup)
105-
.build())
106-
.withSubCriteria(CriteriaCollector().apply(criteriaReceiver).criteria)
107-
.withConnector("or")
108-
.build()
78+
.withInitialCriterion(initialCriterion)
79+
.withSubCriteria(CriteriaCollector().apply(criteriaReceiver).criteria)
80+
.withConnector(connector)
81+
.build()
10982
)
11083
}
11184
}

0 commit comments

Comments
 (0)