From d29d06053c1aa0a1674e1244f3c5858acffdc4b1 Mon Sep 17 00:00:00 2001 From: carm Date: Mon, 24 Jan 2022 17:17:47 +0800 Subject: [PATCH] =?UTF-8?q?[v0.2.10]=20[A]=20=E6=B7=BB=E5=8A=A0=E5=90=AB?= =?UTF-8?q?=E9=BB=98=E8=AE=A4=E5=80=BC=E7=9A=84SQL=E6=89=A7=E8=A1=8C?= =?UTF-8?q?=E5=87=BD=E6=95=B0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- easysql-api/pom.xml | 2 +- .../cc/carm/lib/easysql/api/SQLAction.java | 45 ++++++++++++-- .../api/action/SQLUpdateBatchAction.java | 4 ++ .../easysql/api/action/query/QueryAction.java | 15 +++-- .../api/builder/TableAlertBuilder.java | 6 ++ .../lib/easysql/api/function/SQLFunction.java | 2 +- .../impl/DefaultSQLExceptionHandler.java | 24 +++++--- easysql-beecp/pom.xml | 2 +- easysql-demo/pom.xml | 2 +- easysql-demo/src/main/java/EasySQLDemo.java | 1 + easysql-hikaricp/pom.xml | 2 +- easysql-impl/pom.xml | 2 +- .../action/SQLUpdateBatchActionImpl.java | 61 +++++++++---------- pom.xml | 2 +- 14 files changed, 110 insertions(+), 60 deletions(-) create mode 100644 easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/TableAlertBuilder.java diff --git a/easysql-api/pom.xml b/easysql-api/pom.xml index f393f91..4f0cf40 100644 --- a/easysql-api/pom.xml +++ b/easysql-api/pom.xml @@ -5,7 +5,7 @@ cc.carm.lib easysql-parent - 0.2.9 + 0.2.10 4.0.0 diff --git a/easysql-api/src/main/java/cc/carm/lib/easysql/api/SQLAction.java b/easysql-api/src/main/java/cc/carm/lib/easysql/api/SQLAction.java index 4cfec06..259a756 100644 --- a/easysql-api/src/main/java/cc/carm/lib/easysql/api/SQLAction.java +++ b/easysql-api/src/main/java/cc/carm/lib/easysql/api/SQLAction.java @@ -4,11 +4,11 @@ import cc.carm.lib.easysql.api.function.SQLExceptionHandler; import cc.carm.lib.easysql.api.function.SQLFunction; import cc.carm.lib.easysql.api.function.SQLHandler; import cc.carm.lib.easysql.api.function.impl.DefaultSQLExceptionHandler; +import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.sql.SQLException; -import java.util.Optional; import java.util.UUID; /** @@ -22,7 +22,8 @@ import java.util.UUID; *
  • 异步执行 {@link #executeAsync(SQLHandler, SQLExceptionHandler)} *
    异步执行时将提供成功与异常两种处理方式 *
    可自行选择是否对数据或异常进行处理 - *
    默认的异常处理器为 {@link #defaultExceptionHandler()}
  • + *
    默认的异常处理器为 {@link #defaultExceptionHandler()} + *
    若有特殊需要,可通过{@link #setExceptionHandler(SQLExceptionHandler)} 方法修改默认的处理器 * * * @param 需要返回的类型 @@ -97,8 +98,24 @@ public interface SQLAction { @Nullable default R execute(@NotNull SQLFunction function, @Nullable SQLExceptionHandler exceptionHandler) { + return execute(function, null, exceptionHandler); + } + + /** + * 执行语句并处理返回值 + * + * @param function 处理方法 + * @param exceptionHandler 异常处理器 默认为 {@link #defaultExceptionHandler()} + * @param 需要返回的内容 + * @return 指定类型数据 + */ + @Nullable + @Contract("_,!null,_ -> !null") + default R execute(@NotNull SQLFunction function, + @Nullable R defaultResult, + @Nullable SQLExceptionHandler exceptionHandler) { try { - return executeFunction(function); + return executeFunction(function, defaultResult); } catch (SQLException exception) { handleException(exceptionHandler, exception); return null; @@ -115,9 +132,26 @@ public interface SQLAction { */ @Nullable default R executeFunction(@NotNull SQLFunction function) throws SQLException { + return executeFunction(function, null); + } + + /** + * 执行语句并处理返回值 + * + * @param defaultResult 默认结果,若处理后的结果为null,则返回该值 + * @param function 处理方法 + * @param 需要返回的内容 + * @return 指定类型数据 + * @throws SQLException 当SQL操作出现问题时抛出 + */ + @Nullable + @Contract("_,!null -> !null") + default R executeFunction(@NotNull SQLFunction function, + @Nullable R defaultResult) throws SQLException { try { T value = execute(); - return function.apply(value); + R result = function.apply(value); + return result == null ? defaultResult : result; } catch (SQLException exception) { throw new SQLException(exception); } @@ -157,8 +191,7 @@ public interface SQLAction { * @return 默认的异常处理器 */ default SQLExceptionHandler defaultExceptionHandler() { - return Optional.ofNullable(DefaultSQLExceptionHandler.getCustomHandler()) - .orElse(new DefaultSQLExceptionHandler(getManager())); + return DefaultSQLExceptionHandler.get(getManager().getLogger()); } /** diff --git a/easysql-api/src/main/java/cc/carm/lib/easysql/api/action/SQLUpdateBatchAction.java b/easysql-api/src/main/java/cc/carm/lib/easysql/api/action/SQLUpdateBatchAction.java index fe73759..a7e4d75 100644 --- a/easysql-api/src/main/java/cc/carm/lib/easysql/api/action/SQLUpdateBatchAction.java +++ b/easysql-api/src/main/java/cc/carm/lib/easysql/api/action/SQLUpdateBatchAction.java @@ -16,6 +16,10 @@ public interface SQLUpdateBatchAction extends SQLAction> { */ SQLUpdateBatchAction addBatch(@NotNull String sql); + default @NotNull String getSQLContent() { + return getSQLContents().get(0); + } + List getSQLContents(); @Override diff --git a/easysql-api/src/main/java/cc/carm/lib/easysql/api/action/query/QueryAction.java b/easysql-api/src/main/java/cc/carm/lib/easysql/api/action/query/QueryAction.java index 915bf64..f94689e 100644 --- a/easysql-api/src/main/java/cc/carm/lib/easysql/api/action/query/QueryAction.java +++ b/easysql-api/src/main/java/cc/carm/lib/easysql/api/action/query/QueryAction.java @@ -5,6 +5,7 @@ import cc.carm.lib.easysql.api.SQLQuery; import cc.carm.lib.easysql.api.function.SQLExceptionHandler; import cc.carm.lib.easysql.api.function.SQLFunction; import cc.carm.lib.easysql.api.function.SQLHandler; +import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -34,16 +35,20 @@ public interface QueryAction extends SQLAction { /** * 执行语句并处理返回值 * - * @param function 处理方法 - * @param 需要返回的内容 + * @param defaultResult 默认结果,若处理后的结果为null,则返回该值 + * @param function 处理方法 + * @param 需要返回的内容 * @return 指定类型数据 * @throws SQLException 当SQL操作出现问题时抛出 */ @Nullable - default R executeFunction(@NotNull SQLFunction function) - throws SQLException { + @Contract("!null, _ -> !null") + default R executeFunction(@Nullable R defaultResult, + @NotNull SQLFunction function) throws SQLException { + try (SQLQuery value = execute()) { - return function.apply(value); + R result = function.apply(value); + return result == null ? defaultResult : result; } catch (SQLException exception) { throw new SQLException(exception); } diff --git a/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/TableAlertBuilder.java b/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/TableAlertBuilder.java new file mode 100644 index 0000000..53ad2c4 --- /dev/null +++ b/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/TableAlertBuilder.java @@ -0,0 +1,6 @@ +package cc.carm.lib.easysql.api.builder; + +import cc.carm.lib.easysql.api.SQLBuilder; + +public interface TableAlertBuilder extends SQLBuilder { +} diff --git a/easysql-api/src/main/java/cc/carm/lib/easysql/api/function/SQLFunction.java b/easysql-api/src/main/java/cc/carm/lib/easysql/api/function/SQLFunction.java index 66697a7..734a40a 100644 --- a/easysql-api/src/main/java/cc/carm/lib/easysql/api/function/SQLFunction.java +++ b/easysql-api/src/main/java/cc/carm/lib/easysql/api/function/SQLFunction.java @@ -9,6 +9,6 @@ import java.sql.SQLException; public interface SQLFunction { @Nullable - R apply(T t) throws SQLException; + R apply(@NotNull T t) throws SQLException; } diff --git a/easysql-api/src/main/java/cc/carm/lib/easysql/api/function/impl/DefaultSQLExceptionHandler.java b/easysql-api/src/main/java/cc/carm/lib/easysql/api/function/impl/DefaultSQLExceptionHandler.java index 2fad658..307337f 100644 --- a/easysql-api/src/main/java/cc/carm/lib/easysql/api/function/impl/DefaultSQLExceptionHandler.java +++ b/easysql-api/src/main/java/cc/carm/lib/easysql/api/function/impl/DefaultSQLExceptionHandler.java @@ -1,11 +1,12 @@ package cc.carm.lib.easysql.api.function.impl; import cc.carm.lib.easysql.api.SQLAction; -import cc.carm.lib.easysql.api.SQLManager; import cc.carm.lib.easysql.api.function.SQLExceptionHandler; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.sql.SQLException; +import java.util.logging.Logger; public class DefaultSQLExceptionHandler implements SQLExceptionHandler { @@ -19,20 +20,25 @@ public class DefaultSQLExceptionHandler implements SQLExceptionHandler { return customDefaultHandler; } - private final SQLManager sqlManager; - - public DefaultSQLExceptionHandler(SQLManager manager) { - this.sqlManager = manager; + public static @NotNull SQLExceptionHandler get(Logger logger) { + if (getCustomHandler() != null) return getCustomHandler(); + else return new DefaultSQLExceptionHandler(logger); } - protected SQLManager getManager() { - return sqlManager; + private final Logger logger; + + public DefaultSQLExceptionHandler(Logger logger) { + this.logger = logger; + } + + protected Logger getLogger() { + return logger; } @Override public void accept(SQLException exception, SQLAction sqlAction) { - getManager().getLogger().severe("Error when execute [" + sqlAction.getSQLContent() + "]"); - getManager().getLogger().severe(exception.getLocalizedMessage()); + getLogger().severe("Error when execute [" + sqlAction.getSQLContent() + "]"); + getLogger().severe(exception.getLocalizedMessage()); exception.printStackTrace(); } diff --git a/easysql-beecp/pom.xml b/easysql-beecp/pom.xml index ec77cf5..6eacace 100644 --- a/easysql-beecp/pom.xml +++ b/easysql-beecp/pom.xml @@ -5,7 +5,7 @@ easysql-parent cc.carm.lib - 0.2.9 + 0.2.10 4.0.0 diff --git a/easysql-demo/pom.xml b/easysql-demo/pom.xml index aa886cc..72ba230 100644 --- a/easysql-demo/pom.xml +++ b/easysql-demo/pom.xml @@ -5,7 +5,7 @@ easysql-parent cc.carm.lib - 0.2.9 + 0.2.10 4.0.0 diff --git a/easysql-demo/src/main/java/EasySQLDemo.java b/easysql-demo/src/main/java/EasySQLDemo.java index edf1314..c7b506c 100644 --- a/easysql-demo/src/main/java/EasySQLDemo.java +++ b/easysql-demo/src/main/java/EasySQLDemo.java @@ -19,6 +19,7 @@ public class EasySQLDemo { .addColumn("email", "VARCHAR(32)") .addColumn("phone", "VARCHAR(16)") .addColumn("registerTime", "DATETIME NOT NULL") + .addColumn("INDEX `phone`") // 添加索引 .build().execute(null /* 不处理错误 */); } diff --git a/easysql-hikaricp/pom.xml b/easysql-hikaricp/pom.xml index 9b15109..eb07d96 100644 --- a/easysql-hikaricp/pom.xml +++ b/easysql-hikaricp/pom.xml @@ -5,7 +5,7 @@ easysql-parent cc.carm.lib - 0.2.9 + 0.2.10 4.0.0 diff --git a/easysql-impl/pom.xml b/easysql-impl/pom.xml index d8c9ae7..495cb68 100644 --- a/easysql-impl/pom.xml +++ b/easysql-impl/pom.xml @@ -5,7 +5,7 @@ easysql-parent cc.carm.lib - 0.2.9 + 0.2.10 4.0.0 diff --git a/easysql-impl/src/main/java/cc/carm/lib/easysql/action/SQLUpdateBatchActionImpl.java b/easysql-impl/src/main/java/cc/carm/lib/easysql/action/SQLUpdateBatchActionImpl.java index 4fe29d6..3223c76 100644 --- a/easysql-impl/src/main/java/cc/carm/lib/easysql/action/SQLUpdateBatchActionImpl.java +++ b/easysql-impl/src/main/java/cc/carm/lib/easysql/action/SQLUpdateBatchActionImpl.java @@ -16,43 +16,38 @@ public class SQLUpdateBatchActionImpl extends AbstractSQLAction> implements SQLUpdateBatchAction { - List sqlContents = new ArrayList<>(); + List sqlContents = new ArrayList<>(); - public SQLUpdateBatchActionImpl(@NotNull SQLManagerImpl manager, @NotNull String sql) { - super(manager, sql); - this.sqlContents.add(sql); - } + public SQLUpdateBatchActionImpl(@NotNull SQLManagerImpl manager, @NotNull String sql) { + super(manager, sql); + this.sqlContents.add(sql); + } - @Override - public @NotNull String getSQLContent() { - return this.sqlContents.get(0); - } + @Override + public @NotNull List getSQLContents() { + return this.sqlContents; + } - @Override - public @NotNull List getSQLContents() { - return this.sqlContents; - } + @Override + public SQLUpdateBatchAction addBatch(@NotNull String sql) { + this.sqlContents.add(sql); + return this; + } - @Override - public SQLUpdateBatchAction addBatch(@NotNull String sql) { - this.sqlContents.add(sql); - return this; - } + @Override + public @NotNull List execute() throws SQLException { + Connection connection = getManager().getConnection(); + Statement statement = connection.createStatement(); + outputDebugMessage(); + for (String content : this.sqlContents) { + statement.addBatch(content); + } + int[] executed = statement.executeBatch(); + List returnedValues = Arrays.stream(executed).boxed().collect(Collectors.toList()); - @Override - public @NotNull List execute() throws SQLException { - Connection connection = getManager().getConnection(); - Statement statement = connection.createStatement(); - outputDebugMessage(); - for (String content : this.sqlContents) { - statement.addBatch(content); - } - int[] executed = statement.executeBatch(); - List returnedValues = Arrays.stream(executed).boxed().collect(Collectors.toList()); + statement.close(); + connection.close(); - statement.close(); - connection.close(); - - return returnedValues; - } + return returnedValues; + } } diff --git a/pom.xml b/pom.xml index 53fbde3..1414e13 100644 --- a/pom.xml +++ b/pom.xml @@ -16,7 +16,7 @@ cc.carm.lib easysql-parent pom - 0.2.9 + 0.2.10 easysql-api