1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.mybatis.dynamic.sql.select.render;
17
18 import java.util.Objects;
19
20 import org.jspecify.annotations.Nullable;
21 import org.mybatis.dynamic.sql.render.RenderingContext;
22 import org.mybatis.dynamic.sql.select.PagingModel;
23 import org.mybatis.dynamic.sql.util.FragmentAndParameters;
24
25 public class PagingModelRenderer {
26 private final PagingModel pagingModel;
27 private final RenderingContext renderingContext;
28
29 private PagingModelRenderer(Builder builder) {
30 renderingContext = Objects.requireNonNull(builder.renderingContext);
31 pagingModel = Objects.requireNonNull(builder.pagingModel);
32 }
33
34 public FragmentAndParameters render() {
35 return pagingModel.limit().map(this::limitAndOffsetRender)
36 .orElseGet(this::fetchFirstRender);
37 }
38
39 private FragmentAndParameters limitAndOffsetRender(Long limit) {
40 return new LimitAndOffsetPagingModelRenderer(renderingContext, limit, pagingModel).render();
41 }
42
43 private FragmentAndParameters fetchFirstRender() {
44 return new FetchFirstPagingModelRenderer(renderingContext, pagingModel).render();
45 }
46
47 public static class Builder {
48 private @Nullable PagingModel pagingModel;
49 private @Nullable RenderingContext renderingContext;
50
51 public Builder withRenderingContext(RenderingContext renderingContext) {
52 this.renderingContext = renderingContext;
53 return this;
54 }
55
56 public Builder withPagingModel(PagingModel pagingModel) {
57 this.pagingModel = pagingModel;
58 return this;
59 }
60
61 public PagingModelRenderer build() {
62 return new PagingModelRenderer(this);
63 }
64 }
65 }