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.Objects;
19 import java.util.Optional;
20
21 import org.jspecify.annotations.Nullable;
22 import org.mybatis.dynamic.sql.common.OrderByModel;
23 import org.mybatis.dynamic.sql.configuration.StatementConfiguration;
24
25 public abstract class AbstractSelectModel {
26 private final @Nullable OrderByModel orderByModel;
27 private final @Nullable PagingModel pagingModel;
28 protected final StatementConfiguration statementConfiguration;
29
30 protected AbstractSelectModel(AbstractBuilder<?> builder) {
31 orderByModel = builder.orderByModel;
32 pagingModel = builder.pagingModel;
33 statementConfiguration = Objects.requireNonNull(builder.statementConfiguration);
34 }
35
36 public Optional<OrderByModel> orderByModel() {
37 return Optional.ofNullable(orderByModel);
38 }
39
40 public Optional<PagingModel> pagingModel() {
41 return Optional.ofNullable(pagingModel);
42 }
43
44 public StatementConfiguration statementConfiguration() {
45 return statementConfiguration;
46 }
47
48 public abstract static class AbstractBuilder<T extends AbstractBuilder<T>> {
49 private @Nullable OrderByModel orderByModel;
50 private @Nullable PagingModel pagingModel;
51 private @Nullable StatementConfiguration statementConfiguration;
52
53 public T withOrderByModel(@Nullable OrderByModel orderByModel) {
54 this.orderByModel = orderByModel;
55 return getThis();
56 }
57
58 public T withPagingModel(@Nullable PagingModel pagingModel) {
59 this.pagingModel = pagingModel;
60 return getThis();
61 }
62
63 public T withStatementConfiguration(StatementConfiguration statementConfiguration) {
64 this.statementConfiguration = statementConfiguration;
65 return getThis();
66 }
67
68 protected abstract T getThis();
69 }
70 }