Skip to content

Commit 5cc633e

Browse files
committed
Add overloads with suppliers
This will make generated code a bit more consistent
1 parent 5370894 commit 5cc633e

22 files changed

+232
-136
lines changed

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

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

1818
import java.util.Objects;
19+
import java.util.function.Supplier;
1920

2021
public abstract class AbstractSingleValueCondition<T> implements VisitableCondition<T> {
21-
private T value;
22+
private Supplier<T> valueSupplier;
2223

23-
protected AbstractSingleValueCondition(T value) {
24-
this.value = Objects.requireNonNull(value);
24+
protected AbstractSingleValueCondition(Supplier<T> valueSupplier) {
25+
this.valueSupplier = Objects.requireNonNull(valueSupplier);
2526
}
2627

2728
public T value() {
28-
return value;
29+
return valueSupplier.get();
2930
}
3031

3132
@Override

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

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

1818
import java.util.Objects;
19+
import java.util.function.Supplier;
1920

2021
public abstract class AbstractTwoValueCondition<T> implements VisitableCondition<T> {
21-
private T value1;
22-
private T value2;
22+
private Supplier<T> valueSupplier1;
23+
private Supplier<T> valueSupplier2;
2324

24-
protected AbstractTwoValueCondition(T value1, T value2) {
25-
this.value1 = Objects.requireNonNull(value1);
26-
this.value2 = Objects.requireNonNull(value2);
25+
protected AbstractTwoValueCondition(Supplier<T> valueSupplier1, Supplier<T> valueSupplier2) {
26+
this.valueSupplier1 = Objects.requireNonNull(valueSupplier1);
27+
this.valueSupplier2 = Objects.requireNonNull(valueSupplier2);
2728
}
2829

2930
public T value1() {
30-
return value1;
31+
return valueSupplier1.get();
3132
}
3233

3334
public T value2() {
34-
return value2;
35+
return valueSupplier2.get();
3536
}
3637

3738
@Override

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

Lines changed: 61 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717

1818
import java.util.Arrays;
1919
import java.util.List;
20+
import java.util.function.Supplier;
2021

2122
import org.mybatis.dynamic.sql.delete.DeleteDSL;
2223
import org.mybatis.dynamic.sql.delete.DeleteModel;
@@ -213,31 +214,47 @@ static <T> IsNotNull<T> isNotNull() {
213214
}
214215

215216
static <T> IsEqualTo<T> isEqualTo(T value) {
216-
return IsEqualTo.of(value);
217+
return isEqualTo(() -> value);
218+
}
219+
220+
static <T> IsEqualTo<T> isEqualTo(Supplier<T> valueSupplier) {
221+
return IsEqualTo.of(valueSupplier);
217222
}
218223

219224
static <T> IsEqualToWithSubselect<T> isEqualTo(Buildable<SelectModel> selectModelBuilder) {
220225
return IsEqualToWithSubselect.of(selectModelBuilder);
221226
}
222227

223228
static <T> IsNotEqualTo<T> isNotEqualTo(T value) {
224-
return IsNotEqualTo.of(value);
229+
return isNotEqualTo(() -> value);
230+
}
231+
232+
static <T> IsNotEqualTo<T> isNotEqualTo(Supplier<T> valueSupplier) {
233+
return IsNotEqualTo.of(valueSupplier);
225234
}
226235

227236
static <T> IsNotEqualToWithSubselect<T> isNotEqualTo(Buildable<SelectModel> selectModelBuilder) {
228237
return IsNotEqualToWithSubselect.of(selectModelBuilder);
229238
}
230239

231240
static <T> IsGreaterThan<T> isGreaterThan(T value) {
232-
return IsGreaterThan.of(value);
241+
return isGreaterThan(() -> value);
242+
}
243+
244+
static <T> IsGreaterThan<T> isGreaterThan(Supplier<T> valueSupplier) {
245+
return IsGreaterThan.of(valueSupplier);
233246
}
234247

235248
static <T> IsGreaterThanWithSubselect<T> isGreaterThan(Buildable<SelectModel> selectModelBuilder) {
236249
return IsGreaterThanWithSubselect.of(selectModelBuilder);
237250
}
238251

239252
static <T> IsGreaterThanOrEqualTo<T> isGreaterThanOrEqualTo(T value) {
240-
return IsGreaterThanOrEqualTo.of(value);
253+
return isGreaterThanOrEqualTo(() -> value);
254+
}
255+
256+
static <T> IsGreaterThanOrEqualTo<T> isGreaterThanOrEqualTo(Supplier<T> valueSupplier) {
257+
return IsGreaterThanOrEqualTo.of(valueSupplier);
241258
}
242259

243260
static <T> IsGreaterThanOrEqualToWithSubselect<T> isGreaterThanOrEqualTo(
@@ -246,15 +263,23 @@ static <T> IsGreaterThanOrEqualToWithSubselect<T> isGreaterThanOrEqualTo(
246263
}
247264

248265
static <T> IsLessThan<T> isLessThan(T value) {
249-
return IsLessThan.of(value);
266+
return isLessThan(() -> value);
267+
}
268+
269+
static <T> IsLessThan<T> isLessThan(Supplier<T> valueSupplier) {
270+
return IsLessThan.of(valueSupplier);
250271
}
251272

252273
static <T> IsLessThanWithSubselect<T> isLessThan(Buildable<SelectModel> selectModelBuilder) {
253274
return IsLessThanWithSubselect.of(selectModelBuilder);
254275
}
255276

256277
static <T> IsLessThanOrEqualTo<T> isLessThanOrEqualTo(T value) {
257-
return IsLessThanOrEqualTo.of(value);
278+
return isLessThanOrEqualTo(() -> value);
279+
}
280+
281+
static <T> IsLessThanOrEqualTo<T> isLessThanOrEqualTo(Supplier<T> valueSupplier) {
282+
return IsLessThanOrEqualTo.of(valueSupplier);
258283
}
259284

260285
static <T> IsLessThanOrEqualToWithSubselect<T> isLessThanOrEqualTo(Buildable<SelectModel> selectModelBuilder) {
@@ -288,28 +313,52 @@ static <T> IsNotInWithSubselect<T> isNotIn(Buildable<SelectModel> selectModelBui
288313
}
289314

290315
static <T> IsBetween.Builder<T> isBetween(T value1) {
291-
return IsBetween.isBetween(value1);
316+
return isBetween(() -> value1);
317+
}
318+
319+
static <T> IsBetween.Builder<T> isBetween(Supplier<T> valueSupplier1) {
320+
return IsBetween.isBetween(valueSupplier1);
292321
}
293322

294323
static <T> IsNotBetween.Builder<T> isNotBetween(T value1) {
295-
return IsNotBetween.isNotBetween(value1);
324+
return isNotBetween(() -> value1);
325+
}
326+
327+
static <T> IsNotBetween.Builder<T> isNotBetween(Supplier<T> valueSupplier1) {
328+
return IsNotBetween.isNotBetween(valueSupplier1);
296329
}
297330

298331
// conditions for strings only
299332
static IsLike isLike(String value) {
300-
return IsLike.of(value);
333+
return isLike(() -> value);
334+
}
335+
336+
static IsLike isLike(Supplier<String> valueSupplier) {
337+
return IsLike.of(valueSupplier);
301338
}
302339

303340
static IsLikeCaseInsensitive isLikeCaseInsensitive(String value) {
304-
return IsLikeCaseInsensitive.of(value);
341+
return isLikeCaseInsensitive(() -> value);
342+
}
343+
344+
static IsLikeCaseInsensitive isLikeCaseInsensitive(Supplier<String> valueSupplier) {
345+
return IsLikeCaseInsensitive.of(valueSupplier);
305346
}
306347

307348
static IsNotLike isNotLike(String value) {
308-
return IsNotLike.of(value);
349+
return isNotLike(() -> value);
350+
}
351+
352+
static IsNotLike isNotLike(Supplier<String> valueSupplier) {
353+
return IsNotLike.of(valueSupplier);
309354
}
310355

311356
static IsNotLikeCaseInsensitive isNotLikeCaseInsensitive(String value) {
312-
return IsNotLikeCaseInsensitive.of(value);
357+
return isNotLikeCaseInsensitive(() -> value);
358+
}
359+
360+
static IsNotLikeCaseInsensitive isNotLikeCaseInsensitive(Supplier<String> valueSupplier) {
361+
return IsNotLikeCaseInsensitive.of(valueSupplier);
313362
}
314363

315364
static IsInCaseInsensitive isInCaseInsensitive(String...values) {

src/main/java/org/mybatis/dynamic/sql/update/UpdateDSL.java

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.List;
2020
import java.util.Objects;
2121
import java.util.function.Function;
22+
import java.util.function.Supplier;
2223

2324
import org.mybatis.dynamic.sql.BindableColumn;
2425
import org.mybatis.dynamic.sql.SqlColumn;
@@ -107,13 +108,21 @@ public UpdateDSL<R> equalToStringConstant(String constant) {
107108
}
108109

109110
public UpdateDSL<R> equalTo(T value) {
110-
columnsAndValues.add(ValueMapping.of(column, value));
111+
return equalTo(() -> value);
112+
}
113+
114+
public UpdateDSL<R> equalTo(Supplier<T> valueSupplier) {
115+
columnsAndValues.add(ValueMapping.of(column, valueSupplier));
111116
return UpdateDSL.this;
112117
}
113118

114119
public UpdateDSL<R> equalToWhenPresent(T value) {
115-
if (value != null) {
116-
columnsAndValues.add(ValueMapping.of(column, value));
120+
return equalToWhenPresent(() -> value);
121+
}
122+
123+
public UpdateDSL<R> equalToWhenPresent(Supplier<T> valueSupplier) {
124+
if (valueSupplier.get() != null) {
125+
columnsAndValues.add(ValueMapping.of(column, valueSupplier));
117126
}
118127
return UpdateDSL.this;
119128
}

src/main/java/org/mybatis/dynamic/sql/util/ValueMapping.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,28 +15,30 @@
1515
*/
1616
package org.mybatis.dynamic.sql.util;
1717

18+
import java.util.function.Supplier;
19+
1820
import org.mybatis.dynamic.sql.SqlColumn;
1921

2022
public class ValueMapping<T> extends AbstractColumnMapping implements UpdateMapping {
2123

22-
private T value;
24+
private Supplier<T> valueSupplier;
2325

2426
private ValueMapping(SqlColumn<T> column) {
2527
super(column);
2628
}
2729

2830
public T value() {
29-
return value;
31+
return valueSupplier.get();
3032
}
3133

3234
@Override
3335
public <R> R accept(UpdateMappingVisitor<R> visitor) {
3436
return visitor.visit(this);
3537
}
3638

37-
public static <T> ValueMapping<T> of(SqlColumn<T> column, T value) {
39+
public static <T> ValueMapping<T> of(SqlColumn<T> column, Supplier<T> valueSupplier) {
3840
ValueMapping<T> mapping = new ValueMapping<>(column);
39-
mapping.value = value;
41+
mapping.valueSupplier = valueSupplier;
4042
return mapping;
4143
}
4244
}

src/main/java/org/mybatis/dynamic/sql/where/condition/IsBetween.java

Lines changed: 15 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,14 @@
1515
*/
1616
package org.mybatis.dynamic.sql.where.condition;
1717

18+
import java.util.function.Supplier;
19+
1820
import org.mybatis.dynamic.sql.AbstractTwoValueCondition;
1921

2022
public class IsBetween<T> extends AbstractTwoValueCondition<T> {
2123

2224
protected IsBetween(Builder<T> builder) {
23-
super(builder.value1, builder.value2);
25+
super(builder.valueSupplier1, builder.valueSupplier2);
2426
}
2527

2628
@Override
@@ -29,20 +31,24 @@ public String renderCondition(String columnName, String placeholder1, String pla
2931
}
3032

3133
public static class Builder<T> {
32-
private T value1;
33-
private T value2;
34+
private Supplier<T> valueSupplier1;
35+
private Supplier<T> valueSupplier2;
3436

35-
private Builder(T value1) {
36-
this.value1 = value1;
37+
private Builder(Supplier<T> valueSupplier1) {
38+
this.valueSupplier1 = valueSupplier1;
3739
}
3840

39-
public IsBetween<T> and(T value2) {
40-
this.value2 = value2;
41+
public IsBetween<T> and(Supplier<T> valueSupplier2) {
42+
this.valueSupplier2 = valueSupplier2;
4143
return new IsBetween<>(this);
4244
}
45+
46+
public IsBetween<T> and(T value2) {
47+
return and(() -> value2);
48+
}
4349
}
4450

45-
public static <T> Builder<T> isBetween(T value) {
46-
return new Builder<>(value);
51+
public static <T> Builder<T> isBetween(Supplier<T> valueSupplier) {
52+
return new Builder<>(valueSupplier);
4753
}
4854
}

src/main/java/org/mybatis/dynamic/sql/where/condition/IsEqualTo.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,22 @@
1515
*/
1616
package org.mybatis.dynamic.sql.where.condition;
1717

18+
import java.util.function.Supplier;
19+
1820
import org.mybatis.dynamic.sql.AbstractSingleValueCondition;
1921

2022
public class IsEqualTo<T> extends AbstractSingleValueCondition<T> {
2123

22-
protected IsEqualTo(T value) {
23-
super(value);
24+
protected IsEqualTo(Supplier<T> valueSupplier) {
25+
super(valueSupplier);
2426
}
2527

2628
@Override
2729
public String renderCondition(String columnName, String placeholder) {
2830
return columnName + " = " + placeholder; //$NON-NLS-1$
2931
}
3032

31-
public static <T> IsEqualTo<T> of(T value) {
32-
return new IsEqualTo<>(value);
33+
public static <T> IsEqualTo<T> of(Supplier<T> valueSupplier) {
34+
return new IsEqualTo<>(valueSupplier);
3335
}
3436
}

src/main/java/org/mybatis/dynamic/sql/where/condition/IsGreaterThan.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,22 @@
1515
*/
1616
package org.mybatis.dynamic.sql.where.condition;
1717

18+
import java.util.function.Supplier;
19+
1820
import org.mybatis.dynamic.sql.AbstractSingleValueCondition;
1921

2022
public class IsGreaterThan<T> extends AbstractSingleValueCondition<T> {
2123

22-
protected IsGreaterThan(T value) {
23-
super(value);
24+
protected IsGreaterThan(Supplier<T> valueSupplier) {
25+
super(valueSupplier);
2426
}
2527

2628
@Override
2729
public String renderCondition(String columnName, String placeholder) {
2830
return columnName + " > " + placeholder; //$NON-NLS-1$
2931
}
3032

31-
public static <T> IsGreaterThan<T> of(T value) {
32-
return new IsGreaterThan<>(value);
33+
public static <T> IsGreaterThan<T> of(Supplier<T> valueSupplier) {
34+
return new IsGreaterThan<>(valueSupplier);
3335
}
3436
}

src/main/java/org/mybatis/dynamic/sql/where/condition/IsGreaterThanOrEqualTo.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,20 +15,22 @@
1515
*/
1616
package org.mybatis.dynamic.sql.where.condition;
1717

18+
import java.util.function.Supplier;
19+
1820
import org.mybatis.dynamic.sql.AbstractSingleValueCondition;
1921

2022
public class IsGreaterThanOrEqualTo<T> extends AbstractSingleValueCondition<T> {
2123

22-
protected IsGreaterThanOrEqualTo(T value) {
23-
super(value);
24+
protected IsGreaterThanOrEqualTo(Supplier<T> valueSupplier) {
25+
super(valueSupplier);
2426
}
2527

2628
@Override
2729
public String renderCondition(String columnName, String placeholder) {
2830
return columnName + " >= " + placeholder; //$NON-NLS-1$
2931
}
3032

31-
public static <T> IsGreaterThanOrEqualTo<T> of(T value) {
32-
return new IsGreaterThanOrEqualTo<>(value);
33+
public static <T> IsGreaterThanOrEqualTo<T> of(Supplier<T> valueSupplier) {
34+
return new IsGreaterThanOrEqualTo<>(valueSupplier);
3335
}
3436
}

0 commit comments

Comments
 (0)