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 ;
36+ import org .mybatis .dynamic .sql .select .join .OnJoinCriterion ;
3537import org .mybatis .dynamic .sql .select .join .JoinSpecification ;
3638import org .mybatis .dynamic .sql .select .join .JoinType ;
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,16 @@ public JoinSpecificationStarter join(SqlTable joinTable, String tableAlias) {
9594 return join (joinTable );
9695 }
9796
97+ public QueryExpressionDSL <R > join (SqlTable joinTable , OnJoinCriterion joinCriterion , AndJoinCriterion ...joinCriteria ) {
98+ addJoinSpecificationBuilder (joinTable , joinCriterion , JoinType .INNER , joinCriteria );
99+ return this ;
100+ }
101+
102+ public QueryExpressionDSL <R > join (SqlTable joinTable , String tableAlias , OnJoinCriterion joinCriterion , AndJoinCriterion ...joinCriteria ) {
103+ tableAliases .put (joinTable , tableAlias );
104+ return join (joinTable , joinCriterion , joinCriteria );
105+ }
106+
98107 public JoinSpecificationStarter leftJoin (SqlTable joinTable ) {
99108 return new JoinSpecificationStarter (joinTable , JoinType .LEFT );
100109 }
@@ -104,6 +113,16 @@ public JoinSpecificationStarter leftJoin(SqlTable joinTable, String tableAlias)
104113 return leftJoin (joinTable );
105114 }
106115
116+ public QueryExpressionDSL <R > leftJoin (SqlTable joinTable , OnJoinCriterion joinCriterion , AndJoinCriterion ...joinCriteria ) {
117+ addJoinSpecificationBuilder (joinTable , joinCriterion , JoinType .LEFT , joinCriteria );
118+ return this ;
119+ }
120+
121+ public QueryExpressionDSL <R > leftJoin (SqlTable joinTable , String tableAlias , OnJoinCriterion joinCriterion , AndJoinCriterion ...joinCriteria ) {
122+ tableAliases .put (joinTable , tableAlias );
123+ return leftJoin (joinTable , joinCriterion , joinCriteria );
124+ }
125+
107126 public JoinSpecificationStarter rightJoin (SqlTable joinTable ) {
108127 return new JoinSpecificationStarter (joinTable , JoinType .RIGHT );
109128 }
@@ -113,6 +132,16 @@ public JoinSpecificationStarter rightJoin(SqlTable joinTable, String tableAlias)
113132 return rightJoin (joinTable );
114133 }
115134
135+ public QueryExpressionDSL <R > rightJoin (SqlTable joinTable , OnJoinCriterion joinCriterion , AndJoinCriterion ...joinCriteria ) {
136+ addJoinSpecificationBuilder (joinTable , joinCriterion , JoinType .RIGHT , joinCriteria );
137+ return this ;
138+ }
139+
140+ public QueryExpressionDSL <R > rightJoin (SqlTable joinTable , String tableAlias , OnJoinCriterion joinCriterion , AndJoinCriterion ...joinCriteria ) {
141+ tableAliases .put (joinTable , tableAlias );
142+ return rightJoin (joinTable , joinCriterion , joinCriteria );
143+ }
144+
116145 public JoinSpecificationStarter fullJoin (SqlTable joinTable ) {
117146 return new JoinSpecificationStarter (joinTable , JoinType .FULL );
118147 }
@@ -122,13 +151,30 @@ public JoinSpecificationStarter fullJoin(SqlTable joinTable, String tableAlias)
122151 return fullJoin (joinTable );
123152 }
124153
125- @ Override
154+ public QueryExpressionDSL <R > fullJoin (SqlTable joinTable , OnJoinCriterion joinCriterion , AndJoinCriterion ...joinCriteria ) {
155+ addJoinSpecificationBuilder (joinTable , joinCriterion , JoinType .FULL , joinCriteria );
156+ return this ;
157+ }
158+
159+ public QueryExpressionDSL <R > fullJoin (SqlTable joinTable , String tableAlias , OnJoinCriterion joinCriterion , AndJoinCriterion ...joinCriteria ) {
160+ tableAliases .put (joinTable , tableAlias );
161+ return fullJoin (joinTable , joinCriterion , joinCriteria );
162+ }
163+
164+ private void addJoinSpecificationBuilder (SqlTable joinTable , OnJoinCriterion joinCriterion , JoinType joinType ,
165+ AndJoinCriterion ...joinCriteria ) {
166+ joinSpecificationBuilders .add (new JoinSpecification .Builder ()
167+ .withJoinTable (joinTable )
168+ .withJoinType (joinType )
169+ .withJoinCriterion (joinCriterion )
170+ .withJoinCriteria (Arrays .asList (joinCriteria )));
171+ }
172+
126173 public GroupByFinisher groupBy (BasicColumn ...columns ) {
127174 groupByModel = GroupByModel .of (columns );
128175 return new GroupByFinisher ();
129176 }
130177
131- @ Override
132178 public SelectDSL <R > orderBy (SortSpecification ...columns ) {
133179 selectDSL .orderBy (columns );
134180 return selectDSL ;
@@ -160,17 +206,14 @@ private JoinModel buildJoinModel() {
160206 .collect (Collectors .toList ()));
161207 }
162208
163- @ Override
164209 public SelectDSL <R >.LimitFinisher limit (long limit ) {
165210 return selectDSL .limit (limit );
166211 }
167212
168- @ Override
169213 public SelectDSL <R >.OffsetFirstFinisher offset (long offset ) {
170214 return selectDSL .offset (offset );
171215 }
172216
173- @ Override
174217 public SelectDSL <R >.FetchFirstFinisher fetchFirst (long fetchFirstRows ) {
175218 return selectDSL .fetchFirst (fetchFirstRows );
176219 }
@@ -298,19 +341,19 @@ public JoinSpecificationFinisher on(BasicColumn joinColumn, JoinCondition joinCo
298341 }
299342
300343 public JoinSpecificationFinisher on (BasicColumn joinColumn , JoinCondition joinCondition ,
301- JoinCriterion ...joinCriteria ) {
344+ AndJoinCriterion ...joinCriteria ) {
302345 return new JoinSpecificationFinisher (joinTable , joinColumn , joinCondition , joinType , joinCriteria );
303346 }
304347 }
305348
306- public class JoinSpecificationFinisher implements CompletableQuery <R > {
349+ public class JoinSpecificationFinisher implements Buildable <R > {
307350 private JoinSpecification .Builder joinSpecificationBuilder ;
308351
309352 public JoinSpecificationFinisher (SqlTable table , BasicColumn joinColumn ,
310353 JoinCondition joinCondition , JoinType joinType ) {
311- JoinCriterion joinCriterion = JoinCriterion .withJoinColumn (joinColumn )
354+ JoinCriterion joinCriterion = new OnJoinCriterion .Builder ()
355+ .withJoinColumn (joinColumn )
312356 .withJoinCondition (joinCondition )
313- .withConnector ("on" ) //$NON-NLS-1$
314357 .build ();
315358
316359 joinSpecificationBuilder = JoinSpecification .withJoinTable (table )
@@ -321,10 +364,10 @@ public JoinSpecificationFinisher(SqlTable table, BasicColumn joinColumn,
321364 }
322365
323366 public JoinSpecificationFinisher (SqlTable table , BasicColumn joinColumn ,
324- JoinCondition joinCondition , JoinType joinType , JoinCriterion ...joinCriteria ) {
325- JoinCriterion joinCriterion = JoinCriterion .withJoinColumn (joinColumn )
367+ JoinCondition joinCondition , JoinType joinType , AndJoinCriterion ...joinCriteria ) {
368+ JoinCriterion joinCriterion = new OnJoinCriterion .Builder ()
369+ .withJoinColumn (joinColumn )
326370 .withJoinCondition (joinCondition )
327- .withConnector ("on" ) //$NON-NLS-1$
328371 .build ();
329372
330373 joinSpecificationBuilder = JoinSpecification .withJoinTable (table )
@@ -340,26 +383,23 @@ public R build() {
340383 return QueryExpressionDSL .this .build ();
341384 }
342385
343- @ Override
344386 public QueryExpressionWhereBuilder where () {
345387 return QueryExpressionDSL .this .where ();
346388 }
347389
348- @ Override
349390 public <T > QueryExpressionWhereBuilder where (BindableColumn <T > column , VisitableCondition <T > condition ) {
350391 return QueryExpressionDSL .this .where (column , condition );
351392 }
352393
353- @ Override
354394 public <T > QueryExpressionWhereBuilder where (BindableColumn <T > column , VisitableCondition <T > condition ,
355395 SqlCriterion <?>...subCriteria ) {
356396 return QueryExpressionDSL .this .where (column , condition , subCriteria );
357397 }
358398
359399 public JoinSpecificationFinisher and (BasicColumn joinColumn , JoinCondition joinCondition ) {
360- JoinCriterion joinCriterion = JoinCriterion .withJoinColumn (joinColumn )
400+ JoinCriterion joinCriterion = new AndJoinCriterion .Builder ()
401+ .withJoinColumn (joinColumn )
361402 .withJoinCondition (joinCondition )
362- .withConnector ("and" ) //$NON-NLS-1$
363403 .build ();
364404 joinSpecificationBuilder .withJoinCriterion (joinCriterion );
365405 return this ;
@@ -397,7 +437,6 @@ public JoinSpecificationStarter fullJoin(SqlTable joinTable, String tableAlias)
397437 return QueryExpressionDSL .this .fullJoin (joinTable , tableAlias );
398438 }
399439
400- @ Override
401440 public GroupByFinisher groupBy (BasicColumn ...columns ) {
402441 return QueryExpressionDSL .this .groupBy (columns );
403442 }
@@ -410,22 +449,18 @@ public UnionBuilder unionAll() {
410449 return QueryExpressionDSL .this .unionAll ();
411450 }
412451
413- @ Override
414452 public SelectDSL <R > orderBy (SortSpecification ...columns ) {
415453 return QueryExpressionDSL .this .orderBy (columns );
416454 }
417455
418- @ Override
419456 public SelectDSL <R >.LimitFinisher limit (long limit ) {
420457 return QueryExpressionDSL .this .limit (limit );
421458 }
422459
423- @ Override
424460 public SelectDSL <R >.OffsetFirstFinisher offset (long offset ) {
425461 return QueryExpressionDSL .this .offset (offset );
426462 }
427463
428- @ Override
429464 public SelectDSL <R >.FetchFirstFinisher fetchFirst (long fetchFirstRows ) {
430465 return QueryExpressionDSL .this .fetchFirst (fetchFirstRows );
431466 }
0 commit comments