From 5f13b9319d7d131815d68662dd24e185b94c4be6 Mon Sep 17 00:00:00 2001 From: CarmJos Date: Sat, 8 Jan 2022 00:55:31 +0800 Subject: [PATCH] =?UTF-8?q?[v0.2.6]=20=E7=89=88=E6=9C=AC=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=20-=20[U]=20=E4=BC=98=E5=8C=96=20ConditionalBuilder=20?= =?UTF-8?q?=E7=9A=84=E4=BD=BF=E7=94=A8=E6=96=B9=E5=BC=8F=E3=80=82=20-=20[A?= =?UTF-8?q?]=20=E4=B8=BA=20TableQueryBuilder=20=E6=B7=BB=E5=8A=A0=E5=88=86?= =?UTF-8?q?=E8=A1=A8=E6=9F=A5=E8=AF=A2limit=E6=96=B9=E6=B3=95=E3=80=82=20-?= =?UTF-8?q?=20[A]=20=E6=B7=BB=E5=8A=A0=20SQLFunction=20=E7=B1=BB=EF=BC=8C?= =?UTF-8?q?=E7=94=A8=E4=BA=8E=E5=AF=B9SQL=E7=BB=93=E6=9E=9C=E7=9B=B4?= =?UTF-8?q?=E6=8E=A5=E8=BF=9B=E8=A1=8C=E5=A4=84=E7=90=86=EF=BC=8C=E4=B8=94?= =?UTF-8?q?=E4=B8=8D=E9=9C=80=E8=A6=81=E5=9C=A8=E6=96=B9=E6=B3=95=E5=86=85?= =?UTF-8?q?=E5=A4=84=E7=90=86=E5=BC=82=E5=B8=B8=EF=BC=8C=E4=BA=A4=E7=94=B1?= =?UTF-8?q?=20ExceptionHandler=20=E8=BF=9B=E8=A1=8C=E5=A4=84=E7=90=86?= =?UTF-8?q?=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 | 66 ++++++++++++------- .../easysql/api/action/query/QueryAction.java | 44 +++++++++++++ .../lib/easysql/api/function/SQLFunction.java | 12 ++++ easysql-beecp/pom.xml | 4 +- easysql-demo/pom.xml | 2 +- easysql-demo/src/main/java/EasySQLDemo.java | 9 +-- easysql-hikaricp/pom.xml | 2 +- easysql-impl/pom.xml | 2 +- pom.xml | 2 +- 10 files changed, 108 insertions(+), 37 deletions(-) create mode 100644 easysql-api/src/main/java/cc/carm/lib/easysql/api/function/SQLFunction.java diff --git a/easysql-api/pom.xml b/easysql-api/pom.xml index 2bfb7cf..5e5a5e7 100644 --- a/easysql-api/pom.xml +++ b/easysql-api/pom.xml @@ -5,7 +5,7 @@ cc.carm.lib easysql-parent - 0.2.5 + 0.2.6 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 f764077..63699f3 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 @@ -1,5 +1,6 @@ package cc.carm.lib.easysql.api; +import cc.carm.lib.easysql.api.function.SQLFunction; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -7,13 +8,12 @@ import java.sql.SQLException; import java.util.UUID; import java.util.function.BiConsumer; import java.util.function.Consumer; -import java.util.function.Function; /** * SQLAction 是用于承载SQL语句并进行处理、返回的基本类。 * * * - * 注意: 无论是否异步,都不需要自行关闭ResultSet,本API已自动关闭 - * * @param 需要返回的类型 * @author CarmJos * @since 0.0.1 @@ -74,20 +72,6 @@ public interface SQLAction { */ @NotNull T execute() throws SQLException; - /** - * 执行语句并处理返回值 - * - * @param function 处理方法 - * @param exceptionHandler 异常处理器 默认为 {@link #defaultExceptionHandler()} - * @param 需要返回的内容 - * @return 指定类型数据 - */ - @Nullable - default R execute(@NotNull Function function, @Nullable BiConsumer> exceptionHandler) { - T value = execute(exceptionHandler); - if (value == null) return null; - else return function.apply(value); - } /** * 执行语句并返回值 @@ -97,14 +81,44 @@ public interface SQLAction { */ @Nullable default T execute(@Nullable BiConsumer> exceptionHandler) { - if (exceptionHandler == null) exceptionHandler = defaultExceptionHandler(); - T value = null; + return execute(t -> t, exceptionHandler); + } + + /** + * 执行语句并处理返回值 + * + * @param function 处理方法 + * @param 需要返回的内容 + * @return 指定类型数据 + * @throws SQLException 当SQL操作出现问题时抛出 + */ + @Nullable + default R executeFunction(@NotNull SQLFunction function) throws SQLException { try { - value = execute(); + T value = execute(); + return function.apply(value); } catch (SQLException exception) { - exceptionHandler.accept(exception, this); + throw new SQLException(exception); + } + } + + /** + * 执行语句并处理返回值 + * + * @param function 处理方法 + * @param exceptionHandler 异常处理器 默认为 {@link #defaultExceptionHandler()} + * @param 需要返回的内容 + * @return 指定类型数据 + */ + @Nullable + default R execute(@NotNull SQLFunction function, + @Nullable BiConsumer> exceptionHandler) { + try { + return executeFunction(function); + } catch (SQLException exception) { + handleException(exceptionHandler, exception); + return null; } - return value; } /** @@ -131,6 +145,12 @@ public interface SQLAction { */ void executeAsync(@Nullable Consumer success, @Nullable BiConsumer> failure); + + default void handleException(@Nullable BiConsumer> handler, SQLException exception) { + if (handler == null) handler = defaultExceptionHandler(); + handler.accept(exception, this); + } + /** * @return 默认的异常处理器 */ 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 fb68cc4..670ff7c 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 @@ -1,7 +1,51 @@ package cc.carm.lib.easysql.api.action.query; import cc.carm.lib.easysql.api.SQLAction; +import cc.carm.lib.easysql.api.function.SQLFunction; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import java.sql.SQLException; +import java.util.function.BiConsumer; +import java.util.function.Consumer; + +/** + * SQLQueryAction 是用于承载SQL查询语句并进行处理、返回并自动关闭连接的基本类。 + * + *
    + *
  • 同步执行 {@link #execute()}, {@link #execute(SQLFunction, BiConsumer)} + *
    同步执行方法中有会抛出异常的方法与不抛出异常的方法, + *
    若选择不抛出异常,则返回值可能为空,需要特殊处理。
  • + * + *
  • 异步执行 {@link #executeAsync(Consumer, BiConsumer)} + *
    异步执行时将提供成功与异常两种处理方式 + *
    可自行选择是否对数据或异常进行处理 + *
    默认的异常处理器为 {@link #defaultExceptionHandler()}
  • + *
+ * + * 注意: 无论是否异步,都不需要自行关闭ResultSet,本API已自动关闭 + * + * @author CarmJos + * @since 0.2.6 + */ public interface QueryAction extends SQLAction { + /** + * 执行语句并处理返回值 + * + * @param function 处理方法 + * @param 需要返回的内容 + * @return 指定类型数据 + * @throws SQLException 当SQL操作出现问题时抛出 + */ + @Nullable + default R executeFunction(@NotNull SQLFunction function) + throws SQLException { + try (SQLQuery value = execute()) { + return function.apply(value); + } catch (SQLException exception) { + throw new SQLException(exception); + } + } + } 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 new file mode 100644 index 0000000..582371d --- /dev/null +++ b/easysql-api/src/main/java/cc/carm/lib/easysql/api/function/SQLFunction.java @@ -0,0 +1,12 @@ +package cc.carm.lib.easysql.api.function; + +import org.jetbrains.annotations.Nullable; + +import java.sql.SQLException; + +public interface SQLFunction { + + @Nullable + R apply(T t) throws SQLException; + +} diff --git a/easysql-beecp/pom.xml b/easysql-beecp/pom.xml index 50c4b78..1249eb9 100644 --- a/easysql-beecp/pom.xml +++ b/easysql-beecp/pom.xml @@ -5,14 +5,14 @@ easysql-parent cc.carm.lib - 0.2.5 + 0.2.6 4.0.0 easysql-beecp jar - 10-EasySQL-BeeCP + 12-EasySQL-BeeCP EasySQL的应用部分。此为BeeCP版本。 https://github.com/CarmJos/EasySQL diff --git a/easysql-demo/pom.xml b/easysql-demo/pom.xml index dee9467..5e8343b 100644 --- a/easysql-demo/pom.xml +++ b/easysql-demo/pom.xml @@ -5,7 +5,7 @@ easysql-parent cc.carm.lib - 0.2.5 + 0.2.6 4.0.0 diff --git a/easysql-demo/src/main/java/EasySQLDemo.java b/easysql-demo/src/main/java/EasySQLDemo.java index 5fb87f8..6354169 100644 --- a/easysql-demo/src/main/java/EasySQLDemo.java +++ b/easysql-demo/src/main/java/EasySQLDemo.java @@ -49,16 +49,11 @@ public class EasySQLDemo { .build().execute(query -> { //可以直接进行数据处理 ResultSet result = query.getResultSet(); - try { - if (result != null && result.next()) { - return UUIDUtil.toUUID(result.getString("uuid")); - } - } catch (SQLException ignored) { - } - return null; + return result.next() ? UUIDUtil.toUUID(result.getString("uuid")) : null; }, (exception, action) -> { // 处理异常,不想处理直接填null }); + } public void sqlQueryAsync(SQLManager sqlManager) { diff --git a/easysql-hikaricp/pom.xml b/easysql-hikaricp/pom.xml index f968b49..3c57cd4 100644 --- a/easysql-hikaricp/pom.xml +++ b/easysql-hikaricp/pom.xml @@ -5,7 +5,7 @@ easysql-parent cc.carm.lib - 0.2.5 + 0.2.6 4.0.0 diff --git a/easysql-impl/pom.xml b/easysql-impl/pom.xml index a2d45a1..03a04c0 100644 --- a/easysql-impl/pom.xml +++ b/easysql-impl/pom.xml @@ -5,7 +5,7 @@ easysql-parent cc.carm.lib - 0.2.5 + 0.2.6 4.0.0 diff --git a/pom.xml b/pom.xml index 40d2540..c3f9b38 100644 --- a/pom.xml +++ b/pom.xml @@ -16,7 +16,7 @@ cc.carm.lib easysql-parent pom - 0.2.5 + 0.2.6 easysql-api