Skip to content

Commit 5e275f1

Browse files
committed
Refactor Paging
1 parent 22bc77f commit 5e275f1

File tree

6 files changed

+210
-256
lines changed

6 files changed

+210
-256
lines changed

src/main/java/org/mybatis/dynamic/sql/select/MultiSelectDSL.java

Lines changed: 23 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,8 @@
2929
import org.mybatis.dynamic.sql.util.Buildable;
3030
import org.mybatis.dynamic.sql.util.ConfigurableStatement;
3131

32-
public class MultiSelectDSL implements Buildable<MultiSelectModel>, ConfigurableStatement<MultiSelectDSL> {
32+
public class MultiSelectDSL implements Buildable<MultiSelectModel>, ConfigurableStatement<MultiSelectDSL>,
33+
PagingDSL<MultiSelectModel> {
3334
private final List<UnionQuery> unionQueries = new ArrayList<>();
3435
private final SelectModel initialSelect;
3536
private OrderByModel orderByModel;
@@ -61,31 +62,22 @@ public MultiSelectDSL orderBy(Collection<? extends SortSpecification> columns) {
6162
return this;
6263
}
6364

64-
public LimitFinisher limit(long limit) {
65-
return limitWhenPresent(limit);
66-
}
67-
68-
public LimitFinisher limitWhenPresent(Long limit) {
65+
@Override
66+
public LimitFinisher<MultiSelectModel> limitWhenPresent(Long limit) {
6967
this.limit = limit;
70-
return new LimitFinisher();
68+
return new LF();
7169
}
7270

73-
public OffsetFirstFinisher offset(long offset) {
74-
return offsetWhenPresent(offset);
75-
}
76-
77-
public OffsetFirstFinisher offsetWhenPresent(Long offset) {
71+
@Override
72+
public OffsetFirstFinisher<MultiSelectModel> offsetWhenPresent(Long offset) {
7873
this.offset = offset;
79-
return new OffsetFirstFinisher();
74+
return new OFF();
8075
}
8176

82-
public FetchFirstFinisher fetchFirst(long fetchFirstRows) {
83-
return fetchFirstWhenPresent(fetchFirstRows);
84-
}
85-
86-
public FetchFirstFinisher fetchFirstWhenPresent(Long fetchFirstRows) {
77+
@Override
78+
public FetchFirstFinisher<MultiSelectModel> fetchFirstWhenPresent(Long fetchFirstRows) {
8779
this.fetchFirstRows = fetchFirstRows;
88-
return new FetchFirstFinisher();
80+
return new FFF();
8981
}
9082

9183
@NotNull
@@ -114,38 +106,18 @@ public MultiSelectDSL configureStatement(Consumer<StatementConfiguration> consum
114106
return this;
115107
}
116108

117-
public class LimitFinisher implements Buildable<MultiSelectModel> {
118-
public OffsetFinisher offset(long offset) {
119-
return offsetWhenPresent(offset);
120-
}
121-
122-
public OffsetFinisher offsetWhenPresent(Long offset) {
123-
MultiSelectDSL.this.offsetWhenPresent(offset);
124-
return new OffsetFinisher();
125-
}
126-
127-
@NotNull
109+
class FFF implements FetchFirstFinisher<MultiSelectModel> {
128110
@Override
129-
public MultiSelectModel build() {
130-
return MultiSelectDSL.this.build();
111+
public Buildable<MultiSelectModel> rowsOnly() {
112+
return MultiSelectDSL.this;
131113
}
132114
}
133115

134-
public class OffsetFinisher implements Buildable<MultiSelectModel> {
135-
@NotNull
116+
class LF implements LimitFinisher<MultiSelectModel> {
136117
@Override
137-
public MultiSelectModel build() {
138-
return MultiSelectDSL.this.build();
139-
}
140-
}
141-
142-
public class OffsetFirstFinisher implements Buildable<MultiSelectModel> {
143-
public FetchFirstFinisher fetchFirst(long fetchFirstRows) {
144-
return fetchFirstWhenPresent(fetchFirstRows);
145-
}
146-
147-
public FetchFirstFinisher fetchFirstWhenPresent(Long fetchFirstRows) {
148-
return MultiSelectDSL.this.fetchFirstWhenPresent(fetchFirstRows);
118+
public Buildable<MultiSelectModel> offsetWhenPresent(Long offset) {
119+
MultiSelectDSL.this.offset = offset;
120+
return MultiSelectDSL.this;
149121
}
150122

151123
@NotNull
@@ -155,13 +127,13 @@ public MultiSelectModel build() {
155127
}
156128
}
157129

158-
public class FetchFirstFinisher {
159-
public RowsOnlyFinisher rowsOnly() {
160-
return new RowsOnlyFinisher();
130+
class OFF implements OffsetFirstFinisher<MultiSelectModel> {
131+
@Override
132+
public FetchFirstFinisher<MultiSelectModel> fetchFirstWhenPresent(Long fetchFirstRows) {
133+
MultiSelectDSL.this.fetchFirstRows = fetchFirstRows;
134+
return new FFF();
161135
}
162-
}
163136

164-
public class RowsOnlyFinisher implements Buildable<MultiSelectModel> {
165137
@NotNull
166138
@Override
167139
public MultiSelectModel build() {
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
/*
2+
* Copyright 2016-2024 the original author or authors.
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* https://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
package org.mybatis.dynamic.sql.select;
17+
18+
import org.mybatis.dynamic.sql.util.Buildable;
19+
20+
public interface PagingDSL<T> {
21+
default LimitFinisher<T> limit(long limit) {
22+
return limitWhenPresent(limit);
23+
}
24+
25+
LimitFinisher<T> limitWhenPresent(Long limit);
26+
27+
default OffsetFirstFinisher<T> offset(long offset) {
28+
return offsetWhenPresent(offset);
29+
}
30+
31+
OffsetFirstFinisher<T> offsetWhenPresent(Long offset);
32+
33+
default FetchFirstFinisher<T> fetchFirst(long fetchFirstRows) {
34+
return fetchFirstWhenPresent(fetchFirstRows);
35+
}
36+
37+
FetchFirstFinisher<T> fetchFirstWhenPresent(Long fetchFirstRows);
38+
39+
interface LimitFinisher<T> extends Buildable<T> {
40+
default Buildable<T> offset(long offset) {
41+
return offsetWhenPresent(offset);
42+
}
43+
44+
Buildable<T> offsetWhenPresent(Long offset);
45+
}
46+
47+
interface OffsetFirstFinisher<T> extends Buildable<T> {
48+
default FetchFirstFinisher<T> fetchFirst(long fetchFirstRows) {
49+
return fetchFirstWhenPresent(fetchFirstRows);
50+
}
51+
52+
FetchFirstFinisher<T> fetchFirstWhenPresent(Long fetchFirstRows);
53+
}
54+
55+
interface FetchFirstFinisher<T> {
56+
Buildable<T> rowsOnly();
57+
}
58+
}

src/main/java/org/mybatis/dynamic/sql/select/QueryExpressionDSL.java

Lines changed: 38 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@
4242

4343
public class QueryExpressionDSL<R>
4444
extends AbstractQueryExpressionDSL<QueryExpressionDSL<R>.QueryExpressionWhereBuilder, QueryExpressionDSL<R>>
45-
implements Buildable<R> {
45+
implements Buildable<R>, PagingDSL<R> {
4646

4747
private final String connector;
4848
private final SelectDSL<R> selectDSL;
@@ -194,27 +194,18 @@ protected QueryExpressionModel buildModel() {
194194
.build();
195195
}
196196

197-
public SelectDSL<R>.LimitFinisher limit(long limit) {
198-
return limitWhenPresent(limit);
199-
}
200-
201-
public SelectDSL<R>.LimitFinisher limitWhenPresent(Long limit) {
197+
@Override
198+
public PagingDSL.LimitFinisher<R> limitWhenPresent(Long limit) {
202199
return selectDSL.limitWhenPresent(limit);
203200
}
204201

205-
public SelectDSL<R>.OffsetFirstFinisher offset(long offset) {
206-
return offsetWhenPresent(offset);
207-
}
208-
209-
public SelectDSL<R>.OffsetFirstFinisher offsetWhenPresent(Long offset) {
202+
@Override
203+
public PagingDSL.OffsetFirstFinisher<R> offsetWhenPresent(Long offset) {
210204
return selectDSL.offsetWhenPresent(offset);
211205
}
212206

213-
public SelectDSL<R>.FetchFirstFinisher fetchFirst(long fetchFirstRows) {
214-
return fetchFirstWhenPresent(fetchFirstRows);
215-
}
216-
217-
public SelectDSL<R>.FetchFirstFinisher fetchFirstWhenPresent(Long fetchFirstRows) {
207+
@Override
208+
public PagingDSL.FetchFirstFinisher<R> fetchFirstWhenPresent(Long fetchFirstRows) {
218209
return selectDSL.fetchFirstWhenPresent(fetchFirstRows);
219210
}
220211

@@ -285,7 +276,7 @@ public FromGatherer<R> build() {
285276
}
286277

287278
public class QueryExpressionWhereBuilder extends AbstractWhereFinisher<QueryExpressionWhereBuilder>
288-
implements Buildable<R> {
279+
implements Buildable<R>, PagingDSL<R> {
289280
private QueryExpressionWhereBuilder() {
290281
super(QueryExpressionDSL.this);
291282
}
@@ -314,27 +305,18 @@ public GroupByFinisher groupBy(Collection<? extends BasicColumn> columns) {
314305
return QueryExpressionDSL.this.groupBy(columns);
315306
}
316307

317-
public SelectDSL<R>.LimitFinisher limit(long limit) {
318-
return limitWhenPresent(limit);
319-
}
320-
321-
public SelectDSL<R>.LimitFinisher limitWhenPresent(Long limit) {
308+
@Override
309+
public PagingDSL.LimitFinisher<R> limitWhenPresent(Long limit) {
322310
return QueryExpressionDSL.this.limitWhenPresent(limit);
323311
}
324312

325-
public SelectDSL<R>.OffsetFirstFinisher offset(long offset) {
326-
return offsetWhenPresent(offset);
327-
}
328-
329-
public SelectDSL<R>.OffsetFirstFinisher offsetWhenPresent(Long offset) {
313+
@Override
314+
public PagingDSL.OffsetFirstFinisher<R> offsetWhenPresent(Long offset) {
330315
return QueryExpressionDSL.this.offsetWhenPresent(offset);
331316
}
332317

333-
public SelectDSL<R>.FetchFirstFinisher fetchFirst(long fetchFirstRows) {
334-
return fetchFirstWhenPresent(fetchFirstRows);
335-
}
336-
337-
public SelectDSL<R>.FetchFirstFinisher fetchFirstWhenPresent(Long fetchFirstRows) {
318+
@Override
319+
public PagingDSL.FetchFirstFinisher<R> fetchFirstWhenPresent(Long fetchFirstRows) {
338320
return QueryExpressionDSL.this.fetchFirstWhenPresent(fetchFirstRows);
339321
}
340322

@@ -375,7 +357,7 @@ public <T> JoinSpecificationFinisher on(BindableColumn<T> joinColumn, JoinCondit
375357

376358
public class JoinSpecificationFinisher
377359
extends AbstractWhereStarter<QueryExpressionWhereBuilder, JoinSpecificationFinisher>
378-
implements Buildable<R> {
360+
implements Buildable<R>, PagingDSL<R> {
379361
private final JoinSpecification.Builder joinSpecificationBuilder;
380362

381363
public <T> JoinSpecificationFinisher(TableExpression table, BindableColumn<T> joinColumn,
@@ -508,32 +490,24 @@ public SelectDSL<R> orderBy(Collection<? extends SortSpecification> columns) {
508490
return QueryExpressionDSL.this.orderBy(columns);
509491
}
510492

511-
public SelectDSL<R>.LimitFinisher limit(long limit) {
512-
return limitWhenPresent(limit);
513-
}
514-
515-
public SelectDSL<R>.LimitFinisher limitWhenPresent(Long limit) {
493+
@Override
494+
public PagingDSL.LimitFinisher<R> limitWhenPresent(Long limit) {
516495
return QueryExpressionDSL.this.limitWhenPresent(limit);
517496
}
518497

519-
public SelectDSL<R>.OffsetFirstFinisher offset(long offset) {
520-
return offsetWhenPresent(offset);
521-
}
522-
523-
public SelectDSL<R>.OffsetFirstFinisher offsetWhenPresent(Long offset) {
498+
@Override
499+
public PagingDSL.OffsetFirstFinisher<R> offsetWhenPresent(Long offset) {
524500
return QueryExpressionDSL.this.offsetWhenPresent(offset);
525501
}
526502

527-
public SelectDSL<R>.FetchFirstFinisher fetchFirst(long fetchFirstRows) {
528-
return fetchFirstWhenPresent(fetchFirstRows);
529-
}
530-
531-
public SelectDSL<R>.FetchFirstFinisher fetchFirstWhenPresent(Long fetchFirstRows) {
503+
@Override
504+
public PagingDSL.FetchFirstFinisher<R> fetchFirstWhenPresent(Long fetchFirstRows) {
532505
return QueryExpressionDSL.this.fetchFirstWhenPresent(fetchFirstRows);
533506
}
534507
}
535508

536-
public class GroupByFinisher extends AbstractHavingStarter<QueryExpressionHavingBuilder> implements Buildable<R> {
509+
public class GroupByFinisher extends AbstractHavingStarter<QueryExpressionHavingBuilder>
510+
implements Buildable<R>, PagingDSL<R> {
537511
public SelectDSL<R> orderBy(SortSpecification... columns) {
538512
return orderBy(Arrays.asList(columns));
539513
}
@@ -556,27 +530,18 @@ public UnionBuilder unionAll() {
556530
return QueryExpressionDSL.this.unionAll();
557531
}
558532

559-
public SelectDSL<R>.LimitFinisher limit(long limit) {
560-
return limitWhenPresent(limit);
561-
}
562-
563-
public SelectDSL<R>.LimitFinisher limitWhenPresent(Long limit) {
533+
@Override
534+
public PagingDSL.LimitFinisher<R> limitWhenPresent(Long limit) {
564535
return QueryExpressionDSL.this.limitWhenPresent(limit);
565536
}
566537

567-
public SelectDSL<R>.OffsetFirstFinisher offset(long offset) {
568-
return offsetWhenPresent(offset);
569-
}
570-
571-
public SelectDSL<R>.OffsetFirstFinisher offsetWhenPresent(Long offset) {
538+
@Override
539+
public PagingDSL.OffsetFirstFinisher<R> offsetWhenPresent(Long offset) {
572540
return QueryExpressionDSL.this.offsetWhenPresent(offset);
573541
}
574542

575-
public SelectDSL<R>.FetchFirstFinisher fetchFirst(long fetchFirstRows) {
576-
return fetchFirstWhenPresent(fetchFirstRows);
577-
}
578-
579-
public SelectDSL<R>.FetchFirstFinisher fetchFirstWhenPresent(Long fetchFirstRows) {
543+
@Override
544+
public PagingDSL.FetchFirstFinisher<R> fetchFirstWhenPresent(Long fetchFirstRows) {
580545
return QueryExpressionDSL.this.fetchFirstWhenPresent(fetchFirstRows);
581546
}
582547

@@ -620,30 +585,21 @@ public FromGatherer<R> selectDistinct(List<BasicColumn> selectList) {
620585
}
621586

622587
public class QueryExpressionHavingBuilder extends AbstractHavingFinisher<QueryExpressionHavingBuilder>
623-
implements Buildable<R> {
624-
625-
public SelectDSL<R>.FetchFirstFinisher fetchFirst(long fetchFirstRows) {
626-
return fetchFirstWhenPresent(fetchFirstRows);
627-
}
628-
629-
public SelectDSL<R>.FetchFirstFinisher fetchFirstWhenPresent(Long fetchFirstRows) {
630-
return QueryExpressionDSL.this.fetchFirstWhenPresent(fetchFirstRows);
631-
}
588+
implements Buildable<R>, PagingDSL<R> {
632589

633-
public SelectDSL<R>.OffsetFirstFinisher offset(long offset) {
634-
return offsetWhenPresent(offset);
590+
@Override
591+
public PagingDSL.LimitFinisher<R> limitWhenPresent(Long limit) {
592+
return QueryExpressionDSL.this.limitWhenPresent(limit);
635593
}
636594

637-
public SelectDSL<R>.OffsetFirstFinisher offsetWhenPresent(Long offset) {
595+
@Override
596+
public PagingDSL.OffsetFirstFinisher<R> offsetWhenPresent(Long offset) {
638597
return QueryExpressionDSL.this.offsetWhenPresent(offset);
639598
}
640599

641-
public SelectDSL<R>.LimitFinisher limit(long limit) {
642-
return limitWhenPresent(limit);
643-
}
644-
645-
public SelectDSL<R>.LimitFinisher limitWhenPresent(Long limit) {
646-
return QueryExpressionDSL.this.limitWhenPresent(limit);
600+
@Override
601+
public PagingDSL.FetchFirstFinisher<R> fetchFirstWhenPresent(Long fetchFirstRows) {
602+
return QueryExpressionDSL.this.fetchFirstWhenPresent(fetchFirstRows);
647603
}
648604

649605
public SelectDSL<R> orderBy(SortSpecification... columns) {

0 commit comments

Comments
 (0)