Skip to content

Commit e14307a

Browse files
committed
Large Refactoring
- Remove the difficult to understand build delegates in QueryDSL and SelectDSL - Better use of Optionals - Allow any build method, on any intermediate object, to produce correct results
1 parent 2cb100a commit e14307a

24 files changed

+477
-561
lines changed

src/main/java/org/mybatis/dynamic/sql/delete/DeleteDSL.java

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -30,23 +30,27 @@ public class DeleteDSL<R> implements Buildable<R> {
3030

3131
private Function<DeleteModel, R> adapterFunction;
3232
private SqlTable table;
33+
protected DeleteWhereBuilder whereBuilder;
3334

3435
private DeleteDSL(SqlTable table, Function<DeleteModel, R> adapterFunction) {
3536
this.table = Objects.requireNonNull(table);
3637
this.adapterFunction = Objects.requireNonNull(adapterFunction);
3738
}
3839

3940
public DeleteWhereBuilder where() {
40-
return new DeleteWhereBuilder();
41+
whereBuilder = new DeleteWhereBuilder();
42+
return whereBuilder;
4143
}
4244

4345
public <T> DeleteWhereBuilder where(BindableColumn<T> column, VisitableCondition<T> condition) {
44-
return new DeleteWhereBuilder(column, condition);
46+
whereBuilder = new DeleteWhereBuilder(column, condition);
47+
return whereBuilder;
4548
}
4649

4750
public <T> DeleteWhereBuilder where(BindableColumn<T> column, VisitableCondition<T> condition,
4851
SqlCriterion<?>...subCriteria) {
49-
return new DeleteWhereBuilder(column, condition, subCriteria);
52+
whereBuilder = new DeleteWhereBuilder(column, condition, subCriteria);
53+
return whereBuilder;
5054
}
5155

5256
/**
@@ -57,7 +61,9 @@ public <T> DeleteWhereBuilder where(BindableColumn<T> column, VisitableCondition
5761
*/
5862
@Override
5963
public R build() {
60-
DeleteModel deleteModel = DeleteModel.withTable(table).build();
64+
DeleteModel deleteModel = DeleteModel.withTable(table)
65+
.withWhereModel(whereBuilder == null ? null : whereBuilder.buildWhereModel())
66+
.build();
6167
return adapterFunction.apply(deleteModel);
6268
}
6369

@@ -76,7 +82,7 @@ public static <T> DeleteDSL<MyBatis3DeleteModelAdapter<T>> deleteFromWithMapper(
7682

7783
public class DeleteWhereBuilder extends AbstractWhereDSL<DeleteWhereBuilder> implements Buildable<R> {
7884

79-
private <T> DeleteWhereBuilder() {
85+
private DeleteWhereBuilder() {
8086
super();
8187
}
8288

@@ -91,10 +97,7 @@ private <T> DeleteWhereBuilder(BindableColumn<T> column, VisitableCondition<T> c
9197

9298
@Override
9399
public R build() {
94-
DeleteModel deleteModel = DeleteModel.withTable(table)
95-
.withWhereModel(buildWhereModel())
96-
.build();
97-
return adapterFunction.apply(deleteModel);
100+
return DeleteDSL.this.build();
98101
}
99102

100103
@Override

src/main/java/org/mybatis/dynamic/sql/delete/DeleteModel.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* Copyright 2016-2018 the original author or authors.
2+
* Copyright 2016-2019 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.

src/main/java/org/mybatis/dynamic/sql/delete/render/DeleteRenderer.java

Lines changed: 24 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,6 @@
1717

1818
import static org.mybatis.dynamic.sql.util.StringUtilities.spaceBefore;
1919

20-
import java.util.Collections;
21-
import java.util.Map;
2220
import java.util.Objects;
2321
import java.util.Optional;
2422
import java.util.concurrent.atomic.AtomicInteger;
@@ -40,13 +38,33 @@ private DeleteRenderer(Builder builder) {
4038
}
4139

4240
public DeleteStatementProvider render() {
43-
Optional<WhereClauseProvider> whereClause = deleteModel.whereModel().flatMap(this::renderWhereClause);
44-
45-
return DefaultDeleteStatementProvider.withDeleteStatement(calculateDeleteStatement(whereClause))
46-
.withParameters(calculateParameters(whereClause))
41+
return deleteModel.whereModel()
42+
.flatMap(this::renderWhereClause)
43+
.map(this::renderWithWhereClause)
44+
.orElseGet(this::renderWithoutWhereClause);
45+
}
46+
47+
private DeleteStatementProvider renderWithWhereClause(WhereClauseProvider whereClauseProvider) {
48+
return DefaultDeleteStatementProvider.withDeleteStatement(calculateDeleteStatement(whereClauseProvider))
49+
.withParameters(whereClauseProvider.getParameters())
4750
.build();
4851
}
52+
53+
private String calculateDeleteStatement(WhereClauseProvider whereClause) {
54+
return calculateDeleteStatement()
55+
+ spaceBefore(whereClause.getWhereClause());
56+
}
4957

58+
private String calculateDeleteStatement() {
59+
return "delete from" //$NON-NLS-1$
60+
+ spaceBefore(deleteModel.table().tableNameAtRuntime());
61+
}
62+
63+
private DeleteStatementProvider renderWithoutWhereClause() {
64+
return DefaultDeleteStatementProvider.withDeleteStatement(calculateDeleteStatement())
65+
.build();
66+
}
67+
5068
private Optional<WhereClauseProvider> renderWhereClause(WhereModel whereModel) {
5169
return WhereRenderer.withWhereModel(whereModel)
5270
.withRenderingStrategy(renderingStrategy)
@@ -56,18 +74,6 @@ private Optional<WhereClauseProvider> renderWhereClause(WhereModel whereModel) {
5674
.render();
5775
}
5876

59-
private String calculateDeleteStatement(Optional<WhereClauseProvider> whereClause) {
60-
return "delete from" //$NON-NLS-1$
61-
+ spaceBefore(deleteModel.table().tableNameAtRuntime())
62-
+ spaceBefore(whereClause.map(WhereClauseProvider::getWhereClause));
63-
}
64-
65-
private Map<String, Object> calculateParameters(Optional<WhereClauseProvider> whereClause) {
66-
return whereClause
67-
.map(WhereClauseProvider::getParameters)
68-
.orElse(Collections.emptyMap());
69-
}
70-
7177
public static Builder withDeleteModel(DeleteModel deleteModel) {
7278
return new Builder().withDeleteModel(deleteModel);
7379
}

src/main/java/org/mybatis/dynamic/sql/render/MyBatis3RenderingStrategy.java

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,20 @@
1515
*/
1616
package org.mybatis.dynamic.sql.render;
1717

18-
import java.util.Optional;
19-
2018
import org.mybatis.dynamic.sql.BindableColumn;
2119

2220
public class MyBatis3RenderingStrategy extends RenderingStrategy {
2321
@Override
24-
public String getFormattedJdbcPlaceholder(Optional<BindableColumn<?>> column, String prefix, String parameterName) {
22+
public String getFormattedJdbcPlaceholder(String prefix, String parameterName) {
23+
return "#{" //$NON-NLS-1$
24+
+ prefix
25+
+ "." //$NON-NLS-1$
26+
+ parameterName
27+
+ "}"; //$NON-NLS-1$
28+
}
29+
30+
@Override
31+
public String getFormattedJdbcPlaceholder(BindableColumn<?> column, String prefix, String parameterName) {
2532
return "#{" //$NON-NLS-1$
2633
+ prefix
2734
+ "." //$NON-NLS-1$
@@ -31,16 +38,14 @@ public String getFormattedJdbcPlaceholder(Optional<BindableColumn<?>> column, St
3138
+ "}"; //$NON-NLS-1$
3239
}
3340

34-
private String renderTypeHandler(Optional<BindableColumn<?>> column) {
35-
return column
36-
.flatMap(BindableColumn::typeHandler)
41+
private String renderTypeHandler(BindableColumn<?> column) {
42+
return column.typeHandler()
3743
.map(th -> ",typeHandler=" + th) //$NON-NLS-1$
3844
.orElse(""); //$NON-NLS-1$
3945
}
4046

41-
private String renderJdbcType(Optional<BindableColumn<?>> column) {
42-
return column
43-
.flatMap(BindableColumn::jdbcType)
47+
private String renderJdbcType(BindableColumn<?> column) {
48+
return column.jdbcType()
4449
.map(jt -> ",jdbcType=" + jt.getName()) //$NON-NLS-1$
4550
.orElse(""); //$NON-NLS-1$
4651
}

src/main/java/org/mybatis/dynamic/sql/render/RenderingStrategy.java

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,6 @@
1515
*/
1616
package org.mybatis.dynamic.sql.render;
1717

18-
import java.util.Optional;
19-
2018
import org.mybatis.dynamic.sql.BindableColumn;
2119

2220
public abstract class RenderingStrategy {
@@ -26,14 +24,7 @@ public abstract class RenderingStrategy {
2624
public static final RenderingStrategy SPRING_NAMED_PARAMETER = new SpringNamedParameterRenderingStrategy();
2725
public static final String DEFAULT_PARAMETER_PREFIX = "parameters"; //$NON-NLS-1$
2826

29-
public String getFormattedJdbcPlaceholder(BindableColumn<?> column, String prefix, String parameterName) {
30-
return getFormattedJdbcPlaceholder(Optional.of(column), prefix, parameterName);
31-
}
32-
33-
public String getFormattedJdbcPlaceholder(String prefix, String parameterName) {
34-
return getFormattedJdbcPlaceholder(Optional.empty(), prefix, parameterName);
35-
}
27+
public abstract String getFormattedJdbcPlaceholder(BindableColumn<?> column, String prefix, String parameterName);
3628

37-
public abstract String getFormattedJdbcPlaceholder(Optional<BindableColumn<?>> column, String prefix,
38-
String parameterName);
29+
public abstract String getFormattedJdbcPlaceholder(String prefix, String parameterName);
3930
}

src/main/java/org/mybatis/dynamic/sql/render/SpringNamedParameterRenderingStrategy.java

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,17 @@
1515
*/
1616
package org.mybatis.dynamic.sql.render;
1717

18-
import java.util.Optional;
19-
2018
import org.mybatis.dynamic.sql.BindableColumn;
2119

2220
public class SpringNamedParameterRenderingStrategy extends RenderingStrategy {
2321

2422
@Override
25-
public String getFormattedJdbcPlaceholder(Optional<BindableColumn<?>> column, String prefix, String parameterName) {
23+
public String getFormattedJdbcPlaceholder(BindableColumn<?> column, String prefix, String parameterName) {
24+
return getFormattedJdbcPlaceholder(prefix, parameterName);
25+
}
26+
27+
@Override
28+
public String getFormattedJdbcPlaceholder(String prefix, String parameterName) {
2629
return ":" + parameterName; //$NON-NLS-1$
2730
}
2831
}

src/main/java/org/mybatis/dynamic/sql/select/FetchFirstPagingModel.java

Lines changed: 0 additions & 61 deletions
This file was deleted.

src/main/java/org/mybatis/dynamic/sql/select/LimitAndOffsetPagingModel.java

Lines changed: 0 additions & 62 deletions
This file was deleted.

0 commit comments

Comments
 (0)