Skip to content

Commit d0b6d51

Browse files
committed
refactor: 优化
1 parent 87e9ee0 commit d0b6d51

File tree

2 files changed

+21
-20
lines changed

2 files changed

+21
-20
lines changed

hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/query/QueryAnalyzer.java

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ enum Type {
9595
@RequiredArgsConstructor
9696
@Getter
9797
class Select {
98-
private transient Map<String, Column> columns;
98+
private transient volatile Map<String, Column> columns;
9999

100100
final List<Column> columnList;
101101

@@ -118,26 +118,31 @@ public Optional<Column> findColumn(String name) {
118118
}
119119

120120
String snake = QueryHelperUtils.toSnake(name);
121-
122-
for (Column col : columnList) {
123-
if (Objects.equals(col.name, name)
124-
|| Objects.equals(col.name, snake)
125-
|| Objects.equals(QueryHelperUtils.toSnake(col.alias), snake)
126-
|| Objects.equals(col.getFullName(), snake)) {
127-
return Optional.of(col);
128-
}
121+
column = columnMap.get(snake);
122+
if (column != null) {
123+
return Optional.of(column);
129124
}
130125

131126
return Optional.empty();
132127

133128
}
134129

130+
@Deprecated
135131
public Map<String, Column> getColumns() {
136-
return columns == null
137-
? columns = columnList
138-
.stream()
139-
.collect(Collectors.toMap(Column::getAlias, Function.identity(), (a, b) -> b))
140-
: columns;
132+
if (columns == null) {
133+
synchronized (this) {
134+
if (columns == null) {
135+
columns = new HashMap<>();
136+
for (Column column : columnList) {
137+
columns.put(column.name, column);
138+
columns.put(column.alias, column);
139+
columns.put(column.getFullName(), column);
140+
columns.put(QueryHelperUtils.toSnake(column.alias), column);
141+
}
142+
}
143+
}
144+
}
145+
return columns;
141146
}
142147
}
143148

hsweb-commons/hsweb-commons-crud/src/main/java/org/hswebframework/web/crud/query/QueryAnalyzerImpl.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ public boolean columnIsExpression(String name, int index) {
9595
return select.getColumnList().get(index) instanceof ExpressionColumn;
9696
}
9797

98-
return select.getColumns().get(name) instanceof ExpressionColumn;
98+
return select.findColumn(name).orElse(null) instanceof ExpressionColumn;
9999
}
100100

101101
private Map<String, Column> getColumnMappings() {
@@ -168,12 +168,8 @@ private Map<String, Column> getColumnMappings() {
168168
}
169169

170170
private Column getColumnOrSelectColumn(String name) {
171-
Column column = select.getColumns().get(name);
171+
Column column = select.findColumn(name).orElse(null);
172172

173-
if (column != null) {
174-
return column;
175-
}
176-
column = select.getColumns().get(QueryHelperUtils.toSnake(name));
177173
if (column != null) {
178174
return column;
179175
}

0 commit comments

Comments
 (0)