15
15
*/
16
16
package org .mybatis .dynamic .sql .select .render ;
17
17
18
+ import static org .mybatis .dynamic .sql .util .StringUtilities .spaceBefore ;
19
+
18
20
import java .util .Map ;
19
21
import java .util .Objects ;
20
22
import java .util .Optional ;
@@ -46,14 +48,14 @@ public SelectStatementProvider render() {
46
48
.collect (QueryExpressionCollector .collect ());
47
49
48
50
Map <String , Object > parameters = collector .parameters ();
49
- Optional <String > limitClause = selectModel .limit ().map (l -> renderLimit (parameters , l ));
50
- Optional <String > offsetClause = selectModel .offset ().map (o -> renderOffset (parameters , o ));
51
51
52
- return DefaultSelectStatementProvider .withQueryExpression (collector .queryExpression ())
52
+ String selectStatement = collector .queryExpression ()
53
+ + spaceBefore (renderOrderBy ())
54
+ + spaceBefore (renderLimit (parameters ))
55
+ + spaceBefore (renderOffset (parameters ));
56
+
57
+ return DefaultSelectStatementProvider .withSelectStatement (selectStatement )
53
58
.withParameters (parameters )
54
- .withOrderByClause (selectModel .orderByModel ().map (this ::renderOrderBy ))
55
- .withLimitClause (limitClause )
56
- .withOffsetClause (offsetClause )
57
59
.build ();
58
60
}
59
61
@@ -65,26 +67,39 @@ private QueryExpression renderQueryExpression(QueryExpressionModel queryExpressi
65
67
.render ();
66
68
}
67
69
70
+ private Optional <String > renderOrderBy () {
71
+ return selectModel .orderByModel ()
72
+ .map (this ::renderOrderBy );
73
+ }
74
+
68
75
private String renderOrderBy (OrderByModel orderByModel ) {
69
- return orderByModel .mapColumns (this ::orderByPhrase )
76
+ return orderByModel .mapColumns (this ::calculateOrderByPhrase )
70
77
.collect (CustomCollectors .joining (", " , "order by " , "" )); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
71
78
}
72
79
73
- private String orderByPhrase (SortSpecification column ) {
80
+ private String calculateOrderByPhrase (SortSpecification column ) {
74
81
String phrase = column .aliasOrName ();
75
82
if (column .isDescending ()) {
76
83
phrase = phrase + " DESC" ; //$NON-NLS-1$
77
84
}
78
85
return phrase ;
79
86
}
80
87
88
+ private Optional <String > renderLimit (Map <String , Object > parameters ) {
89
+ return selectModel .limit ().map (l -> renderLimit (parameters , l ));
90
+ }
91
+
81
92
private String renderLimit (Map <String , Object > parameters , Long limit ) {
82
93
String placeholder = renderingStrategy .getFormattedJdbcPlaceholder (RenderingStrategy .DEFAULT_PARAMETER_PREFIX ,
83
94
LIMIT_PARAMETER );
84
95
parameters .put (LIMIT_PARAMETER , limit );
85
96
return "limit " + placeholder ; //$NON-NLS-1$
86
97
}
87
98
99
+ private Optional <String > renderOffset (Map <String , Object > parameters ) {
100
+ return selectModel .offset ().map (o -> renderOffset (parameters , o ));
101
+ }
102
+
88
103
private String renderOffset (Map <String , Object > parameters , Long offset ) {
89
104
String placeholder = renderingStrategy .getFormattedJdbcPlaceholder (RenderingStrategy .DEFAULT_PARAMETER_PREFIX ,
90
105
OFFSET_PARAMETER );
0 commit comments