Skip to content

Commit

Permalink
fix bug & 优化
Browse files Browse the repository at this point in the history
  • Loading branch information
veasion committed Oct 28, 2022
1 parent 139ac3b commit 3151211
Show file tree
Hide file tree
Showing 10 changed files with 45 additions and 55 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ veasion-db 是一个轻量级持久层ORM框架,除slf4j-api外不依赖任何
<dependency>
<groupId>cn.veasion</groupId>
<artifactId>veasion-db</artifactId>
<version>1.1.9</version>
<version>1.2.0</version>
</dependency>
```
支持sql解析生成veasion-db代码
Expand Down
2 changes: 1 addition & 1 deletion pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

<groupId>cn.veasion</groupId>
<artifactId>veasion-db</artifactId>
<version>1.1.9</version>
<version>1.2.0</version>

<name>veasion-db</name>
<url>https://github.com/veasion/veasion-db</url>
Expand Down
6 changes: 2 additions & 4 deletions src/main/java/cn/veasion/db/jdbc/DeleteSQL.java
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import cn.veasion.db.update.Delete;

import java.util.HashMap;
import java.util.Collections;

/**
* DeleteSQL
Expand All @@ -26,9 +26,7 @@ public static DeleteSQL build(Delete delete) {
public DeleteSQL build() {
this.reset();
sql.append("DELETE FROM ").append(getTableName(delete.getEntityClass(), delete, delete)).append(" WHERE");
appendFilter(new HashMap<String, Class<?>>() {{
put(null, delete.getEntityClass());
}}, delete.getFilters());
appendFilter(Collections.singletonMap(null, delete.getEntityClass()), delete.getFilters());
return this;
}

Expand Down
4 changes: 2 additions & 2 deletions src/main/java/cn/veasion/db/jdbc/JdbcEntityDao.java
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ public ID[] batchAdd(BatchEntityInsert batchEntityInsert) {
if (idField == null) {
return null;
}
ID[] ids = (ID[]) Array.newInstance(idField.getType(), objects.length > 0 ? objects.length : entityList.size());
ID[] ids = (ID[]) Array.newInstance(idField.getType(), objects.length > 0 ? objects.length : (entityList == null ? 0 : entityList.size()));
if (objects.length > 0) {
for (int i = 0; i < objects.length; i++) {
ID id = (ID) TypeUtils.convert(objects[i], idField.getType());
Expand All @@ -105,7 +105,7 @@ public ID[] batchAdd(BatchEntityInsert batchEntityInsert) {
((IBaseId<ID>) entityList.get(i)).setId(id);
}
}
} else {
} else if (entityList != null) {
for (int i = 0; i < entityList.size(); i++) {
if (entityList.get(i) instanceof IBaseId) {
Array.set(ids, i, ((IBaseId<ID>) entityList.get(i)).getId());
Expand Down
28 changes: 6 additions & 22 deletions src/main/java/cn/veasion/db/jdbc/QuerySQL.java
Original file line number Diff line number Diff line change
Expand Up @@ -85,7 +85,7 @@ private void buildQuery() {
sql.append(" ").append(tableAs);
}
// join
appendJoins();
appendJoins(entityClassMap);
sql.append(" WHERE");
// filter & join filter
appendFilters(entityClassMap);
Expand Down Expand Up @@ -144,26 +144,18 @@ private void appendSelects(Map<String, Class<?>> entityClassMap, boolean isExpre
appendSelects(entityClassMap, query.getSelectExpression());
if (joins == null || joins.isEmpty()) return;
for (JoinQueryParam join : joins) {
AbstractJoinQuery<?> mainQuery = join.getMainQuery();
AbstractJoinQuery<?> joinQuery = join.getJoinQuery();
if (joinQuery.getSelectExpression() != null) {
appendSelects(new HashMap<String, Class<?>>() {{
put(mainQuery.getTableAs(), mainQuery.getEntityClass());
put(joinQuery.getTableAs(), joinQuery.getEntityClass());
}}, joinQuery.getSelectExpression());
appendSelects(entityClassMap, joinQuery.getSelectExpression());
}
}
} else {
appendSelects(entityClassMap, query.getSelects(), query.getAliasMap());
if (joins == null || joins.isEmpty()) return;
for (JoinQueryParam join : joins) {
AbstractJoinQuery<?> mainQuery = join.getMainQuery();
AbstractJoinQuery<?> joinQuery = join.getJoinQuery();
if (!joinQuery.getSelects().isEmpty()) {
appendSelects(new HashMap<String, Class<?>>() {{
put(mainQuery.getTableAs(), mainQuery.getEntityClass());
put(joinQuery.getTableAs(), joinQuery.getEntityClass());
}}, joinQuery.getSelects(), joinQuery.getAliasMap());
appendSelects(entityClassMap, joinQuery.getSelects(), joinQuery.getAliasMap());
}
}
}
Expand Down Expand Up @@ -227,10 +219,9 @@ private void appendSelects(Map<String, Class<?>> entityClassMap, List<String> se
sql.append(securityCheck(sb.toString()));
}

private void appendJoins() {
private void appendJoins(Map<String, Class<?>> entityClassMap) {
if (joins == null || joins.isEmpty()) return;
for (JoinQueryParam join : joins) {
AbstractJoinQuery<?> mainQuery = join.getMainQuery();
AbstractJoinQuery<?> joinQuery = join.getJoinQuery();
sql.append(" ").append(join.getJoinType().getJoin());
if (joinQuery instanceof SubQuery) {
Expand All @@ -246,10 +237,7 @@ private void appendJoins() {
List<Filter> filters = join.getOnFilters();
if (filters != null && filters.size() > 0) {
sql.append(" ON");
appendFilter(new HashMap<String, Class<?>>() {{
put(mainQuery.getTableAs(), mainQuery.getEntityClass());
put(joinQuery.getTableAs(), joinQuery.getEntityClass());
}}, filters);
appendFilter(entityClassMap, filters);
}
}
}
Expand All @@ -258,16 +246,12 @@ private void appendFilters(Map<String, Class<?>> entityClassMap) {
appendFilter(entityClassMap, query.getFilters());
if (joins == null || joins.isEmpty()) return;
for (JoinQueryParam join : joins) {
AbstractJoinQuery<?> mainQuery = join.getMainQuery();
AbstractJoinQuery<?> joinQuery = join.getJoinQuery();
if (joinQuery.hasFilters()) {
if (!endsWith(" WHERE")) {
sql.append(" AND");
}
appendFilter(new HashMap<String, Class<?>>() {{
put(mainQuery.getTableAs(), mainQuery.getEntityClass());
put(joinQuery.getTableAs(), joinQuery.getEntityClass());
}}, joinQuery.getFilters());
appendFilter(entityClassMap, joinQuery.getFilters());
}
}
}
Expand Down
22 changes: 5 additions & 17 deletions src/main/java/cn/veasion/db/jdbc/UpdateSQL.java
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ public void buildUpdate() {
entityClassMap.put(null, update.getEntityClass());
}
// join on
appendJoinOn();
appendJoinOn(entityClassMap);
// set
sql.append(" SET");
// update
Expand All @@ -76,10 +76,9 @@ public void buildUpdate() {
trimEndSql("WHERE");
}

private void appendJoinOn() {
private void appendJoinOn(Map<String, Class<?>> entityClassMap) {
if (joins == null || joins.isEmpty()) return;
for (JoinUpdateParam join : joins) {
EntityUpdate mainUpdate = join.getMainUpdate();
EntityUpdate joinUpdate = join.getJoinUpdate();
sql.append(" ").append(join.getJoinType().getJoin());
sql.append(" ").append(getTableName(joinUpdate.getEntityClass(), joinUpdate, join));
Expand All @@ -89,10 +88,7 @@ private void appendJoinOn() {
List<Filter> onFilters = join.getOnFilters();
if (onFilters != null && onFilters.size() > 0) {
sql.append(" ON");
appendFilter(new HashMap<String, Class<?>>() {{
put(mainUpdate.getTableAs(), mainUpdate.getEntityClass());
put(joinUpdate.getTableAs(), joinUpdate.getEntityClass());
}}, onFilters);
appendFilter(entityClassMap, onFilters);
}
}
}
Expand All @@ -101,14 +97,10 @@ private void appendUpdateAll(Map<String, Class<?>> entityClassMap) {
appendUpdates(entityClassMap, update.getUpdates());
if (joins == null || joins.isEmpty()) return;
for (JoinUpdateParam join : joins) {
EntityUpdate mainUpdate = join.getMainUpdate();
EntityUpdate joinUpdate = join.getJoinUpdate();
if (joinUpdate.getUpdates() != null) {
sql.append(",");
appendUpdates(new HashMap<String, Class<?>>() {{
put(mainUpdate.getTableAs(), mainUpdate.getEntityClass());
put(joinUpdate.getTableAs(), joinUpdate.getEntityClass());
}}, joinUpdate.getUpdates());
appendUpdates(entityClassMap, joinUpdate.getUpdates());
}
}
}
Expand All @@ -135,16 +127,12 @@ private void appendFilters(Map<String, Class<?>> entityClassMap) {
appendFilter(entityClassMap, update.getFilters());
if (joins == null || joins.isEmpty()) return;
for (JoinUpdateParam join : joins) {
EntityUpdate mainUpdate = join.getMainUpdate();
EntityUpdate joinUpdate = join.getJoinUpdate();
if (joinUpdate.hasFilters()) {
if (!endsWith(" WHERE")) {
sql.append(" AND");
}
appendFilter(new HashMap<String, Class<?>>() {{
put(mainUpdate.getTableAs(), mainUpdate.getEntityClass());
put(joinUpdate.getTableAs(), joinUpdate.getEntityClass());
}}, joinUpdate.getFilters());
appendFilter(entityClassMap, joinUpdate.getFilters());
}
}
}
Expand Down
25 changes: 19 additions & 6 deletions src/main/java/cn/veasion/db/query/AbstractQuery.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package cn.veasion.db.query;

import cn.veasion.db.AbstractFilter;
import cn.veasion.db.DbException;
import cn.veasion.db.base.Expression;
import cn.veasion.db.base.Filter;
import cn.veasion.db.jdbc.QuerySQL;
Expand All @@ -26,6 +27,7 @@ public abstract class AbstractQuery<T extends AbstractQuery<?>> extends Abstract

private boolean distinct;
protected boolean selectAll;
private boolean asterisk = true;
protected List<String> selects = new ArrayList<>();
protected Map<String, String> aliasMap = new HashMap<>();
private Set<String> excludeSelects;
Expand All @@ -47,6 +49,12 @@ public T selectAll() {
return getSelf();
}

public T selectAllWithNoAsterisk() {
this.selectAll = true;
this.asterisk = false;
return getSelf();
}

public T select(String field) {
return select(field, null);
}
Expand Down Expand Up @@ -156,19 +164,21 @@ public T unionAll(AbstractQuery<T> unionQuery) {

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

public T page(int page, int size) {
PageParam pageParam = ServiceLoaderUtils.pageParam();
if (pageParam != null) {
this.pageParam = pageParam;
this.pageParam.setPage(page);
this.pageParam.setSize(size);
pageParam.setPage(page);
pageParam.setSize(size);
} else {
this.pageParam = new MysqlPage(page, size);
pageParam = new MysqlPage(page, size);
}
return getSelf();
return this.page(pageParam);
}

protected abstract String handleField(String field);
Expand Down Expand Up @@ -225,10 +235,13 @@ public PageParam getPageParam() {
@Override
public void check(Class<?> mainEntityClass) {
if (selectAll && !checked) {
Map<String, String> fieldColumns = FieldUtils.entityFieldColumns(getEntityClass() != null ? getEntityClass() : mainEntityClass);
if (excludeSelects != null && excludeSelects.size() > 0) {
Map<String, String> fieldColumns = FieldUtils.entityFieldColumns(getEntityClass() != null ? getEntityClass() : mainEntityClass);
fieldColumns.keySet().stream().map(this::handleField).filter(k -> !excludeSelects.contains(k)).forEach(this::select);
} else if (asterisk) {
this.select(this.handleField("*"));
} else {
Map<String, String> fieldColumns = FieldUtils.entityFieldColumns(getEntityClass() != null ? getEntityClass() : mainEntityClass);
fieldColumns.keySet().stream().map(this::handleField).forEach(this::select);
}
}
Expand Down
3 changes: 3 additions & 0 deletions src/main/java/cn/veasion/db/update/BatchEntityInsert.java
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,9 @@ public <T> BatchEntityInsert(List<T> entityList, String... skipFields) {

public BatchEntityInsert(AbstractQuery<?> insertSelectQuery) {
this.insertSelectQuery = Objects.requireNonNull(insertSelectQuery);
if (this.insertSelectQuery.isSelectAll()) {
this.insertSelectQuery.selectAllWithNoAsterisk();
}
}

public BatchEntityInsert setUseGeneratedKeys(boolean useGeneratedKeys) {
Expand Down
2 changes: 1 addition & 1 deletion src/test/java/cn/veasion/db/query/JoinQueryTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@
import cn.veasion.db.model.vo.StudentVO;

/**
* JoinQueryTest (join优化:建议用小表关联大表,最大join数不超过3)
* JoinQueryTest (join优化:mysql建议用小表关联大表(clickhouse相反),最大join数不超过3)
*
* @author luozhuowei
* @date 2021/12/12
Expand Down
6 changes: 5 additions & 1 deletion src/test/java/cn/veasion/db/query/SimpleQueryTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,14 @@
public class SimpleQueryTest extends BaseTest {

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

// 查询全部学生(全部字段)
// select id, sno, name, class_id, sex, age, `desc`, version, is_deleted, create_time, update_time from t_student
println(studentDao.queryList(new Q().selectAllWithNoAsterisk()));

// 根据id查询学生
// select * from t_student where id = 1
println(studentDao.getById(1L));
Expand Down

0 comments on commit 3151211

Please sign in to comment.