15
15
*/
16
16
package org .mybatis .dynamic .sql .select .render ;
17
17
18
- import java .util .Objects ;
19
-
20
- import org .mybatis .dynamic .sql .render .RendererFactory ;
18
+ import org .mybatis .dynamic .sql .common .OrderByModel ;
19
+ import org .mybatis .dynamic .sql .common .OrderByRenderer ;
21
20
import org .mybatis .dynamic .sql .render .RenderingContext ;
22
- import org .mybatis .dynamic .sql .render .RenderingStrategy ;
21
+ import org .mybatis .dynamic .sql .select .PagingModel ;
22
+ import org .mybatis .dynamic .sql .select .QueryExpressionModel ;
23
23
import org .mybatis .dynamic .sql .select .SelectModel ;
24
24
import org .mybatis .dynamic .sql .util .FragmentAndParameters ;
25
+ import org .mybatis .dynamic .sql .util .FragmentCollector ;
26
+
27
+ import java .util .Objects ;
28
+ import java .util .Optional ;
29
+ import java .util .stream .Collectors ;
25
30
26
31
public class SelectRenderer {
27
32
private final SelectModel selectModel ;
28
33
private final RenderingContext renderingContext ;
29
34
30
35
private SelectRenderer (Builder builder ) {
31
36
selectModel = Objects .requireNonNull (builder .selectModel );
32
- renderingContext = RenderingContext .withRenderingStrategy (builder .renderingStrategy )
33
- .withStatementConfiguration (selectModel .statementConfiguration ())
34
- .build ();
37
+ renderingContext = Objects .requireNonNull (builder .renderingContext );
38
+ }
39
+
40
+ public FragmentAndParameters render (String prefix , String suffix ) {
41
+ FragmentCollector fragmentCollector = selectModel
42
+ .queryExpressions ()
43
+ .map (this ::renderQueryExpression )
44
+ .collect (FragmentCollector .collect ());
45
+
46
+ renderOrderBy ().ifPresent (fragmentCollector ::add );
47
+ renderPagingModel ().ifPresent (fragmentCollector ::add );
48
+
49
+ return fragmentCollector .toFragmentAndParameters (Collectors .joining (" " , prefix , suffix )); //$NON-NLS-1$
50
+ }
51
+
52
+ private FragmentAndParameters renderQueryExpression (QueryExpressionModel queryExpressionModel ) {
53
+ return QueryExpressionRenderer .withQueryExpression (queryExpressionModel )
54
+ .withRenderingContext (renderingContext )
55
+ .build ()
56
+ .render ();
57
+ }
58
+
59
+ private Optional <FragmentAndParameters > renderOrderBy () {
60
+ return selectModel .orderByModel ().map (this ::renderOrderBy );
61
+ }
62
+
63
+ private FragmentAndParameters renderOrderBy (OrderByModel orderByModel ) {
64
+ return new OrderByRenderer (renderingContext ).render (orderByModel );
65
+ }
66
+
67
+ private Optional <FragmentAndParameters > renderPagingModel () {
68
+ return selectModel .pagingModel ().map (this ::renderPagingModel );
35
69
}
36
70
37
- public SelectStatementProvider render ( ) {
38
- FragmentAndParameters fragmentAndParameters = RendererFactory . createSubQueryRenderer ( selectModel )
39
- .render ( renderingContext );
40
- return DefaultSelectStatementProvider . withSelectStatement ( fragmentAndParameters . fragment () )
41
- .withParameters ( fragmentAndParameters . parameters () )
42
- .build ();
71
+ private FragmentAndParameters renderPagingModel ( PagingModel pagingModel ) {
72
+ return new PagingModelRenderer . Builder ( )
73
+ .withPagingModel ( pagingModel )
74
+ . withRenderingContext ( renderingContext )
75
+ .build ( )
76
+ .render ();
43
77
}
44
78
45
79
public static Builder withSelectModel (SelectModel selectModel ) {
@@ -48,10 +82,10 @@ public static Builder withSelectModel(SelectModel selectModel) {
48
82
49
83
public static class Builder {
50
84
private SelectModel selectModel ;
51
- private RenderingStrategy renderingStrategy ;
85
+ private RenderingContext renderingContext ;
52
86
53
- public Builder withRenderingStrategy ( RenderingStrategy renderingStrategy ) {
54
- this .renderingStrategy = renderingStrategy ;
87
+ public Builder withRenderingContext ( RenderingContext renderingContext ) {
88
+ this .renderingContext = renderingContext ;
55
89
return this ;
56
90
}
57
91
0 commit comments