1
mirror of https://github.com/CarmJos/EasySQL.git synced 2026-06-04 15:28:20 +08:00

[v0.2.6] 版本更新

- [U] 优化 ConditionalBuilder 的使用方式。
- [A] 为 TableQueryBuilder 添加分表查询limit方法。
This commit is contained in:
2022-01-07 23:01:44 +08:00
parent 50b36d8430
commit 5601d1288c
10 changed files with 86 additions and 39 deletions
@@ -13,7 +13,8 @@ import java.util.Date;
import java.util.Iterator;
import java.util.LinkedHashMap;
public abstract class AbstractConditionalBuilder<T> extends AbstractSQLBuilder implements ConditionalBuilder<T> {
public abstract class AbstractConditionalBuilder<B extends ConditionalBuilder<B, T>, T>
extends AbstractSQLBuilder implements ConditionalBuilder<B, T> {
ArrayList<String> conditionSQLs = new ArrayList<>();
ArrayList<Object> conditionParams = new ArrayList<>();
@@ -23,39 +24,41 @@ public abstract class AbstractConditionalBuilder<T> extends AbstractSQLBuilder i
super(manager);
}
protected abstract B getThis();
@Override
public AbstractConditionalBuilder<T> setConditions(@Nullable String condition) {
public B setConditions(@Nullable String condition) {
this.conditionSQLs = new ArrayList<>();
this.conditionParams = new ArrayList<>();
if (condition != null) this.conditionSQLs.add(condition);
return this;
return getThis();
}
@Override
public AbstractConditionalBuilder<T> setConditions(
public B setConditions(
LinkedHashMap<@NotNull String, @Nullable Object> conditions
) {
conditions.forEach(this::addCondition);
return this;
return getThis();
}
@Override
public AbstractConditionalBuilder<T> addCondition(@Nullable String condition) {
public B addCondition(@Nullable String condition) {
this.conditionSQLs.add(condition);
return this;
return getThis();
}
@Override
public AbstractConditionalBuilder<T> addCondition(
public B addCondition(
@NotNull String queryName, @NotNull String operator, @Nullable Object queryValue
) {
addCondition("`" + queryName + "` " + operator + " ?");
this.conditionParams.add(queryValue);
return this;
return getThis();
}
@Override
public AbstractConditionalBuilder<T> addCondition(
public B addCondition(
@NotNull String[] queryNames, @Nullable Object[] queryValues
) {
if (queryNames.length != queryValues.length) {
@@ -64,21 +67,21 @@ public abstract class AbstractConditionalBuilder<T> extends AbstractSQLBuilder i
for (int i = 0; i < queryNames.length; i++) {
addCondition(queryNames[i], queryValues[i]);
}
return this;
return getThis();
}
@Override
public AbstractConditionalBuilder<T> addNotNullCondition(@NotNull String queryName) {
public B addNotNullCondition(@NotNull String queryName) {
return addCondition("`" + queryName + "` IS NOT NULL");
}
@Override
public AbstractConditionalBuilder<T> addTimeCondition(
public B addTimeCondition(
@NotNull String queryName, @Nullable Date startDate, @Nullable Date endDate
) {
if (startDate == null && endDate == null) return this; // 都不限定时间,不用判断了
if (startDate == null && endDate == null) return getThis(); // 都不限定时间,不用判断了
if (startDate != null) {
addCondition("`" + queryName + "` BETWEEN ? AND ?");
this.conditionParams.add(startDate);
@@ -96,14 +99,14 @@ public abstract class AbstractConditionalBuilder<T> extends AbstractSQLBuilder i
} else {
addCondition(queryName, "<=", endDate);
}
return this;
return getThis();
}
@Override
public AbstractConditionalBuilder<T> setLimit(int limit) {
public B setLimit(int limit) {
this.limit = limit;
return this;
return getThis();
}
protected String buildConditionSQL() {
@@ -7,7 +7,7 @@ import cc.carm.lib.easysql.manager.SQLManagerImpl;
import org.jetbrains.annotations.NotNull;
public class DeleteBuilderImpl
extends AbstractConditionalBuilder<PreparedSQLUpdateAction>
extends AbstractConditionalBuilder<DeleteBuilder, PreparedSQLUpdateAction>
implements DeleteBuilder {
String tableName;
@@ -39,4 +39,9 @@ public class DeleteBuilderImpl
}
@Override
protected DeleteBuilderImpl getThis() {
return this;
}
}
@@ -7,10 +7,8 @@ import cc.carm.lib.easysql.manager.SQLManagerImpl;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.util.ArrayList;
public class TableQueryBuilderImpl
extends AbstractConditionalBuilder<PreparedQueryAction>
extends AbstractConditionalBuilder<TableQueryBuilder, PreparedQueryAction>
implements TableQueryBuilder {
@NotNull String tableName;
@@ -19,6 +17,8 @@ public class TableQueryBuilderImpl
@Nullable String orderBy;
int[] pageLimit;
public TableQueryBuilderImpl(@NotNull SQLManagerImpl manager, @NotNull String tableName) {
super(manager);
this.tableName = tableName;
@@ -44,7 +44,13 @@ public class TableQueryBuilderImpl
sqlBuilder.append("`").append(tableName).append("`");
if (hasConditions()) sqlBuilder.append(" ").append(buildConditionSQL());
if (limit > 0) sqlBuilder.append(" ").append(buildLimitSQL());
if (pageLimit != null && pageLimit.length == 2) {
sqlBuilder.append(" LIMIT ").append(pageLimit[0]).append(",").append(pageLimit[1]);
} else if (limit > 0) {
sqlBuilder.append(" ").append(buildLimitSQL());
}
if (orderBy != null) sqlBuilder.append(orderBy);
return new PreparedQueryActionImpl(getManager(), sqlBuilder.toString())
@@ -68,4 +74,14 @@ public class TableQueryBuilderImpl
return this;
}
@Override
public TableQueryBuilder setPageLimit(int start, int end) {
this.pageLimit = new int[]{start, end};
return this;
}
@Override
protected TableQueryBuilderImpl getThis() {
return this;
}
}
@@ -9,7 +9,7 @@ import org.jetbrains.annotations.NotNull;
import java.util.*;
public class UpdateBuilderImpl
extends AbstractConditionalBuilder<PreparedSQLUpdateAction>
extends AbstractConditionalBuilder<UpdateBuilder, PreparedSQLUpdateAction>
implements UpdateBuilder {
String tableName;
@@ -73,4 +73,8 @@ public class UpdateBuilderImpl
}
@Override
protected UpdateBuilder getThis() {
return this;
}
}