mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-07 09:08:24 +08:00
optimize "case" builder, close #I7CIF9
This commit is contained in:
parent
5fd278a7a0
commit
b77faf4bf1
@ -83,10 +83,6 @@ public class CaseQueryColumn extends QueryColumn implements HasParamsColumn {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public <T> QueryColumn as(LambdaGetter<T> fn) {
|
|
||||||
return as(LambdaUtil.getFieldName(fn));
|
|
||||||
}
|
|
||||||
|
|
||||||
private String buildValue(Object value) {
|
private String buildValue(Object value) {
|
||||||
if (value instanceof Number || value instanceof Boolean) {
|
if (value instanceof Number || value instanceof Boolean) {
|
||||||
@ -114,19 +110,15 @@ public class CaseQueryColumn extends QueryColumn implements HasParamsColumn {
|
|||||||
|
|
||||||
|
|
||||||
public static class When implements CloneSupport<When> {
|
public static class When implements CloneSupport<When> {
|
||||||
private Builder builder;
|
|
||||||
private QueryCondition whenCondition;
|
private QueryCondition whenCondition;
|
||||||
private Object thenValue;
|
private Object thenValue;
|
||||||
|
|
||||||
public When(Builder builder, QueryCondition whenCondition) {
|
public When(QueryCondition whenCondition) {
|
||||||
this.builder = builder;
|
|
||||||
this.whenCondition = whenCondition;
|
this.whenCondition = whenCondition;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Builder then(Object thenValue) {
|
public void then(Object thenValue) {
|
||||||
this.thenValue = thenValue;
|
this.thenValue = thenValue;
|
||||||
this.builder.caseQueryColumn.addWhen(this);
|
|
||||||
return builder;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -143,12 +135,14 @@ public class CaseQueryColumn extends QueryColumn implements HasParamsColumn {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Builder implements CloneSupport<Builder> {
|
public static class Builder {
|
||||||
|
|
||||||
private CaseQueryColumn caseQueryColumn = new CaseQueryColumn();
|
private CaseQueryColumn caseQueryColumn = new CaseQueryColumn();
|
||||||
|
private When lastWhen;
|
||||||
|
|
||||||
public When when(QueryCondition condition) {
|
public Then when(QueryCondition condition) {
|
||||||
return new When(this, condition);
|
lastWhen = new When(condition);
|
||||||
|
return new Then(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Builder else_(Object elseValue) {
|
public Builder else_(Object elseValue) {
|
||||||
@ -160,15 +154,18 @@ public class CaseQueryColumn extends QueryColumn implements HasParamsColumn {
|
|||||||
return caseQueryColumn;
|
return caseQueryColumn;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
public static class Then {
|
||||||
public Builder clone() {
|
|
||||||
try {
|
private Builder builder;
|
||||||
Builder clone = (Builder) super.clone();
|
|
||||||
// deep clone ...
|
public Then(Builder builder) {
|
||||||
clone.caseQueryColumn = this.caseQueryColumn.clone();
|
this.builder = builder;
|
||||||
return clone;
|
}
|
||||||
} catch (CloneNotSupportedException e) {
|
|
||||||
throw FlexExceptions.wrap(e);
|
public Builder then(Object thenValue) {
|
||||||
|
this.builder.lastWhen.then(thenValue);
|
||||||
|
this.builder.caseQueryColumn.addWhen(builder.lastWhen);
|
||||||
|
return builder;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -98,11 +98,6 @@ public class CaseSearchQueryColumn extends QueryColumn implements HasParamsColum
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public <T> QueryColumn as(LambdaGetter<T> fn) {
|
|
||||||
return as(LambdaUtil.getFieldName(fn));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Object[] getParamValues() {
|
public Object[] getParamValues() {
|
||||||
@ -115,19 +110,15 @@ public class CaseSearchQueryColumn extends QueryColumn implements HasParamsColum
|
|||||||
|
|
||||||
|
|
||||||
public static class When implements CloneSupport<When> {
|
public static class When implements CloneSupport<When> {
|
||||||
private Builder builder;
|
|
||||||
private Object searchValue;
|
private Object searchValue;
|
||||||
private Object thenValue;
|
private Object thenValue;
|
||||||
|
|
||||||
public When(Builder builder, Object searchValue) {
|
public When(Object searchValue) {
|
||||||
this.builder = builder;
|
|
||||||
this.searchValue = searchValue;
|
this.searchValue = searchValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Builder then(Object thenValue) {
|
public void setThenValue(Object thenValue) {
|
||||||
this.thenValue = thenValue;
|
this.thenValue = thenValue;
|
||||||
this.builder.caseQueryColumn.addWhen(this);
|
|
||||||
return builder;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@ -144,19 +135,19 @@ public class CaseSearchQueryColumn extends QueryColumn implements HasParamsColum
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class Builder implements CloneSupport<Builder> {
|
|
||||||
|
public static class Builder {
|
||||||
|
|
||||||
private CaseSearchQueryColumn caseQueryColumn = new CaseSearchQueryColumn();
|
private CaseSearchQueryColumn caseQueryColumn = new CaseSearchQueryColumn();
|
||||||
|
private When lastWhen;
|
||||||
private Builder() {
|
|
||||||
}
|
|
||||||
|
|
||||||
public Builder(QueryColumn queryColumn) {
|
public Builder(QueryColumn queryColumn) {
|
||||||
this.caseQueryColumn.queryColumn = queryColumn;
|
this.caseQueryColumn.queryColumn = queryColumn;
|
||||||
}
|
}
|
||||||
|
|
||||||
public When when(Object searchValue) {
|
public Then when(Object searchValue) {
|
||||||
return new When(this, searchValue);
|
lastWhen = new When(searchValue);
|
||||||
|
return new Then(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
public Builder else_(Object elseValue) {
|
public Builder else_(Object elseValue) {
|
||||||
@ -168,15 +159,18 @@ public class CaseSearchQueryColumn extends QueryColumn implements HasParamsColum
|
|||||||
return caseQueryColumn;
|
return caseQueryColumn;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
public static class Then {
|
||||||
public Builder clone() {
|
|
||||||
try {
|
private Builder builder;
|
||||||
Builder clone = (Builder) super.clone();
|
|
||||||
// deep clone ...
|
public Then(Builder builder) {
|
||||||
clone.caseQueryColumn = this.caseQueryColumn.clone();
|
this.builder = builder;
|
||||||
return clone;
|
}
|
||||||
} catch (CloneNotSupportedException e) {
|
|
||||||
throw FlexExceptions.wrap(e);
|
public Builder then(Object thenValue) {
|
||||||
|
this.builder.lastWhen.setThenValue(thenValue);
|
||||||
|
this.builder.caseQueryColumn.addWhen(builder.lastWhen);
|
||||||
|
return builder;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -374,8 +374,6 @@ public class AccountSqlTester {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testCase1() {
|
public void testCase1() {
|
||||||
IDialect dialect = new CommonsDialectImpl();
|
|
||||||
|
|
||||||
QueryWrapper queryWrapper = QueryWrapper.create()
|
QueryWrapper queryWrapper = QueryWrapper.create()
|
||||||
.select(ACCOUNT.ALL_COLUMNS,
|
.select(ACCOUNT.ALL_COLUMNS,
|
||||||
case_()
|
case_()
|
||||||
@ -386,8 +384,7 @@ public class AccountSqlTester {
|
|||||||
.from(ACCOUNT)
|
.from(ACCOUNT)
|
||||||
.and(ACCOUNT.USER_NAME.like("michael"));
|
.and(ACCOUNT.USER_NAME.like("michael"));
|
||||||
|
|
||||||
String sql = dialect.forSelectByQuery(queryWrapper);
|
System.out.println(queryWrapper.toSQL());
|
||||||
System.out.println(sql);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user