1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.dynamic.sql.select.join;
17
18 import java.util.Objects;
19
20 import org.jspecify.annotations.Nullable;
21 import org.mybatis.dynamic.sql.TableExpression;
22 import org.mybatis.dynamic.sql.common.AbstractBooleanExpressionModel;
23 import org.mybatis.dynamic.sql.util.Validator;
24
25 public class JoinSpecification extends AbstractBooleanExpressionModel {
26
27 private final TableExpression table;
28 private final JoinType joinType;
29
30 private JoinSpecification(Builder builder) {
31 super(builder);
32 table = Objects.requireNonNull(builder.table);
33 joinType = Objects.requireNonNull(builder.joinType);
34 Validator.assertFalse(initialCriterion().isEmpty() && subCriteria().isEmpty(),
35 "ERROR.16");
36 }
37
38 public TableExpression table() {
39 return table;
40 }
41
42 public JoinType joinType() {
43 return joinType;
44 }
45
46 public static Builder withJoinTable(TableExpression table) {
47 return new Builder().withJoinTable(table);
48 }
49
50 public static class Builder extends AbstractBuilder<Builder> {
51 private @Nullable TableExpression table;
52 private @Nullable JoinType joinType;
53
54 public Builder withJoinTable(TableExpression table) {
55 this.table = table;
56 return this;
57 }
58
59 public Builder withJoinType(JoinType joinType) {
60 this.joinType = joinType;
61 return this;
62 }
63
64 public JoinSpecification build() {
65 return new JoinSpecification(this);
66 }
67
68 @Override
69 protected Builder getThis() {
70 return this;
71 }
72 }
73 }