1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.dynamic.sql.select;
17
18 import java.util.Arrays;
19 import java.util.List;
20
21 import org.mybatis.dynamic.sql.AndOrCriteriaGroup;
22 import org.mybatis.dynamic.sql.BindableColumn;
23 import org.mybatis.dynamic.sql.ColumnAndConditionCriterion;
24 import org.mybatis.dynamic.sql.CriteriaGroup;
25 import org.mybatis.dynamic.sql.RenderableCondition;
26 import org.mybatis.dynamic.sql.SqlCriterion;
27
28 public interface AbstractHavingStarter<F extends AbstractHavingFinisher<?>> {
29
30 default <T> F having(BindableColumn<T> column, RenderableCondition<T> condition,
31 AndOrCriteriaGroup... subCriteria) {
32 return having(column, condition, Arrays.asList(subCriteria));
33 }
34
35 default <T> F having(BindableColumn<T> column, RenderableCondition<T> condition,
36 List<AndOrCriteriaGroup> subCriteria) {
37 SqlCriterion sqlCriterion = ColumnAndConditionCriterion.withColumn(column)
38 .withCondition(condition)
39 .withSubCriteria(subCriteria)
40 .build();
41
42 return initialize(sqlCriterion);
43 }
44
45 default F having(SqlCriterion initialCriterion, AndOrCriteriaGroup... subCriteria) {
46 return having(initialCriterion, Arrays.asList(subCriteria));
47 }
48
49 default F having(SqlCriterion initialCriterion, List<AndOrCriteriaGroup> subCriteria) {
50 SqlCriterion sqlCriterion = new CriteriaGroup.Builder()
51 .withInitialCriterion(initialCriterion)
52 .withSubCriteria(subCriteria)
53 .build();
54
55 return initialize(sqlCriterion);
56 }
57
58 F having();
59
60 default F applyHaving(HavingApplier havingApplier) {
61 F finisher = having();
62 havingApplier.accept(finisher);
63 return finisher;
64 }
65
66 private F initialize(SqlCriterion sqlCriterion) {
67 F finisher = having();
68 finisher.initialize(sqlCriterion);
69 return finisher;
70 }
71 }