Skip to content

Commit ffce2bc

Browse files
committed
Improvements to the Paging Implementation
1 parent 4215d85 commit ffce2bc

File tree

3 files changed

+23
-44
lines changed

3 files changed

+23
-44
lines changed

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

+11-22
Original file line numberDiff line numberDiff line change
@@ -65,19 +65,19 @@ public MultiSelectDSL orderBy(Collection<? extends SortSpecification> columns) {
6565
@Override
6666
public LimitFinisher<MultiSelectModel> limitWhenPresent(Long limit) {
6767
this.limit = limit;
68-
return new LF();
68+
return new LocalLimitFinisher();
6969
}
7070

7171
@Override
7272
public OffsetFirstFinisher<MultiSelectModel> offsetWhenPresent(Long offset) {
7373
this.offset = offset;
74-
return new OFF();
74+
return new LocalOffsetFirstFinisher();
7575
}
7676

7777
@Override
7878
public FetchFirstFinisher<MultiSelectModel> fetchFirstWhenPresent(Long fetchFirstRows) {
7979
this.fetchFirstRows = fetchFirstRows;
80-
return new FFF();
80+
return () -> MultiSelectDSL.this;
8181
}
8282

8383
@NotNull
@@ -106,38 +106,27 @@ public MultiSelectDSL configureStatement(Consumer<StatementConfiguration> consum
106106
return this;
107107
}
108108

109-
class FFF implements FetchFirstFinisher<MultiSelectModel> {
110-
@Override
111-
public Buildable<MultiSelectModel> rowsOnly() {
112-
return MultiSelectDSL.this;
113-
}
114-
}
115-
116-
class LF implements LimitFinisher<MultiSelectModel> {
117-
@Override
118-
public Buildable<MultiSelectModel> offsetWhenPresent(Long offset) {
119-
MultiSelectDSL.this.offset = offset;
120-
return MultiSelectDSL.this;
121-
}
122-
109+
abstract class BaseBuildable implements Buildable<MultiSelectModel> {
123110
@NotNull
124111
@Override
125112
public MultiSelectModel build() {
126113
return MultiSelectDSL.this.build();
127114
}
128115
}
129116

130-
class OFF implements OffsetFirstFinisher<MultiSelectModel> {
117+
class LocalOffsetFirstFinisher extends BaseBuildable implements OffsetFirstFinisher<MultiSelectModel> {
131118
@Override
132119
public FetchFirstFinisher<MultiSelectModel> fetchFirstWhenPresent(Long fetchFirstRows) {
133120
MultiSelectDSL.this.fetchFirstRows = fetchFirstRows;
134-
return new FFF();
121+
return () -> MultiSelectDSL.this;
135122
}
123+
}
136124

137-
@NotNull
125+
class LocalLimitFinisher extends BaseBuildable implements LimitFinisher<MultiSelectModel> {
138126
@Override
139-
public MultiSelectModel build() {
140-
return MultiSelectDSL.this.build();
127+
public Buildable<MultiSelectModel> offsetWhenPresent(Long offset) {
128+
MultiSelectDSL.this.offset = offset;
129+
return MultiSelectDSL.this;
141130
}
142131
}
143132
}

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

+1
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ default FetchFirstFinisher<T> fetchFirst(long fetchFirstRows) {
5252
FetchFirstFinisher<T> fetchFirstWhenPresent(Long fetchFirstRows);
5353
}
5454

55+
@FunctionalInterface
5556
interface FetchFirstFinisher<T> {
5657
Buildable<T> rowsOnly();
5758
}

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

+11-22
Original file line numberDiff line numberDiff line change
@@ -109,17 +109,17 @@ void orderBy(Collection<? extends SortSpecification> columns) {
109109

110110
public LimitFinisher<R> limitWhenPresent(Long limit) {
111111
this.limit = limit;
112-
return new LF();
112+
return new LocalLimitFinisher();
113113
}
114114

115115
public OffsetFirstFinisher<R> offsetWhenPresent(Long offset) {
116116
this.offset = offset;
117-
return new OFF();
117+
return new LocalOffsetFirstFinisher();
118118
}
119119

120120
public FetchFirstFinisher<R> fetchFirstWhenPresent(Long fetchFirstRows) {
121121
this.fetchFirstRows = fetchFirstRows;
122-
return new FFF();
122+
return () -> SelectDSL.this;
123123
}
124124

125125
@Override
@@ -153,38 +153,27 @@ private Optional<PagingModel> buildPagingModel() {
153153
.build();
154154
}
155155

156-
class FFF implements FetchFirstFinisher<R> {
157-
@Override
158-
public Buildable<R> rowsOnly() {
159-
return SelectDSL.this;
160-
}
161-
}
162-
163-
class LF implements LimitFinisher<R> {
164-
@Override
165-
public Buildable<R> offsetWhenPresent(Long offset) {
166-
SelectDSL.this.offset = offset;
167-
return SelectDSL.this;
168-
}
169-
156+
abstract class BaseBuildable implements Buildable<R> {
170157
@NotNull
171158
@Override
172159
public R build() {
173160
return SelectDSL.this.build();
174161
}
175162
}
176163

177-
class OFF implements OffsetFirstFinisher<R> {
164+
class LocalOffsetFirstFinisher extends BaseBuildable implements OffsetFirstFinisher<R> {
178165
@Override
179166
public FetchFirstFinisher<R> fetchFirstWhenPresent(Long fetchFirstRows) {
180167
SelectDSL.this.fetchFirstRows = fetchFirstRows;
181-
return new FFF();
168+
return () -> SelectDSL.this;
182169
}
170+
}
183171

184-
@NotNull
172+
class LocalLimitFinisher extends BaseBuildable implements LimitFinisher<R> {
185173
@Override
186-
public R build() {
187-
return SelectDSL.this.build();
174+
public Buildable<R> offsetWhenPresent(Long offset) {
175+
SelectDSL.this.offset = offset;
176+
return SelectDSL.this;
188177
}
189178
}
190179
}

0 commit comments

Comments
 (0)