Skip to content

Commit 3151211

Browse files
author
veasion
committed
fix bug & 优化
1 parent 139ac3b commit 3151211

File tree

10 files changed

+45
-55
lines changed

10 files changed

+45
-55
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ veasion-db 是一个轻量级持久层ORM框架,除slf4j-api外不依赖任何
1212
<dependency>
1313
<groupId>cn.veasion</groupId>
1414
<artifactId>veasion-db</artifactId>
15-
<version>1.1.9</version>
15+
<version>1.2.0</version>
1616
</dependency>
1717
```
1818
支持sql解析生成veasion-db代码

pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
<groupId>cn.veasion</groupId>
99
<artifactId>veasion-db</artifactId>
10-
<version>1.1.9</version>
10+
<version>1.2.0</version>
1111

1212
<name>veasion-db</name>
1313
<url>https://github.com/veasion/veasion-db</url>

src/main/java/cn/veasion/db/jdbc/DeleteSQL.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import cn.veasion.db.update.Delete;
44

5-
import java.util.HashMap;
5+
import java.util.Collections;
66

77
/**
88
* DeleteSQL
@@ -26,9 +26,7 @@ public static DeleteSQL build(Delete delete) {
2626
public DeleteSQL build() {
2727
this.reset();
2828
sql.append("DELETE FROM ").append(getTableName(delete.getEntityClass(), delete, delete)).append(" WHERE");
29-
appendFilter(new HashMap<String, Class<?>>() {{
30-
put(null, delete.getEntityClass());
31-
}}, delete.getFilters());
29+
appendFilter(Collections.singletonMap(null, delete.getEntityClass()), delete.getFilters());
3230
return this;
3331
}
3432

src/main/java/cn/veasion/db/jdbc/JdbcEntityDao.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,7 +96,7 @@ public ID[] batchAdd(BatchEntityInsert batchEntityInsert) {
9696
if (idField == null) {
9797
return null;
9898
}
99-
ID[] ids = (ID[]) Array.newInstance(idField.getType(), objects.length > 0 ? objects.length : entityList.size());
99+
ID[] ids = (ID[]) Array.newInstance(idField.getType(), objects.length > 0 ? objects.length : (entityList == null ? 0 : entityList.size()));
100100
if (objects.length > 0) {
101101
for (int i = 0; i < objects.length; i++) {
102102
ID id = (ID) TypeUtils.convert(objects[i], idField.getType());
@@ -105,7 +105,7 @@ public ID[] batchAdd(BatchEntityInsert batchEntityInsert) {
105105
((IBaseId<ID>) entityList.get(i)).setId(id);
106106
}
107107
}
108-
} else {
108+
} else if (entityList != null) {
109109
for (int i = 0; i < entityList.size(); i++) {
110110
if (entityList.get(i) instanceof IBaseId) {
111111
Array.set(ids, i, ((IBaseId<ID>) entityList.get(i)).getId());

src/main/java/cn/veasion/db/jdbc/QuerySQL.java

Lines changed: 6 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ private void buildQuery() {
8585
sql.append(" ").append(tableAs);
8686
}
8787
// join
88-
appendJoins();
88+
appendJoins(entityClassMap);
8989
sql.append(" WHERE");
9090
// filter & join filter
9191
appendFilters(entityClassMap);
@@ -144,26 +144,18 @@ private void appendSelects(Map<String, Class<?>> entityClassMap, boolean isExpre
144144
appendSelects(entityClassMap, query.getSelectExpression());
145145
if (joins == null || joins.isEmpty()) return;
146146
for (JoinQueryParam join : joins) {
147-
AbstractJoinQuery<?> mainQuery = join.getMainQuery();
148147
AbstractJoinQuery<?> joinQuery = join.getJoinQuery();
149148
if (joinQuery.getSelectExpression() != null) {
150-
appendSelects(new HashMap<String, Class<?>>() {{
151-
put(mainQuery.getTableAs(), mainQuery.getEntityClass());
152-
put(joinQuery.getTableAs(), joinQuery.getEntityClass());
153-
}}, joinQuery.getSelectExpression());
149+
appendSelects(entityClassMap, joinQuery.getSelectExpression());
154150
}
155151
}
156152
} else {
157153
appendSelects(entityClassMap, query.getSelects(), query.getAliasMap());
158154
if (joins == null || joins.isEmpty()) return;
159155
for (JoinQueryParam join : joins) {
160-
AbstractJoinQuery<?> mainQuery = join.getMainQuery();
161156
AbstractJoinQuery<?> joinQuery = join.getJoinQuery();
162157
if (!joinQuery.getSelects().isEmpty()) {
163-
appendSelects(new HashMap<String, Class<?>>() {{
164-
put(mainQuery.getTableAs(), mainQuery.getEntityClass());
165-
put(joinQuery.getTableAs(), joinQuery.getEntityClass());
166-
}}, joinQuery.getSelects(), joinQuery.getAliasMap());
158+
appendSelects(entityClassMap, joinQuery.getSelects(), joinQuery.getAliasMap());
167159
}
168160
}
169161
}
@@ -227,10 +219,9 @@ private void appendSelects(Map<String, Class<?>> entityClassMap, List<String> se
227219
sql.append(securityCheck(sb.toString()));
228220
}
229221

230-
private void appendJoins() {
222+
private void appendJoins(Map<String, Class<?>> entityClassMap) {
231223
if (joins == null || joins.isEmpty()) return;
232224
for (JoinQueryParam join : joins) {
233-
AbstractJoinQuery<?> mainQuery = join.getMainQuery();
234225
AbstractJoinQuery<?> joinQuery = join.getJoinQuery();
235226
sql.append(" ").append(join.getJoinType().getJoin());
236227
if (joinQuery instanceof SubQuery) {
@@ -246,10 +237,7 @@ private void appendJoins() {
246237
List<Filter> filters = join.getOnFilters();
247238
if (filters != null && filters.size() > 0) {
248239
sql.append(" ON");
249-
appendFilter(new HashMap<String, Class<?>>() {{
250-
put(mainQuery.getTableAs(), mainQuery.getEntityClass());
251-
put(joinQuery.getTableAs(), joinQuery.getEntityClass());
252-
}}, filters);
240+
appendFilter(entityClassMap, filters);
253241
}
254242
}
255243
}
@@ -258,16 +246,12 @@ private void appendFilters(Map<String, Class<?>> entityClassMap) {
258246
appendFilter(entityClassMap, query.getFilters());
259247
if (joins == null || joins.isEmpty()) return;
260248
for (JoinQueryParam join : joins) {
261-
AbstractJoinQuery<?> mainQuery = join.getMainQuery();
262249
AbstractJoinQuery<?> joinQuery = join.getJoinQuery();
263250
if (joinQuery.hasFilters()) {
264251
if (!endsWith(" WHERE")) {
265252
sql.append(" AND");
266253
}
267-
appendFilter(new HashMap<String, Class<?>>() {{
268-
put(mainQuery.getTableAs(), mainQuery.getEntityClass());
269-
put(joinQuery.getTableAs(), joinQuery.getEntityClass());
270-
}}, joinQuery.getFilters());
254+
appendFilter(entityClassMap, joinQuery.getFilters());
271255
}
272256
}
273257
}

src/main/java/cn/veasion/db/jdbc/UpdateSQL.java

Lines changed: 5 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ public void buildUpdate() {
6565
entityClassMap.put(null, update.getEntityClass());
6666
}
6767
// join on
68-
appendJoinOn();
68+
appendJoinOn(entityClassMap);
6969
// set
7070
sql.append(" SET");
7171
// update
@@ -76,10 +76,9 @@ public void buildUpdate() {
7676
trimEndSql("WHERE");
7777
}
7878

79-
private void appendJoinOn() {
79+
private void appendJoinOn(Map<String, Class<?>> entityClassMap) {
8080
if (joins == null || joins.isEmpty()) return;
8181
for (JoinUpdateParam join : joins) {
82-
EntityUpdate mainUpdate = join.getMainUpdate();
8382
EntityUpdate joinUpdate = join.getJoinUpdate();
8483
sql.append(" ").append(join.getJoinType().getJoin());
8584
sql.append(" ").append(getTableName(joinUpdate.getEntityClass(), joinUpdate, join));
@@ -89,10 +88,7 @@ private void appendJoinOn() {
8988
List<Filter> onFilters = join.getOnFilters();
9089
if (onFilters != null && onFilters.size() > 0) {
9190
sql.append(" ON");
92-
appendFilter(new HashMap<String, Class<?>>() {{
93-
put(mainUpdate.getTableAs(), mainUpdate.getEntityClass());
94-
put(joinUpdate.getTableAs(), joinUpdate.getEntityClass());
95-
}}, onFilters);
91+
appendFilter(entityClassMap, onFilters);
9692
}
9793
}
9894
}
@@ -101,14 +97,10 @@ private void appendUpdateAll(Map<String, Class<?>> entityClassMap) {
10197
appendUpdates(entityClassMap, update.getUpdates());
10298
if (joins == null || joins.isEmpty()) return;
10399
for (JoinUpdateParam join : joins) {
104-
EntityUpdate mainUpdate = join.getMainUpdate();
105100
EntityUpdate joinUpdate = join.getJoinUpdate();
106101
if (joinUpdate.getUpdates() != null) {
107102
sql.append(",");
108-
appendUpdates(new HashMap<String, Class<?>>() {{
109-
put(mainUpdate.getTableAs(), mainUpdate.getEntityClass());
110-
put(joinUpdate.getTableAs(), joinUpdate.getEntityClass());
111-
}}, joinUpdate.getUpdates());
103+
appendUpdates(entityClassMap, joinUpdate.getUpdates());
112104
}
113105
}
114106
}
@@ -135,16 +127,12 @@ private void appendFilters(Map<String, Class<?>> entityClassMap) {
135127
appendFilter(entityClassMap, update.getFilters());
136128
if (joins == null || joins.isEmpty()) return;
137129
for (JoinUpdateParam join : joins) {
138-
EntityUpdate mainUpdate = join.getMainUpdate();
139130
EntityUpdate joinUpdate = join.getJoinUpdate();
140131
if (joinUpdate.hasFilters()) {
141132
if (!endsWith(" WHERE")) {
142133
sql.append(" AND");
143134
}
144-
appendFilter(new HashMap<String, Class<?>>() {{
145-
put(mainUpdate.getTableAs(), mainUpdate.getEntityClass());
146-
put(joinUpdate.getTableAs(), joinUpdate.getEntityClass());
147-
}}, joinUpdate.getFilters());
135+
appendFilter(entityClassMap, joinUpdate.getFilters());
148136
}
149137
}
150138
}

src/main/java/cn/veasion/db/query/AbstractQuery.java

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package cn.veasion.db.query;
22

33
import cn.veasion.db.AbstractFilter;
4+
import cn.veasion.db.DbException;
45
import cn.veasion.db.base.Expression;
56
import cn.veasion.db.base.Filter;
67
import cn.veasion.db.jdbc.QuerySQL;
@@ -26,6 +27,7 @@ public abstract class AbstractQuery<T extends AbstractQuery<?>> extends Abstract
2627

2728
private boolean distinct;
2829
protected boolean selectAll;
30+
private boolean asterisk = true;
2931
protected List<String> selects = new ArrayList<>();
3032
protected Map<String, String> aliasMap = new HashMap<>();
3133
private Set<String> excludeSelects;
@@ -47,6 +49,12 @@ public T selectAll() {
4749
return getSelf();
4850
}
4951

52+
public T selectAllWithNoAsterisk() {
53+
this.selectAll = true;
54+
this.asterisk = false;
55+
return getSelf();
56+
}
57+
5058
public T select(String field) {
5159
return select(field, null);
5260
}
@@ -156,19 +164,21 @@ public T unionAll(AbstractQuery<T> unionQuery) {
156164

157165
public T page(PageParam pageParam) {
158166
this.pageParam = pageParam;
167+
if (pageParam != null && (pageParam.getPage() <= 0 || pageParam.getSize() <= 0)) {
168+
throw new DbException("分页参数page、size必须大于0");
169+
}
159170
return getSelf();
160171
}
161172

162173
public T page(int page, int size) {
163174
PageParam pageParam = ServiceLoaderUtils.pageParam();
164175
if (pageParam != null) {
165-
this.pageParam = pageParam;
166-
this.pageParam.setPage(page);
167-
this.pageParam.setSize(size);
176+
pageParam.setPage(page);
177+
pageParam.setSize(size);
168178
} else {
169-
this.pageParam = new MysqlPage(page, size);
179+
pageParam = new MysqlPage(page, size);
170180
}
171-
return getSelf();
181+
return this.page(pageParam);
172182
}
173183

174184
protected abstract String handleField(String field);
@@ -225,10 +235,13 @@ public PageParam getPageParam() {
225235
@Override
226236
public void check(Class<?> mainEntityClass) {
227237
if (selectAll && !checked) {
228-
Map<String, String> fieldColumns = FieldUtils.entityFieldColumns(getEntityClass() != null ? getEntityClass() : mainEntityClass);
229238
if (excludeSelects != null && excludeSelects.size() > 0) {
239+
Map<String, String> fieldColumns = FieldUtils.entityFieldColumns(getEntityClass() != null ? getEntityClass() : mainEntityClass);
230240
fieldColumns.keySet().stream().map(this::handleField).filter(k -> !excludeSelects.contains(k)).forEach(this::select);
241+
} else if (asterisk) {
242+
this.select(this.handleField("*"));
231243
} else {
244+
Map<String, String> fieldColumns = FieldUtils.entityFieldColumns(getEntityClass() != null ? getEntityClass() : mainEntityClass);
232245
fieldColumns.keySet().stream().map(this::handleField).forEach(this::select);
233246
}
234247
}

src/main/java/cn/veasion/db/update/BatchEntityInsert.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ public <T> BatchEntityInsert(List<T> entityList, String... skipFields) {
4343

4444
public BatchEntityInsert(AbstractQuery<?> insertSelectQuery) {
4545
this.insertSelectQuery = Objects.requireNonNull(insertSelectQuery);
46+
if (this.insertSelectQuery.isSelectAll()) {
47+
this.insertSelectQuery.selectAllWithNoAsterisk();
48+
}
4649
}
4750

4851
public BatchEntityInsert setUseGeneratedKeys(boolean useGeneratedKeys) {

src/test/java/cn/veasion/db/query/JoinQueryTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@
1212
import cn.veasion.db.model.vo.StudentVO;
1313

1414
/**
15-
* JoinQueryTest (join优化:建议用小表关联大表,最大join数不超过3)
15+
* JoinQueryTest (join优化:mysql建议用小表关联大表(clickhouse相反),最大join数不超过3)
1616
*
1717
* @author luozhuowei
1818
* @date 2021/12/12

src/test/java/cn/veasion/db/query/SimpleQueryTest.java

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,14 @@
1515
public class SimpleQueryTest extends BaseTest {
1616

1717
public static void main(String[] args) {
18-
// 查询全部学生
18+
// 查询全部学生(*)
1919
// select * from t_student
2020
println(studentDao.queryList(new Q()));
2121

22+
// 查询全部学生(全部字段)
23+
// select id, sno, name, class_id, sex, age, `desc`, version, is_deleted, create_time, update_time from t_student
24+
println(studentDao.queryList(new Q().selectAllWithNoAsterisk()));
25+
2226
// 根据id查询学生
2327
// select * from t_student where id = 1
2428
println(studentDao.getById(1L));

0 commit comments

Comments
 (0)