1515 */
1616package org .mybatis .dynamic .sql .select .render ;
1717
18+ import static org .mybatis .dynamic .sql .util .StringUtilities .spaceBefore ;
19+
1820import java .util .Map ;
1921import java .util .Objects ;
2022import java .util .Optional ;
@@ -46,14 +48,14 @@ public SelectStatementProvider render() {
4648 .collect (QueryExpressionCollector .collect ());
4749
4850 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 ));
5151
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 )
5358 .withParameters (parameters )
54- .withOrderByClause (selectModel .orderByModel ().map (this ::renderOrderBy ))
55- .withLimitClause (limitClause )
56- .withOffsetClause (offsetClause )
5759 .build ();
5860 }
5961
@@ -65,26 +67,39 @@ private QueryExpression renderQueryExpression(QueryExpressionModel queryExpressi
6567 .render ();
6668 }
6769
70+ private Optional <String > renderOrderBy () {
71+ return selectModel .orderByModel ()
72+ .map (this ::renderOrderBy );
73+ }
74+
6875 private String renderOrderBy (OrderByModel orderByModel ) {
69- return orderByModel .mapColumns (this ::orderByPhrase )
76+ return orderByModel .mapColumns (this ::calculateOrderByPhrase )
7077 .collect (CustomCollectors .joining (", " , "order by " , "" )); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$
7178 }
7279
73- private String orderByPhrase (SortSpecification column ) {
80+ private String calculateOrderByPhrase (SortSpecification column ) {
7481 String phrase = column .aliasOrName ();
7582 if (column .isDescending ()) {
7683 phrase = phrase + " DESC" ; //$NON-NLS-1$
7784 }
7885 return phrase ;
7986 }
8087
88+ private Optional <String > renderLimit (Map <String , Object > parameters ) {
89+ return selectModel .limit ().map (l -> renderLimit (parameters , l ));
90+ }
91+
8192 private String renderLimit (Map <String , Object > parameters , Long limit ) {
8293 String placeholder = renderingStrategy .getFormattedJdbcPlaceholder (RenderingStrategy .DEFAULT_PARAMETER_PREFIX ,
8394 LIMIT_PARAMETER );
8495 parameters .put (LIMIT_PARAMETER , limit );
8596 return "limit " + placeholder ; //$NON-NLS-1$
8697 }
8798
99+ private Optional <String > renderOffset (Map <String , Object > parameters ) {
100+ return selectModel .offset ().map (o -> renderOffset (parameters , o ));
101+ }
102+
88103 private String renderOffset (Map <String , Object > parameters , Long offset ) {
89104 String placeholder = renderingStrategy .getFormattedJdbcPlaceholder (RenderingStrategy .DEFAULT_PARAMETER_PREFIX ,
90105 OFFSET_PARAMETER );
0 commit comments