diff --git a/easysql-api/pom.xml b/easysql-api/pom.xml index 258ff05..363a01d 100644 --- a/easysql-api/pom.xml +++ b/easysql-api/pom.xml @@ -5,7 +5,7 @@ cc.carm.lib easysql-parent - 0.3.6 + 0.3.7 4.0.0 diff --git a/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/ConditionalBuilder.java b/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/ConditionalBuilder.java index 85bbee1..ee05cae 100644 --- a/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/ConditionalBuilder.java +++ b/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/ConditionalBuilder.java @@ -10,45 +10,75 @@ import java.util.LinkedHashMap; public interface ConditionalBuilder, T extends SQLAction> extends SQLBuilder { - /** - * 将现有条件构建完整的SQL语句用于执行。 - * - * @return {@link cc.carm.lib.easysql.api.SQLAction} - */ - T build(); + /** + * 将现有条件构建完整的SQL语句用于执行。 + * + * @return {@link SQLAction} + */ + T build(); - /** - * 设定取出的条数 - * - * @param limit 条数限制 - * @return {@link B} - */ - B setLimit(int limit); + /** + * 设定限定的条目数 + * + * @param limit 条数限制 + * @return {@link B} + */ + B setLimit(int limit); - B setConditions(@Nullable String condition); + /** + * 直接设定条件的源文本,不需要以WHERE开头。 + *
如 {@code id = 1 AND name = 'test' OR name = 'test2'} 。 + * + * @param condition 条件文本,不需要以WHERE开头。 + * @return {@link B} + */ + B setConditions(@Nullable String condition); - B setConditions(LinkedHashMap<@NotNull String, @Nullable Object> conditionSQLs); + /** + * 直接设定每个条件的文本与其对应数值,将以AND链接,且不需要以WHERE开头。 + *
条件如 {@code id = ? },问号将被以对应的数值填充。。 + * + * @param conditionSQLs 条件内容,将以AND链接,且不需要以WHERE开头。 + * @return {@link B} + */ + B setConditions(LinkedHashMap<@NotNull String, @Nullable Object> conditionSQLs); - B addCondition(@Nullable String condition); + B addCondition(@Nullable String condition); - B addCondition(@NotNull String queryName, @NotNull String operator, @Nullable Object queryValue); + B addCondition(@NotNull String columnName, @NotNull String operator, @Nullable Object queryValue); - default B addCondition(@NotNull String queryName, @Nullable Object queryValue) { - return addCondition(queryName, "=", queryValue); - } + default B addCondition(@NotNull String columnName, @Nullable Object queryValue) { + return addCondition(columnName, "=", queryValue); + } - B addCondition(@NotNull String[] queryNames, @Nullable Object[] queryValues); + B addCondition(@NotNull String[] columnNames, @Nullable Object[] queryValues); - B addNotNullCondition(@NotNull String queryName); + B addNotNullCondition(@NotNull String columnName); - default B addTimeCondition(@NotNull String queryName, long startMillis, long endMillis) { - return addTimeCondition(queryName, - startMillis > 0 ? new Date(startMillis) : null, - endMillis > 0 ? new Date(endMillis) : null - ); - } + /** + * 添加时间的限定条件。 若设定了开始时间,则限定条件为 {@code endMillis >= startMillis}; + * + * @param columnName 判断的行 + * @param startMillis 开始时间戳,若<0则不作限定 + * @param endMillis 结束时间戳,若<0则不作限定 + * @return {@link B} + */ + default B addTimeCondition(@NotNull String columnName, long startMillis, long endMillis) { + return addTimeCondition(columnName, + startMillis > 0 ? new Date(startMillis) : null, + endMillis > 0 ? new Date(endMillis) : null + ); + } - B addTimeCondition(@NotNull String queryName, @Nullable java.util.Date startDate, @Nullable java.util.Date endDate); + /** + * 添加时间的限定条件。 若设定了开始时间,则限定条件为 {@code endDate >= startTime}; + * + * @param columnName 判断的行 + * @param startDate 开始时间,若为null则不作限定 + * @param endDate 结束时间,若为null则不作限定 + * @return {@link B} + */ + B addTimeCondition(@NotNull String columnName, @Nullable java.util.Date startDate, @Nullable java.util.Date endDate); } diff --git a/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/UpdateBuilder.java b/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/UpdateBuilder.java index 1ea79cf..39d5cfd 100644 --- a/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/UpdateBuilder.java +++ b/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/UpdateBuilder.java @@ -1,20 +1,56 @@ package cc.carm.lib.easysql.api.builder; import cc.carm.lib.easysql.api.SQLAction; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; import java.util.LinkedHashMap; public interface UpdateBuilder extends ConditionalBuilder> { - String getTableName(); + String getTableName(); - UpdateBuilder setColumnValues(LinkedHashMap columnData); + /** + * 添加一条需要更新的字段名与值 + * + * @param columnName 字段名 + * @param columnValue 字段名对应的值 + * @return {@link UpdateBuilder} + * @since 0.3.7 + */ + UpdateBuilder addColumnValue(@NotNull String columnName, @Nullable Object columnValue); - UpdateBuilder setColumnValues(String[] columnNames, Object[] columnValues); + /** + * 设定更新的全部字段值 (此操作会覆盖之前的设定) + *

此操作会覆盖之前的设定 + * + * @param columnData 字段名和值的键值对 + * @return {@link UpdateBuilder} + */ + UpdateBuilder setColumnValues(LinkedHashMap<@NotNull String, @Nullable Object> columnData); - default UpdateBuilder setColumnValues(String columnName, Object columnValue) { - return setColumnValues(new String[]{columnName}, new Object[]{columnValue}); - } + /** + * 设定更新的全部字段值 (此操作会覆盖之前的设定) + *

此操作会覆盖之前的设定 + * + * @param columnNames 字段名 + * @param columnValues 字段名对应的值 + * @return {@link UpdateBuilder} + */ + UpdateBuilder setColumnValues(@NotNull String[] columnNames, @Nullable Object[] columnValues); + + /** + * 设定更新的全部字段值 (此操作会覆盖之前的设定) + *

如需同时更新多条字段,请使用 {@link #setColumnValues(String[], Object[])} 或 {@link #setColumnValues(LinkedHashMap)} + *
也可以使用 {@link #addColumnValue(String, Object)} 一条条的添加字段 + * + * @param columnName 字段名 + * @param columnValue 字段名对应的值 + * @return {@link UpdateBuilder} + */ + default UpdateBuilder setColumnValues(@NotNull String columnName, @Nullable Object columnValue) { + return setColumnValues(new String[]{columnName}, new Object[]{columnValue}); + } } diff --git a/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/UpsertBuilder.java b/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/UpsertBuilder.java index b7a2ed0..7759170 100644 --- a/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/UpsertBuilder.java +++ b/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/UpsertBuilder.java @@ -8,8 +8,10 @@ package cc.carm.lib.easysql.api.builder; @Deprecated public interface UpsertBuilder { - String getTableName(); + String getTableName(); - UpsertBuilder setColumnNames(String[] columnNames, String updateColumn); + default UpsertBuilder setColumnNames(String[] columnNames, String updateColumn) { + throw new UnsupportedOperationException("Please use REPLACE ."); + } } diff --git a/easysql-impl/pom.xml b/easysql-impl/pom.xml index be0576c..2d17f17 100644 --- a/easysql-impl/pom.xml +++ b/easysql-impl/pom.xml @@ -5,7 +5,7 @@ easysql-parent cc.carm.lib - 0.3.6 + 0.3.7 4.0.0 diff --git a/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/impl/AbstractConditionalBuilder.java b/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/impl/AbstractConditionalBuilder.java index c96fd45..ca69018 100644 --- a/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/impl/AbstractConditionalBuilder.java +++ b/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/impl/AbstractConditionalBuilder.java @@ -53,40 +53,40 @@ public abstract class AbstractConditionalBuilder iterator = this.columnNames.iterator(); - while (iterator.hasNext()) { - sqlBuilder.append(withBackQuote(iterator.next())).append(" = ?"); - if (iterator.hasNext()) sqlBuilder.append(" , "); - } - List allParams = new ArrayList<>(this.columnValues); + Iterator iterator = this.columnData.keySet().iterator(); + while (iterator.hasNext()) { + sqlBuilder.append(withBackQuote(iterator.next())).append(" = ?"); + if (iterator.hasNext()) sqlBuilder.append(" , "); + } + List allParams = new ArrayList<>(this.columnData.values()); - if (hasConditions()) { - sqlBuilder.append(" ").append(buildConditionSQL()); - allParams.addAll(getConditionParams()); - } + if (hasConditions()) { + sqlBuilder.append(" ").append(buildConditionSQL()); + allParams.addAll(getConditionParams()); + } - if (limit > 0) sqlBuilder.append(" ").append(buildLimitSQL()); + if (limit > 0) sqlBuilder.append(" ").append(buildLimitSQL()); - return new PreparedSQLUpdateActionImpl(getManager(), sqlBuilder.toString(), allParams); - } + return new PreparedSQLUpdateActionImpl(getManager(), sqlBuilder.toString(), allParams); + } - @Override - public String getTableName() { - return tableName; - } + @Override + public String getTableName() { + return tableName; + } - @Override - public UpdateBuilder setColumnValues(LinkedHashMap columnData) { - this.columnNames = new ArrayList<>(); - this.columnValues = new ArrayList<>(); - columnData.forEach((name, value) -> { - this.columnNames.add(name); - this.columnValues.add(value); - }); - return this; - } + @Override + public UpdateBuilder addColumnValue(@NotNull String columnName, Object columnValue) { + this.columnData.put(columnName, columnValue); + return this; + } - @Override - public UpdateBuilder setColumnValues(String[] columnNames, Object[] columnValues) { - if (columnNames.length != columnValues.length) { - throw new RuntimeException("columnNames are not match with columnValues"); - } - this.columnNames = Arrays.asList(columnNames); - this.columnValues = Arrays.asList(columnValues); - return this; - } + @Override + public UpdateBuilder setColumnValues(LinkedHashMap columnData) { + this.columnData = columnData; + return this; + } + + @Override + public UpdateBuilder setColumnValues(@NotNull String[] columnNames, @Nullable Object[] columnValues) { + if (columnNames.length != columnValues.length) { + throw new RuntimeException("columnNames are not match with columnValues"); + } + LinkedHashMap columnData = new LinkedHashMap<>(); + for (int i = 0; i < columnNames.length; i++) { + columnData.put(columnNames[i], columnValues[i]); + } + return setColumnValues(columnData); + } - @Override - protected UpdateBuilder getThis() { - return this; - } + @Override + protected UpdateBuilder getThis() { + return this; + } } diff --git a/example/easysql-demo/pom.xml b/example/easysql-demo/pom.xml index a36abd3..fac2c77 100644 --- a/example/easysql-demo/pom.xml +++ b/example/easysql-demo/pom.xml @@ -5,7 +5,7 @@ easysql-parent cc.carm.lib - 0.3.6 + 0.3.7 ../../pom.xml 4.0.0 diff --git a/example/easysql-test/pom.xml b/example/easysql-test/pom.xml index 785db2a..049a35d 100644 --- a/example/easysql-test/pom.xml +++ b/example/easysql-test/pom.xml @@ -5,7 +5,7 @@ easysql-parent cc.carm.lib - 0.3.6 + 0.3.7 ../../pom.xml 4.0.0 diff --git a/pom.xml b/pom.xml index 6291015..92b42e4 100644 --- a/pom.xml +++ b/pom.xml @@ -17,7 +17,7 @@ cc.carm.lib easysql-parent pom - 0.3.6 + 0.3.7 easysql-api diff --git a/with-pool/easysql-beecp/pom.xml b/with-pool/easysql-beecp/pom.xml index 56e6502..5584949 100644 --- a/with-pool/easysql-beecp/pom.xml +++ b/with-pool/easysql-beecp/pom.xml @@ -5,7 +5,7 @@ easysql-parent cc.carm.lib - 0.3.6 + 0.3.7 ../../pom.xml 4.0.0 diff --git a/with-pool/easysql-hikaricp/pom.xml b/with-pool/easysql-hikaricp/pom.xml index f82c84e..dae57e7 100644 --- a/with-pool/easysql-hikaricp/pom.xml +++ b/with-pool/easysql-hikaricp/pom.xml @@ -5,7 +5,7 @@ easysql-parent cc.carm.lib - 0.3.6 + 0.3.7 ../../pom.xml 4.0.0