Skip to content

Commit 6bbf0f7

Browse files
committed
refactor: 优化
1 parent ccf2e05 commit 6bbf0f7

File tree

3 files changed

+60
-73
lines changed

3 files changed

+60
-73
lines changed

hsweb-easy-orm-rdb/src/main/java/org/hswebframework/ezorm/rdb/operator/builder/fragments/SimpleTermsFragmentBuilder.java

Lines changed: 42 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,11 @@
44
import org.hswebframework.ezorm.rdb.metadata.RDBColumnMetadata;
55
import org.hswebframework.ezorm.rdb.metadata.RDBTableMetadata;
66
import org.hswebframework.ezorm.rdb.metadata.TableOrViewMetadata;
7+
import org.hswebframework.ezorm.rdb.metadata.key.ForeignKeyMetadata;
8+
import org.hswebframework.ezorm.rdb.operator.builder.fragments.term.ForeignKeyTermFragmentBuilder;
79

10+
import java.util.Collections;
11+
import java.util.LinkedList;
812
import java.util.List;
913

1014
import static org.hswebframework.ezorm.rdb.operator.builder.fragments.TermFragmentBuilder.createFeatureId;
@@ -29,16 +33,43 @@ public SqlFragments createTermFragments(TableOrViewMetadata parameter, List<Term
2933

3034
@Override
3135
protected SqlFragments createTermFragments(TableOrViewMetadata table, Term term) {
36+
return createByTable(table, term);
37+
}
38+
39+
public static SqlFragments createByTable(TableOrViewMetadata table, Term term) {
3240
if (term.getValue() instanceof NativeSql) {
3341
NativeSql sql = ((NativeSql) term.getValue());
34-
return PrepareSqlFragments.of(sql.getSql(), sql.getParameters());
42+
return SimpleSqlFragments.of(sql.getSql(), sql.getParameters());
43+
}
44+
45+
String columnName = term.getColumn();
46+
if (columnName == null) {
47+
return EmptySqlFragments.INSTANCE;
3548
}
36-
RDBColumnMetadata column = table.getColumn(term.getColumn()).orElse(null);
49+
50+
if (columnName.contains(".")) {
51+
String[] arr = columnName.split("[.]");
52+
if (table.equalsNameOrAlias(arr[0])) {
53+
columnName = arr[1];
54+
} else {
55+
return table
56+
.getForeignKey(arr[0])
57+
.flatMap(key -> key
58+
.getSource()
59+
.findFeature(ForeignKeyTermFragmentBuilder.ID)
60+
.map(builder -> builder.createFragments(table.getName(), key, createForeignKeyTerm(key, term))))
61+
.orElse(EmptySqlFragments.INSTANCE);
62+
}
63+
}
64+
65+
RDBColumnMetadata column = table.getColumn(columnName).orElse(null);
3766
if (column == null) {
3867
return EmptySqlFragments.INSTANCE;
3968
}
4069

41-
TermFragmentBuilder builder = column.findFeature(createFeatureId(term.getTermType())).orElse(null);
70+
TermFragmentBuilder builder = column
71+
.findFeature(TermFragmentBuilder.createFeatureId(term.getTermType()))
72+
.orElse(null);
4273

4374
if (builder != null) {
4475
return builder
@@ -47,4 +78,12 @@ protected SqlFragments createTermFragments(TableOrViewMetadata table, Term term)
4778

4879
return EmptySqlFragments.INSTANCE;
4980
}
81+
82+
static List<Term> createForeignKeyTerm(ForeignKeyMetadata keyMetadata, Term term) {
83+
Term copy = term.clone();
84+
//只要是嵌套到外键表的条件则认为是关联表的条件
85+
term.setTerms(new LinkedList<>());
86+
87+
return Collections.singletonList(copy);
88+
}
5089
}
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package org.hswebframework.ezorm.rdb.operator.builder.fragments.delete;
22

33
import lombok.AllArgsConstructor;
4+
import lombok.RequiredArgsConstructor;
45
import org.apache.commons.collections.CollectionUtils;
56
import org.hswebframework.ezorm.core.param.Term;
67
import org.hswebframework.ezorm.rdb.executor.SqlRequest;
@@ -15,19 +16,24 @@
1516
import java.util.List;
1617

1718
@SuppressWarnings("all")
18-
@AllArgsConstructor(staticName = "of")
19+
@RequiredArgsConstructor(staticName = "of")
1920
public class DefaultDeleteSqlBuilder extends AbstractTermsFragmentBuilder<DeleteOperatorParameter> implements DeleteSqlBuilder {
2021

21-
private RDBTableMetadata table;
22+
private final RDBTableMetadata table;
23+
24+
private SqlFragments DELETE;
2225

2326
@Override
2427
public SqlRequest build(DeleteOperatorParameter parameter) {
2528
if (CollectionUtils.isEmpty(parameter.getWhere())) {
2629
throw new UnsupportedOperationException("Unsupported No Conditions delete");
2730
}
31+
if (DELETE == null) {
32+
DELETE = SqlFragments.of("delete from", table.getFullName(), "where");
33+
}
2834

29-
PrepareSqlFragments fragments = PrepareSqlFragments.of();
30-
fragments.addSql("delete from", table.getFullName(), "where");
35+
BatchSqlFragments fragments = new BatchSqlFragments(2, 1);
36+
fragments.add(DELETE);
3137

3238
SqlFragments where = createTermFragments(parameter, parameter.getWhere());
3339
if (where.isEmpty()) {
@@ -40,36 +46,7 @@ public SqlRequest build(DeleteOperatorParameter parameter) {
4046

4147
@Override
4248
protected SqlFragments createTermFragments(DeleteOperatorParameter parameter, Term term) {
43-
String columnName = term.getColumn();
44-
if (columnName == null) {
45-
return EmptySqlFragments.INSTANCE;
46-
}
47-
48-
if (columnName.contains(".")) {
49-
String[] arr = columnName.split("[.]");
50-
if (table.equalsNameOrAlias(arr[0])) {
51-
columnName = arr[1];
52-
} else {
53-
return table.getForeignKey(arr[0])
54-
.flatMap(key ->table.findFeature(ForeignKeyTermFragmentBuilder.ID)
55-
.map(builder -> builder.createFragments(table.getName(), key, createForeignKeyTerm(key, term))))
56-
.orElse(EmptySqlFragments.INSTANCE);
57-
}
58-
}
59-
60-
return table
61-
.getColumn(columnName)
62-
.flatMap(column -> column
63-
.findFeature(TermFragmentBuilder.createFeatureId(term.getTermType()))
64-
.map(termFragment -> termFragment.createFragments(column.getQuoteName(), column, term)))
65-
.orElse(EmptySqlFragments.INSTANCE);
49+
return SimpleTermsFragmentBuilder.createByTable(table,term);
6650
}
6751

68-
protected List<Term> createForeignKeyTerm(ForeignKeyMetadata keyMetadata, Term term) {
69-
Term copy = term.clone();
70-
//只要是嵌套到外键表的条件则认为是关联表的条件
71-
term.setTerms(new LinkedList<>());
72-
73-
return Collections.singletonList(copy);
74-
}
7552
}

hsweb-easy-orm-rdb/src/main/java/org/hswebframework/ezorm/rdb/operator/builder/fragments/update/DefaultUpdateSqlBuilder.java

Lines changed: 7 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,14 @@
11
package org.hswebframework.ezorm.rdb.operator.builder.fragments.update;
22

3+
import com.google.common.collect.Sets;
34
import lombok.Getter;
45
import org.apache.commons.collections.CollectionUtils;
56
import org.hswebframework.ezorm.core.param.Term;
67
import org.hswebframework.ezorm.rdb.executor.EmptySqlRequest;
78
import org.hswebframework.ezorm.rdb.executor.SqlRequest;
89
import org.hswebframework.ezorm.rdb.metadata.RDBColumnMetadata;
910
import org.hswebframework.ezorm.rdb.metadata.RDBTableMetadata;
10-
import org.hswebframework.ezorm.rdb.metadata.key.ForeignKeyMetadata;
1111
import org.hswebframework.ezorm.rdb.operator.builder.fragments.*;
12-
import org.hswebframework.ezorm.rdb.operator.builder.fragments.term.ForeignKeyTermFragmentBuilder;
1312
import org.hswebframework.ezorm.rdb.operator.dml.update.UpdateColumn;
1413
import org.hswebframework.ezorm.rdb.operator.dml.update.UpdateOperatorParameter;
1514

@@ -45,9 +44,11 @@ public SqlRequest build(UpdateOperatorParameter parameter) {
4544
if (CollectionUtils.isEmpty(parameter.getWhere())) {
4645
throw new UnsupportedOperationException("unsupported no conditions update");
4746
}
48-
Set<RDBColumnMetadata> distinctColumns = new HashSet<>();
47+
int columnSize = parameter.getColumns().size();
4948

50-
BatchSqlFragments fragments = new BatchSqlFragments(3 + distinctColumns.size(), distinctColumns.size());
49+
Set<RDBColumnMetadata> distinctColumns = Sets.newHashSetWithExpectedSize(columnSize);
50+
51+
BatchSqlFragments fragments = new BatchSqlFragments(3 + columnSize, columnSize);
5152

5253
fragments.add(PREFIX);
5354
int index = 0;
@@ -71,7 +72,7 @@ public SqlRequest build(UpdateOperatorParameter parameter) {
7172
else if (distinctColumns.add(columnMetadata)) {
7273
//函数
7374
if (column.getFunction() != null) {
74-
columnFragments = new BatchSqlFragments(2,1)
75+
columnFragments = new BatchSqlFragments(2, 1)
7576
.addSql(columnMetadata.getQuoteName(), "=")
7677
.add(
7778
columnMetadata
@@ -122,37 +123,7 @@ else if (value instanceof NativeSql) {
122123

123124
@Override
124125
protected SqlFragments createTermFragments(UpdateOperatorParameter parameter, Term term) {
125-
String columnName = term.getColumn();
126-
if (columnName == null) {
127-
return EmptySqlFragments.INSTANCE;
128-
}
129-
130-
if (columnName.contains(".")) {
131-
String[] arr = columnName.split("[.]");
132-
if (table.equalsNameOrAlias(arr[0])) {
133-
columnName = arr[1];
134-
} else {
135-
return table.getForeignKey(arr[0])
136-
.flatMap(key -> key.getSource()
137-
.findFeature(ForeignKeyTermFragmentBuilder.ID)
138-
.map(builder -> builder.createFragments(table.getName(), key, createForeignKeyTerm(key, term))))
139-
.orElse(EmptySqlFragments.INSTANCE);
140-
}
141-
}
142-
143-
return table
144-
.getColumn(columnName)
145-
.flatMap(column -> column
146-
.findFeature(TermFragmentBuilder.createFeatureId(term.getTermType()))
147-
.map(termFragment -> termFragment.createFragments(column.getQuoteName(), column, term)))
148-
.orElse(EmptySqlFragments.INSTANCE);
126+
return SimpleTermsFragmentBuilder.createByTable(table, term);
149127
}
150128

151-
protected List<Term> createForeignKeyTerm(ForeignKeyMetadata keyMetadata, Term term) {
152-
Term copy = term.clone();
153-
//只要是嵌套到外键表的条件则认为是关联表的条件
154-
term.setTerms(new LinkedList<>());
155-
156-
return Collections.singletonList(copy);
157-
}
158129
}

0 commit comments

Comments
 (0)