2929import org .mybatis .dynamic .sql .SqlCriterion ;
3030import org .mybatis .dynamic .sql .SqlTable ;
3131import org .mybatis .dynamic .sql .VisitableCondition ;
32+ import org .mybatis .dynamic .sql .select .join .AndJoinCriterion ;
3233import org .mybatis .dynamic .sql .select .join .JoinCondition ;
3334import org .mybatis .dynamic .sql .select .join .JoinCriterion ;
3435import org .mybatis .dynamic .sql .select .join .JoinModel ;
3536import org .mybatis .dynamic .sql .select .join .JoinSpecification ;
3637import org .mybatis .dynamic .sql .select .join .JoinType ;
38+ import org .mybatis .dynamic .sql .select .join .OnJoinCriterion ;
3739import org .mybatis .dynamic .sql .util .Buildable ;
3840import org .mybatis .dynamic .sql .where .AbstractWhereDSL ;
3941
40- public class QueryExpressionDSL <R > implements CompletableQuery <R > {
42+ public class QueryExpressionDSL <R > implements Buildable <R > {
4143
4244 private String connector ;
4345 private SelectDSL <R > selectDSL ;
@@ -62,19 +64,16 @@ public class QueryExpressionDSL<R> implements CompletableQuery<R> {
6264 tableAliases .put (table , tableAlias );
6365 }
6466
65- @ Override
6667 public QueryExpressionWhereBuilder where () {
6768 whereBuilder = new QueryExpressionWhereBuilder ();
6869 return whereBuilder ;
6970 }
7071
71- @ Override
7272 public <T > QueryExpressionWhereBuilder where (BindableColumn <T > column , VisitableCondition <T > condition ) {
7373 whereBuilder = new QueryExpressionWhereBuilder (column , condition );
7474 return whereBuilder ;
7575 }
7676
77- @ Override
7877 public <T > QueryExpressionWhereBuilder where (BindableColumn <T > column , VisitableCondition <T > condition ,
7978 SqlCriterion <?>...subCriteria ) {
8079 whereBuilder = new QueryExpressionWhereBuilder (column , condition , subCriteria );
@@ -95,6 +94,18 @@ public JoinSpecificationStarter join(SqlTable joinTable, String tableAlias) {
9594 return join (joinTable );
9695 }
9796
97+ public QueryExpressionDSL <R > join (SqlTable joinTable , OnJoinCriterion joinCriterion ,
98+ AndJoinCriterion ...joinCriteria ) {
99+ addJoinSpecificationBuilder (joinTable , joinCriterion , JoinType .INNER , joinCriteria );
100+ return this ;
101+ }
102+
103+ public QueryExpressionDSL <R > join (SqlTable joinTable , String tableAlias , OnJoinCriterion joinCriterion ,
104+ AndJoinCriterion ...joinCriteria ) {
105+ tableAliases .put (joinTable , tableAlias );
106+ return join (joinTable , joinCriterion , joinCriteria );
107+ }
108+
98109 public JoinSpecificationStarter leftJoin (SqlTable joinTable ) {
99110 return new JoinSpecificationStarter (joinTable , JoinType .LEFT );
100111 }
@@ -104,6 +115,18 @@ public JoinSpecificationStarter leftJoin(SqlTable joinTable, String tableAlias)
104115 return leftJoin (joinTable );
105116 }
106117
118+ public QueryExpressionDSL <R > leftJoin (SqlTable joinTable , OnJoinCriterion joinCriterion ,
119+ AndJoinCriterion ...joinCriteria ) {
120+ addJoinSpecificationBuilder (joinTable , joinCriterion , JoinType .LEFT , joinCriteria );
121+ return this ;
122+ }
123+
124+ public QueryExpressionDSL <R > leftJoin (SqlTable joinTable , String tableAlias , OnJoinCriterion joinCriterion ,
125+ AndJoinCriterion ...joinCriteria ) {
126+ tableAliases .put (joinTable , tableAlias );
127+ return leftJoin (joinTable , joinCriterion , joinCriteria );
128+ }
129+
107130 public JoinSpecificationStarter rightJoin (SqlTable joinTable ) {
108131 return new JoinSpecificationStarter (joinTable , JoinType .RIGHT );
109132 }
@@ -113,6 +136,18 @@ public JoinSpecificationStarter rightJoin(SqlTable joinTable, String tableAlias)
113136 return rightJoin (joinTable );
114137 }
115138
139+ public QueryExpressionDSL <R > rightJoin (SqlTable joinTable , OnJoinCriterion joinCriterion ,
140+ AndJoinCriterion ...joinCriteria ) {
141+ addJoinSpecificationBuilder (joinTable , joinCriterion , JoinType .RIGHT , joinCriteria );
142+ return this ;
143+ }
144+
145+ public QueryExpressionDSL <R > rightJoin (SqlTable joinTable , String tableAlias , OnJoinCriterion joinCriterion ,
146+ AndJoinCriterion ...joinCriteria ) {
147+ tableAliases .put (joinTable , tableAlias );
148+ return rightJoin (joinTable , joinCriterion , joinCriteria );
149+ }
150+
116151 public JoinSpecificationStarter fullJoin (SqlTable joinTable ) {
117152 return new JoinSpecificationStarter (joinTable , JoinType .FULL );
118153 }
@@ -122,13 +157,32 @@ public JoinSpecificationStarter fullJoin(SqlTable joinTable, String tableAlias)
122157 return fullJoin (joinTable );
123158 }
124159
125- @ Override
160+ public QueryExpressionDSL <R > fullJoin (SqlTable joinTable , OnJoinCriterion joinCriterion ,
161+ AndJoinCriterion ...joinCriteria ) {
162+ addJoinSpecificationBuilder (joinTable , joinCriterion , JoinType .FULL , joinCriteria );
163+ return this ;
164+ }
165+
166+ public QueryExpressionDSL <R > fullJoin (SqlTable joinTable , String tableAlias , OnJoinCriterion joinCriterion ,
167+ AndJoinCriterion ...joinCriteria ) {
168+ tableAliases .put (joinTable , tableAlias );
169+ return fullJoin (joinTable , joinCriterion , joinCriteria );
170+ }
171+
172+ private void addJoinSpecificationBuilder (SqlTable joinTable , OnJoinCriterion joinCriterion , JoinType joinType ,
173+ AndJoinCriterion ...joinCriteria ) {
174+ joinSpecificationBuilders .add (new JoinSpecification .Builder ()
175+ .withJoinTable (joinTable )
176+ .withJoinType (joinType )
177+ .withJoinCriterion (joinCriterion )
178+ .withJoinCriteria (Arrays .asList (joinCriteria )));
179+ }
180+
126181 public GroupByFinisher groupBy (BasicColumn ...columns ) {
127182 groupByModel = GroupByModel .of (columns );
128183 return new GroupByFinisher ();
129184 }
130185
131- @ Override
132186 public SelectDSL <R > orderBy (SortSpecification ...columns ) {
133187 selectDSL .orderBy (columns );
134188 return selectDSL ;
@@ -160,17 +214,14 @@ private JoinModel buildJoinModel() {
160214 .collect (Collectors .toList ()));
161215 }
162216
163- @ Override
164217 public SelectDSL <R >.LimitFinisher limit (long limit ) {
165218 return selectDSL .limit (limit );
166219 }
167220
168- @ Override
169221 public SelectDSL <R >.OffsetFirstFinisher offset (long offset ) {
170222 return selectDSL .offset (offset );
171223 }
172224
173- @ Override
174225 public SelectDSL <R >.FetchFirstFinisher fetchFirst (long fetchFirstRows ) {
175226 return selectDSL .fetchFirst (fetchFirstRows );
176227 }
@@ -298,19 +349,19 @@ public JoinSpecificationFinisher on(BasicColumn joinColumn, JoinCondition joinCo
298349 }
299350
300351 public JoinSpecificationFinisher on (BasicColumn joinColumn , JoinCondition joinCondition ,
301- JoinCriterion ...joinCriteria ) {
352+ AndJoinCriterion ...joinCriteria ) {
302353 return new JoinSpecificationFinisher (joinTable , joinColumn , joinCondition , joinType , joinCriteria );
303354 }
304355 }
305356
306- public class JoinSpecificationFinisher implements CompletableQuery <R > {
357+ public class JoinSpecificationFinisher implements Buildable <R > {
307358 private JoinSpecification .Builder joinSpecificationBuilder ;
308359
309360 public JoinSpecificationFinisher (SqlTable table , BasicColumn joinColumn ,
310361 JoinCondition joinCondition , JoinType joinType ) {
311- JoinCriterion joinCriterion = JoinCriterion .withJoinColumn (joinColumn )
362+ JoinCriterion joinCriterion = new OnJoinCriterion .Builder ()
363+ .withJoinColumn (joinColumn )
312364 .withJoinCondition (joinCondition )
313- .withConnector ("on" ) //$NON-NLS-1$
314365 .build ();
315366
316367 joinSpecificationBuilder = JoinSpecification .withJoinTable (table )
@@ -321,10 +372,10 @@ public JoinSpecificationFinisher(SqlTable table, BasicColumn joinColumn,
321372 }
322373
323374 public JoinSpecificationFinisher (SqlTable table , BasicColumn joinColumn ,
324- JoinCondition joinCondition , JoinType joinType , JoinCriterion ...joinCriteria ) {
325- JoinCriterion joinCriterion = JoinCriterion .withJoinColumn (joinColumn )
375+ JoinCondition joinCondition , JoinType joinType , AndJoinCriterion ...joinCriteria ) {
376+ JoinCriterion joinCriterion = new OnJoinCriterion .Builder ()
377+ .withJoinColumn (joinColumn )
326378 .withJoinCondition (joinCondition )
327- .withConnector ("on" ) //$NON-NLS-1$
328379 .build ();
329380
330381 joinSpecificationBuilder = JoinSpecification .withJoinTable (table )
@@ -340,26 +391,23 @@ public R build() {
340391 return QueryExpressionDSL .this .build ();
341392 }
342393
343- @ Override
344394 public QueryExpressionWhereBuilder where () {
345395 return QueryExpressionDSL .this .where ();
346396 }
347397
348- @ Override
349398 public <T > QueryExpressionWhereBuilder where (BindableColumn <T > column , VisitableCondition <T > condition ) {
350399 return QueryExpressionDSL .this .where (column , condition );
351400 }
352401
353- @ Override
354402 public <T > QueryExpressionWhereBuilder where (BindableColumn <T > column , VisitableCondition <T > condition ,
355403 SqlCriterion <?>...subCriteria ) {
356404 return QueryExpressionDSL .this .where (column , condition , subCriteria );
357405 }
358406
359407 public JoinSpecificationFinisher and (BasicColumn joinColumn , JoinCondition joinCondition ) {
360- JoinCriterion joinCriterion = JoinCriterion .withJoinColumn (joinColumn )
408+ JoinCriterion joinCriterion = new AndJoinCriterion .Builder ()
409+ .withJoinColumn (joinColumn )
361410 .withJoinCondition (joinCondition )
362- .withConnector ("and" ) //$NON-NLS-1$
363411 .build ();
364412 joinSpecificationBuilder .withJoinCriterion (joinCriterion );
365413 return this ;
@@ -397,7 +445,6 @@ public JoinSpecificationStarter fullJoin(SqlTable joinTable, String tableAlias)
397445 return QueryExpressionDSL .this .fullJoin (joinTable , tableAlias );
398446 }
399447
400- @ Override
401448 public GroupByFinisher groupBy (BasicColumn ...columns ) {
402449 return QueryExpressionDSL .this .groupBy (columns );
403450 }
@@ -410,22 +457,18 @@ public UnionBuilder unionAll() {
410457 return QueryExpressionDSL .this .unionAll ();
411458 }
412459
413- @ Override
414460 public SelectDSL <R > orderBy (SortSpecification ...columns ) {
415461 return QueryExpressionDSL .this .orderBy (columns );
416462 }
417463
418- @ Override
419464 public SelectDSL <R >.LimitFinisher limit (long limit ) {
420465 return QueryExpressionDSL .this .limit (limit );
421466 }
422467
423- @ Override
424468 public SelectDSL <R >.OffsetFirstFinisher offset (long offset ) {
425469 return QueryExpressionDSL .this .offset (offset );
426470 }
427471
428- @ Override
429472 public SelectDSL <R >.FetchFirstFinisher fetchFirst (long fetchFirstRows ) {
430473 return QueryExpressionDSL .this .fetchFirst (fetchFirstRows );
431474 }
0 commit comments