From 68b5d071aeadb562d140caaecaf16d4969fe6900 Mon Sep 17 00:00:00 2001 From: CarmJos Date: Mon, 21 Feb 2022 20:38:32 +0800 Subject: [PATCH] =?UTF-8?q?[0.3.8]=20=E6=89=A7=E8=A1=8C=E7=9B=B8=E5=85=B3?= =?UTF-8?q?=E4=BC=98=E5=8C=96=20-=20=E4=BC=98=E5=8C=96=E9=83=A8=E5=88=86?= =?UTF-8?q?=E8=B0=83=E7=94=A8=EF=BC=8C=E6=9B=BF=E6=8D=A2=E5=88=B6=E8=A1=A8?= =?UTF-8?q?=E7=AC=A6=E4=B8=BA=E7=A9=BA=E6=A0=BC=E3=80=82=20-=20=E8=A1=A5?= =?UTF-8?q?=E5=85=85=E6=AE=8B=E7=BC=BA=E7=9A=84=20Objects.requireNonNull()?= =?UTF-8?q?;=20-=20=E5=AF=B9=E4=BA=8ESQLQuery=E7=9A=84auto-close=E9=A2=9D?= =?UTF-8?q?=E5=A4=96=E5=88=A4=E6=96=ADResultSet=E3=80=81Statement=E4=B8=8E?= =?UTF-8?q?Connection=E6=98=AF=E5=90=A6=E5=B7=B2=E5=85=B3=E9=97=AD?= =?UTF-8?q?=EF=BC=8C=E9=81=BF=E5=85=8D=E9=87=8D=E5=A4=8D=E5=85=B3=E9=97=AD?= =?UTF-8?q?=E6=8A=A5=E9=94=99=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cc/carm/lib/easysql/api/SQLAction.java | 316 ++++++------- .../cc/carm/lib/easysql/api/SQLBuilder.java | 29 +- .../cc/carm/lib/easysql/api/SQLManager.java | 262 +++++------ .../cc/carm/lib/easysql/api/SQLQuery.java | 64 +-- .../action/PreparedSQLUpdateBatchAction.java | 84 ++-- .../easysql/api/action/SQLUpdateAction.java | 2 +- .../api/action/SQLUpdateBatchAction.java | 25 +- .../easysql/api/action/query/QueryAction.java | 22 +- .../easysql/api/builder/DeleteBuilder.java | 2 +- .../easysql/api/builder/ReplaceBuilder.java | 10 +- .../api/builder/TableAlterBuilder.java | 194 ++++---- .../api/builder/TableCreateBuilder.java | 430 +++++++++--------- .../lib/easysql/api/enums/ForeignKeyRule.java | 56 +-- .../carm/lib/easysql/api/enums/IndexType.java | 54 +-- .../lib/easysql/api/enums/NumberType.java | 10 +- .../api/function/SQLExceptionHandler.java | 2 +- .../lib/easysql/api/function/SQLFunction.java | 4 +- .../lib/easysql/api/function/SQLHandler.java | 20 +- .../defaults/DefaultSQLExceptionHandler.java | 65 ++- .../lib/easysql/api/util/TimeDateUtils.java | 2 +- .../lib/easysql/action/AbstractSQLAction.java | 116 ++--- .../PreparedSQLBatchUpdateActionImpl.java | 92 ++-- .../action/PreparedSQLUpdateActionImpl.java | 94 ++-- .../easysql/action/SQLUpdateActionImpl.java | 54 +-- .../action/SQLUpdateBatchActionImpl.java | 72 +-- .../action/query/PreparedQueryActionImpl.java | 114 ++--- .../easysql/action/query/QueryActionImpl.java | 78 ++-- .../easysql/builder/AbstractSQLBuilder.java | 6 +- .../impl/AbstractConditionalBuilder.java | 2 + .../builder/impl/DeleteBuilderImpl.java | 55 +-- .../builder/impl/InsertBuilderImpl.java | 64 +-- .../builder/impl/ReplaceBuilderImpl.java | 48 +- .../builder/impl/TableAlterBuilderImpl.java | 217 +++++---- .../builder/impl/TableCreateBuilderImpl.java | 237 +++++----- .../builder/impl/TableQueryBuilderImpl.java | 142 +++--- .../builder/impl/UpdateBuilderImpl.java | 4 +- .../lib/easysql/manager/SQLManagerImpl.java | 273 ++++++----- .../carm/lib/easysql/query/SQLQueryImpl.java | 136 +++--- .../carm/lib/easysql/util/StatementUtil.java | 356 +++++++-------- .../lib/easysql/testrunner/EasySQLTest.java | 36 -- .../cc/carm/lib/easysql/testrunner/Main.java | 93 ---- .../easysql/testrunner/tests/DeleteTest.java | 22 - .../testrunner/tests/QueryCloseTest.java | 31 -- .../testrunner/tests/QueryFunctionTest.java | 34 -- .../testrunner/tests/QueryNotCloseTest.java | 30 -- .../testrunner/tests/SQLUpdateBatchTests.java | 38 -- .../tests/SQLUpdateReturnKeysTest.java | 24 - .../testrunner/tests/TableAlterTest.java | 35 -- .../testrunner/tests/TableCreateTest.java | 38 -- .../testrunner/tests/TableRenameTest.java | 16 - .../{easysql-test => easysql-tester}/pom.xml | 2 +- .../carm/lib/easysql/tester/EasySQLTest.java | 36 ++ .../java/cc/carm/lib/easysql/tester/Main.java | 93 ++++ .../lib/easysql/tester/tests/DeleteTest.java | 22 + .../easysql/tester/tests/QueryCloseTest.java | 35 ++ .../tester/tests/QueryFunctionTest.java | 26 ++ .../tester/tests/QueryNotCloseTest.java | 30 ++ .../tester/tests/SQLUpdateBatchTests.java | 38 ++ .../tester/tests/SQLUpdateReturnKeysTest.java | 24 + .../easysql/tester/tests/TableAlterTest.java | 35 ++ .../easysql/tester/tests/TableCreateTest.java | 38 ++ .../easysql/tester/tests/TableRenameTest.java | 16 + .../src/main/resources/log4j2.xml | 0 with-pool/easysql-hikaricp/pom.xml | 1 + 64 files changed, 2312 insertions(+), 2294 deletions(-) delete mode 100644 example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/EasySQLTest.java delete mode 100644 example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/Main.java delete mode 100644 example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/tests/DeleteTest.java delete mode 100644 example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/tests/QueryCloseTest.java delete mode 100644 example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/tests/QueryFunctionTest.java delete mode 100644 example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/tests/QueryNotCloseTest.java delete mode 100644 example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/tests/SQLUpdateBatchTests.java delete mode 100644 example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/tests/SQLUpdateReturnKeysTest.java delete mode 100644 example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/tests/TableAlterTest.java delete mode 100644 example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/tests/TableCreateTest.java delete mode 100644 example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/tests/TableRenameTest.java rename example/{easysql-test => easysql-tester}/pom.xml (98%) create mode 100644 example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/EasySQLTest.java create mode 100644 example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/Main.java create mode 100644 example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/tests/DeleteTest.java create mode 100644 example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/tests/QueryCloseTest.java create mode 100644 example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/tests/QueryFunctionTest.java create mode 100644 example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/tests/QueryNotCloseTest.java create mode 100644 example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/tests/SQLUpdateBatchTests.java create mode 100644 example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/tests/SQLUpdateReturnKeysTest.java create mode 100644 example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/tests/TableAlterTest.java create mode 100644 example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/tests/TableCreateTest.java create mode 100644 example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/tests/TableRenameTest.java rename example/{easysql-test => easysql-tester}/src/main/resources/log4j2.xml (100%) 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 7b71acd..83accbc 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 @@ -33,180 +33,180 @@ import java.util.logging.Logger; */ public interface SQLAction { - /** - * 得到该Action的UUID - * - * @return UUID - */ - @NotNull UUID getActionUUID(); + /** + * 得到该Action的UUID + * + * @return UUID + */ + @NotNull UUID getActionUUID(); - /** - * 得到短八位格式的UUID - * - * @return UUID(8) - */ - @NotNull String getShortID(); + /** + * 得到短八位格式的UUID + * + * @return UUID(8) + */ + @NotNull String getShortID(); - /** - * 得到该Action的创建时间 - * - * @return 创建时间 - */ - long getCreateTime(); + /** + * 得到该Action的创建时间 + * + * @return 创建时间 + */ + long getCreateTime(); - /** - * 得到该Action所要执行的源SQL语句 - * - * @return 源SQL语句 - */ - @NotNull String getSQLContent(); + /** + * 得到该Action所要执行的源SQL语句 + * + * @return 源SQL语句 + */ + @NotNull String getSQLContent(); - /** - * 得到承载该Action的对应{@link SQLManager} - * - * @return {@link SQLManager} - */ - @NotNull SQLManager getManager(); + /** + * 得到承载该Action的对应{@link SQLManager} + * + * @return {@link SQLManager} + */ + @NotNull SQLManager getManager(); - /** - * 执行该Action对应的SQL语句 - * - * @return 指定数据类型 - * @throws SQLException 当SQL操作出现问题时抛出 - */ - @NotNull T execute() throws SQLException; + /** + * 执行该Action对应的SQL语句 + * + * @return 指定数据类型 + * @throws SQLException 当SQL操作出现问题时抛出 + */ + @NotNull T execute() throws SQLException; - /** - * 执行语句并返回值 - * - * @param exceptionHandler 异常处理器 默认为 {@link #defaultExceptionHandler()} - * @return 指定类型数据 - */ - @Nullable - default T execute(@Nullable SQLExceptionHandler exceptionHandler) { - return execute(t -> t, exceptionHandler); - } + /** + * 执行语句并返回值 + * + * @param exceptionHandler 异常处理器 默认为 {@link #defaultExceptionHandler()} + * @return 指定类型数据 + */ + @Nullable + default T execute(@Nullable SQLExceptionHandler exceptionHandler) { + return execute(t -> t, exceptionHandler); + } - /** - * 执行语句并处理返回值 - * - * @param function 处理方法 - * @param exceptionHandler 异常处理器 默认为 {@link #defaultExceptionHandler()} - * @param 需要返回的内容 - * @return 指定类型数据 - */ - @Nullable - default R execute(@NotNull SQLFunction function, - @Nullable SQLExceptionHandler exceptionHandler) { - return execute(function, null, exceptionHandler); - } + /** + * 执行语句并处理返回值 + * + * @param function 处理方法 + * @param exceptionHandler 异常处理器 默认为 {@link #defaultExceptionHandler()} + * @param 需要返回的内容 + * @return 指定类型数据 + */ + @Nullable + default R execute(@NotNull SQLFunction function, + @Nullable SQLExceptionHandler exceptionHandler) { + return execute(function, null, exceptionHandler); + } - /** - * 执行语句并处理返回值 - * - * @param function 处理方法 - * @param defaultResult 默认结果,若处理后的结果为null,则返回该值 - * @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, defaultResult); - } catch (SQLException exception) { - handleException(exceptionHandler, exception); - return null; - } - } + /** + * 执行语句并处理返回值 + * + * @param function 处理方法 + * @param defaultResult 默认结果,若处理后的结果为null,则返回该值 + * @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, defaultResult); + } catch (SQLException exception) { + handleException(exceptionHandler, exception); + return null; + } + } - /** - * 执行语句并处理返回值 - * - * @param function 处理方法 - * @param 需要返回的内容 - * @return 指定类型数据 - * @throws SQLException 当SQL操作出现问题时抛出 - */ - @Nullable - default R executeFunction(@NotNull SQLFunction<@NotNull T, R> function) throws SQLException { - return executeFunction(function, null); - } + /** + * 执行语句并处理返回值 + * + * @param function 处理方法 + * @param 需要返回的内容 + * @return 指定类型数据 + * @throws SQLException 当SQL操作出现问题时抛出 + */ + @Nullable + default R executeFunction(@NotNull SQLFunction<@NotNull T, R> function) throws SQLException { + return executeFunction(function, null); + } - /** - * 执行语句并处理返回值 - * - * @param function 处理方法 - * @param defaultResult 默认结果,若处理后的结果为null,则返回该值 - * @param 需要返回的内容 - * @return 指定类型数据 - * @throws SQLException 当SQL操作出现问题时抛出 - */ - @Nullable - @Contract("_,!null -> !null") - default R executeFunction(@NotNull SQLFunction<@NotNull T, R> function, - @Nullable R defaultResult) throws SQLException { - try { - R result = function.apply(execute()); - return result == null ? defaultResult : result; - } catch (SQLException exception) { - throw new SQLException(exception); - } - } + /** + * 执行语句并处理返回值 + * + * @param function 处理方法 + * @param defaultResult 默认结果,若处理后的结果为null,则返回该值 + * @param 需要返回的内容 + * @return 指定类型数据 + * @throws SQLException 当SQL操作出现问题时抛出 + */ + @Nullable + @Contract("_,!null -> !null") + default R executeFunction(@NotNull SQLFunction<@NotNull T, R> function, + @Nullable R defaultResult) throws SQLException { + try { + R result = function.apply(execute()); + return result == null ? defaultResult : result; + } catch (SQLException exception) { + throw new SQLException(exception); + } + } - /** - * 异步执行SQL语句,采用默认异常处理,无需返回值。 - */ - default void executeAsync() { - executeAsync(null); - } + /** + * 异步执行SQL语句,采用默认异常处理,无需返回值。 + */ + default void executeAsync() { + executeAsync(null); + } - /** - * 异步执行SQL语句 - * - * @param success 成功时的操作 - */ - default void executeAsync(@Nullable SQLHandler success) { - executeAsync(success, null); - } + /** + * 异步执行SQL语句 + * + * @param success 成功时的操作 + */ + default void executeAsync(@Nullable SQLHandler success) { + executeAsync(success, null); + } - /** - * 异步执行SQL语句 - * - * @param success 成功时的操作 - * @param failure 异常处理器 默认为 {@link SQLAction#defaultExceptionHandler()} - */ - void executeAsync(@Nullable SQLHandler success, - @Nullable SQLExceptionHandler failure); + /** + * 异步执行SQL语句 + * + * @param success 成功时的操作 + * @param failure 异常处理器 默认为 {@link SQLAction#defaultExceptionHandler()} + */ + void executeAsync(@Nullable SQLHandler success, + @Nullable SQLExceptionHandler failure); - default void handleException(@Nullable SQLExceptionHandler handler, SQLException exception) { - if (handler == null) handler = defaultExceptionHandler(); - handler.accept(exception, this); - } + default void handleException(@Nullable SQLExceptionHandler handler, SQLException exception) { + if (handler == null) handler = defaultExceptionHandler(); + handler.accept(exception, this); + } - /** - * 默认的异常处理器 - * - * @return {@link DefaultSQLExceptionHandler#get(Logger)} - * @see DefaultSQLExceptionHandler - */ - default SQLExceptionHandler defaultExceptionHandler() { - return DefaultSQLExceptionHandler.get(getManager().getLogger()); - } + /** + * 默认的异常处理器 + * + * @return {@link DefaultSQLExceptionHandler#get(Logger)} + * @see DefaultSQLExceptionHandler + */ + default SQLExceptionHandler defaultExceptionHandler() { + return DefaultSQLExceptionHandler.get(getManager().getLogger()); + } - /** - * 设定通用的异常处理器。 - *
在使用 {@link #execute(SQLExceptionHandler)} 等相关方法时,若传入的处理器为null,则会采用此处理器。 - *
若该方法传入参数为 null,则会使用 {@link #defaultExceptionHandler()} 。 - * - * @param handler 异常处理器 - */ - default void setExceptionHandler(@Nullable SQLExceptionHandler handler) { - DefaultSQLExceptionHandler.setCustomHandler(handler); - } + /** + * 设定通用的异常处理器。 + *
在使用 {@link #execute(SQLExceptionHandler)} 等相关方法时,若传入的处理器为null,则会采用此处理器。 + *
若该方法传入参数为 null,则会使用 {@link #defaultExceptionHandler()} 。 + * + * @param handler 异常处理器 + */ + default void setExceptionHandler(@Nullable SQLExceptionHandler handler) { + DefaultSQLExceptionHandler.setCustomHandler(handler); + } } diff --git a/easysql-api/src/main/java/cc/carm/lib/easysql/api/SQLBuilder.java b/easysql-api/src/main/java/cc/carm/lib/easysql/api/SQLBuilder.java index 238e799..eef1856 100644 --- a/easysql-api/src/main/java/cc/carm/lib/easysql/api/SQLBuilder.java +++ b/easysql-api/src/main/java/cc/carm/lib/easysql/api/SQLBuilder.java @@ -11,22 +11,21 @@ import org.jetbrains.annotations.NotNull; */ public interface SQLBuilder { - /** - * 得到承载该Builder的对应{@link SQLManager} - * - * @return {@link SQLManager} - */ - @NotNull SQLManager getManager(); + static @NotNull String withBackQuote(@NotNull String str) { + str = str.trim(); + return !str.isEmpty() && str.charAt(0) == '`' && str.charAt(str.length() - 1) == '`' ? str : "`" + str + "`"; + } + static @NotNull String withQuote(@NotNull String str) { + str = str.trim(); + return !str.isEmpty() && str.charAt(0) == '\'' && str.charAt(str.length() - 1) == '\'' ? str : "'" + str + "'"; + } - static @NotNull String withBackQuote(@NotNull String str) { - str = str.trim(); - return str.startsWith("`") && str.endsWith("`") ? str : "`" + str + "`"; - } - - static @NotNull String withQuote(@NotNull String str) { - str = str.trim(); - return str.startsWith("'") && str.endsWith("'") ? str : "'" + str + "'"; - } + /** + * 得到承载该Builder的对应{@link SQLManager} + * + * @return {@link SQLManager} + */ + @NotNull SQLManager getManager(); } diff --git a/easysql-api/src/main/java/cc/carm/lib/easysql/api/SQLManager.java b/easysql-api/src/main/java/cc/carm/lib/easysql/api/SQLManager.java index f4e48d8..ff1ad88 100644 --- a/easysql-api/src/main/java/cc/carm/lib/easysql/api/SQLManager.java +++ b/easysql-api/src/main/java/cc/carm/lib/easysql/api/SQLManager.java @@ -19,157 +19,157 @@ import java.util.logging.Logger; public interface SQLManager { - Logger getLogger(); + Logger getLogger(); - boolean isDebugMode(); + boolean isDebugMode(); - void setDebugMode(@NotNull Supplier<@NotNull Boolean> debugMode); + void setDebugMode(@NotNull Supplier<@NotNull Boolean> debugMode); - default void setDebugMode(boolean enable) { - setDebugMode(() -> enable); - } + default void setDebugMode(boolean enable) { + setDebugMode(() -> enable); + } - /** - * 得到连接池源 - * - * @return DataSource - */ - @NotNull DataSource getDataSource(); + /** + * 得到连接池源 + * + * @return DataSource + */ + @NotNull DataSource getDataSource(); - /** - * 得到一个数据库连接实例 - * - * @return Connection - * @throws SQLException 见 {@link DataSource#getConnection()} - */ - @NotNull Connection getConnection() throws SQLException; + /** + * 得到一个数据库连接实例 + * + * @return Connection + * @throws SQLException 见 {@link DataSource#getConnection()} + */ + @NotNull Connection getConnection() throws SQLException; - /** - * 得到正使用的查询。 - * - * @return 查询列表 - */ - @NotNull Map getActiveQuery(); + /** + * 得到正使用的查询。 + * + * @return 查询列表 + */ + @NotNull Map getActiveQuery(); - /** - * 执行一条不需要返回结果的SQL语句(多用于UPDATE、REPLACE、DELETE方法) - * 该方法使用 Statement 实现,请注意SQL注入风险! - * - * @param sql SQL语句内容 - * @return 更新的行数 - * @see SQLUpdateAction - */ - @Nullable Integer executeSQL(String sql); + /** + * 执行一条不需要返回结果的SQL语句(多用于UPDATE、REPLACE、DELETE方法) + * 该方法使用 Statement 实现,请注意SQL注入风险! + * + * @param sql SQL语句内容 + * @return 更新的行数 + * @see SQLUpdateAction + */ + @Nullable Integer executeSQL(String sql); - /** - * 执行一条不需要返回结果的预处理SQL更改(UPDATE、REPLACE、DELETE) - * - * @param sql SQL语句内容 - * @param params SQL语句中 ? 的对应参数 - * @return 更新的行数 - * @see PreparedSQLUpdateAction - */ - @Nullable Integer executeSQL(String sql, Object[] params); + /** + * 执行一条不需要返回结果的预处理SQL更改(UPDATE、REPLACE、DELETE) + * + * @param sql SQL语句内容 + * @param params SQL语句中 ? 的对应参数 + * @return 更新的行数 + * @see PreparedSQLUpdateAction + */ + @Nullable Integer executeSQL(String sql, Object[] params); - /** - * 执行多条不需要返回结果的SQL更改(UPDATE、REPLACE、DELETE) - * - * @param sql SQL语句内容 - * @param paramsBatch SQL语句中对应?的参数组 - * @return 对应参数返回的行数 - * @see PreparedSQLUpdateBatchAction - */ - @Nullable List executeSQLBatch(String sql, Iterable paramsBatch); + /** + * 执行多条不需要返回结果的SQL更改(UPDATE、REPLACE、DELETE) + * + * @param sql SQL语句内容 + * @param paramsBatch SQL语句中对应?的参数组 + * @return 对应参数返回的行数 + * @see PreparedSQLUpdateBatchAction + */ + @Nullable List executeSQLBatch(String sql, Iterable paramsBatch); - /** - * 执行多条不需要返回结果的SQL。 - * 该方法使用 Statement 实现,请注意SQL注入风险! - * - * @param sql SQL语句内容 - * @param moreSQL 更多SQL语句内容 - * @return 对应参数返回的行数 - * @see SQLUpdateBatchAction - */ - @Nullable List executeSQLBatch(@NotNull String sql, String... moreSQL); + /** + * 执行多条不需要返回结果的SQL。 + * 该方法使用 Statement 实现,请注意SQL注入风险! + * + * @param sql SQL语句内容 + * @param moreSQL 更多SQL语句内容 + * @return 对应参数返回的行数 + * @see SQLUpdateBatchAction + */ + @Nullable List executeSQLBatch(@NotNull String sql, String... moreSQL); - /** - * 执行多条不需要返回结果的SQL。 - * - * @param sqlBatch SQL语句内容 - * @return 对应参数返回的行数 - */ - @Nullable List executeSQLBatch(@NotNull Iterable sqlBatch); + /** + * 执行多条不需要返回结果的SQL。 + * + * @param sqlBatch SQL语句内容 + * @return 对应参数返回的行数 + */ + @Nullable List executeSQLBatch(@NotNull Iterable sqlBatch); - /** - * 在库中创建一个表 - * - * @param tableName 表名 - * @return {@link TableCreateBuilder} - */ - TableCreateBuilder createTable(@NotNull String tableName); + /** + * 在库中创建一个表 + * + * @param tableName 表名 + * @return {@link TableCreateBuilder} + */ + TableCreateBuilder createTable(@NotNull String tableName); - /** - * 对库中的某个表执行更改 - * - * @param tableName 表名 - * @return {@link TableAlterBuilder} - */ - TableAlterBuilder alterTable(@NotNull String tableName); + /** + * 对库中的某个表执行更改 + * + * @param tableName 表名 + * @return {@link TableAlterBuilder} + */ + TableAlterBuilder alterTable(@NotNull String tableName); - /** - * 新建一个查询 - * - * @return {@link QueryBuilder} - */ - QueryBuilder createQuery(); + /** + * 新建一个查询 + * + * @return {@link QueryBuilder} + */ + QueryBuilder createQuery(); - /** - * 创建一条插入操作 - * - * @param tableName 目标表名 - * @return {@link InsertBuilder} - */ - InsertBuilder createInsert(@NotNull String tableName); + /** + * 创建一条插入操作 + * + * @param tableName 目标表名 + * @return {@link InsertBuilder} + */ + InsertBuilder createInsert(@NotNull String tableName); - /** - * 创建支持多组数据的插入操作 - * - * @param tableName 目标表名 - * @return {@link InsertBuilder} - */ - InsertBuilder createInsertBatch(@NotNull String tableName); + /** + * 创建支持多组数据的插入操作 + * + * @param tableName 目标表名 + * @return {@link InsertBuilder} + */ + InsertBuilder createInsertBatch(@NotNull String tableName); - /** - * 创建一条替换操作 - * - * @param tableName 目标表名 - * @return {@link ReplaceBuilder} - */ - ReplaceBuilder createReplace(@NotNull String tableName); + /** + * 创建一条替换操作 + * + * @param tableName 目标表名 + * @return {@link ReplaceBuilder} + */ + ReplaceBuilder createReplace(@NotNull String tableName); - /** - * 创建支持多组数据的替换操作 - * - * @param tableName 目标表名 - * @return {@link ReplaceBuilder} - */ - ReplaceBuilder createReplaceBatch(@NotNull String tableName); + /** + * 创建支持多组数据的替换操作 + * + * @param tableName 目标表名 + * @return {@link ReplaceBuilder} + */ + ReplaceBuilder createReplaceBatch(@NotNull String tableName); - /** - * 创建更新操作 - * - * @param tableName 目标表名 - * @return {@link UpdateBuilder} - */ - UpdateBuilder createUpdate(@NotNull String tableName); + /** + * 创建更新操作 + * + * @param tableName 目标表名 + * @return {@link UpdateBuilder} + */ + UpdateBuilder createUpdate(@NotNull String tableName); - /** - * 创建删除操作 - * - * @param tableName 目标表名 - * @return {@link DeleteBuilder} - */ - DeleteBuilder createDelete(@NotNull String tableName); + /** + * 创建删除操作 + * + * @param tableName 目标表名 + * @return {@link DeleteBuilder} + */ + DeleteBuilder createDelete(@NotNull String tableName); } diff --git a/easysql-api/src/main/java/cc/carm/lib/easysql/api/SQLQuery.java b/easysql-api/src/main/java/cc/carm/lib/easysql/api/SQLQuery.java index 8c6f142..e9b5908 100644 --- a/easysql-api/src/main/java/cc/carm/lib/easysql/api/SQLQuery.java +++ b/easysql-api/src/main/java/cc/carm/lib/easysql/api/SQLQuery.java @@ -9,44 +9,44 @@ import java.sql.Statement; public interface SQLQuery extends AutoCloseable { - /** - * 获取该查询创建的时间 - * - * @return 创建时间 - */ - long getExecuteTime(); + /** + * 获取该查询创建的时间 + * + * @return 创建时间 + */ + long getExecuteTime(); - /** - * 得到承载该SQLQuery的对应{@link SQLManager} - * - * @return {@link SQLManager} - */ - SQLManager getManager(); + /** + * 得到承载该SQLQuery的对应{@link SQLManager} + * + * @return {@link SQLManager} + */ + SQLManager getManager(); - /** - * 得到承载该SQLQuery的对应{@link QueryAction} - * - * @return {@link QueryAction} 或 {@link PreparedQueryAction} - */ - QueryAction getAction(); + /** + * 得到承载该SQLQuery的对应{@link QueryAction} + * + * @return {@link QueryAction} 或 {@link PreparedQueryAction} + */ + QueryAction getAction(); - ResultSet getResultSet(); + ResultSet getResultSet(); - /** - * 得到设定的SQL语句 - * - * @return SQL语句 - */ - String getSQLContent(); + /** + * 得到设定的SQL语句 + * + * @return SQL语句 + */ + String getSQLContent(); - /** - * 关闭所有内容 - */ - @Override - void close(); + /** + * 关闭所有内容 + */ + @Override + void close(); - Statement getStatement(); + Statement getStatement(); - Connection getConnection(); + Connection getConnection(); } diff --git a/easysql-api/src/main/java/cc/carm/lib/easysql/api/action/PreparedSQLUpdateBatchAction.java b/easysql-api/src/main/java/cc/carm/lib/easysql/api/action/PreparedSQLUpdateBatchAction.java index 8857877..31472d2 100644 --- a/easysql-api/src/main/java/cc/carm/lib/easysql/api/action/PreparedSQLUpdateBatchAction.java +++ b/easysql-api/src/main/java/cc/carm/lib/easysql/api/action/PreparedSQLUpdateBatchAction.java @@ -6,51 +6,51 @@ import java.util.List; public interface PreparedSQLUpdateBatchAction extends SQLAction> { - /** - * 设定多组SQL语句中所有 ? 对应的参数 - * - * @param allParams 所有参数内容 - * @return {@link PreparedSQLUpdateBatchAction} - */ - PreparedSQLUpdateBatchAction setAllParams(Iterable allParams); + /** + * 设定多组SQL语句中所有 ? 对应的参数 + * + * @param allParams 所有参数内容 + * @return {@link PreparedSQLUpdateBatchAction} + */ + PreparedSQLUpdateBatchAction setAllParams(Iterable allParams); - /** - * 添加一组SQL语句中所有 ? 对应的参数 - * - * @param params 参数内容 - * @return {@link PreparedSQLUpdateBatchAction} - */ - PreparedSQLUpdateBatchAction addParamsBatch(Object... params); + /** + * 添加一组SQL语句中所有 ? 对应的参数 + * + * @param params 参数内容 + * @return {@link PreparedSQLUpdateBatchAction} + */ + PreparedSQLUpdateBatchAction addParamsBatch(Object... params); - /** - * 设定自增主键的序列 - * - * @param keyColumnIndex 自增主键的序列 - *
若该值 > 0,则 {@link #execute()} 返回自增主键数值 - *
若该值 ≤ 0,则 {@link #execute()} 返回变更的行数 - * @return {@link PreparedSQLUpdateBatchAction} - * @see #setReturnGeneratedKeys(boolean) - */ - @Deprecated - default PreparedSQLUpdateBatchAction setKeyIndex(int keyColumnIndex) { - return setReturnGeneratedKeys(keyColumnIndex > 0); - } + /** + * 设定自增主键的序列 + * + * @param keyColumnIndex 自增主键的序列 + *
若该值 > 0,则 {@link #execute()} 返回自增主键数值 + *
若该值 ≤ 0,则 {@link #execute()} 返回变更的行数 + * @return {@link PreparedSQLUpdateBatchAction} + * @see #setReturnGeneratedKeys(boolean) + */ + @Deprecated + default PreparedSQLUpdateBatchAction setKeyIndex(int keyColumnIndex) { + return setReturnGeneratedKeys(keyColumnIndex > 0); + } - /** - * 设定该操作返回自增键序列。 - * - * @return {@link PreparedSQLUpdateBatchAction} - */ - default PreparedSQLUpdateBatchAction returnGeneratedKeys() { - return setReturnGeneratedKeys(true); - } + /** + * 设定该操作返回自增键序列。 + * + * @return {@link PreparedSQLUpdateBatchAction} + */ + default PreparedSQLUpdateBatchAction returnGeneratedKeys() { + return setReturnGeneratedKeys(true); + } - /** - * 设定该操作是否返回自增键序列。 - * - * @param returnGeneratedKey 是否返回自增键序列 - * @return {@link PreparedSQLUpdateBatchAction} - */ - PreparedSQLUpdateBatchAction setReturnGeneratedKeys(boolean returnGeneratedKey); + /** + * 设定该操作是否返回自增键序列。 + * + * @param returnGeneratedKey 是否返回自增键序列 + * @return {@link PreparedSQLUpdateBatchAction} + */ + PreparedSQLUpdateBatchAction setReturnGeneratedKeys(boolean returnGeneratedKey); } diff --git a/easysql-api/src/main/java/cc/carm/lib/easysql/api/action/SQLUpdateAction.java b/easysql-api/src/main/java/cc/carm/lib/easysql/api/action/SQLUpdateAction.java index 92ac3dc..afef907 100644 --- a/easysql-api/src/main/java/cc/carm/lib/easysql/api/action/SQLUpdateAction.java +++ b/easysql-api/src/main/java/cc/carm/lib/easysql/api/action/SQLUpdateAction.java @@ -29,7 +29,7 @@ public interface SQLUpdateAction extends SQLAction { /** * 设定该操作是否返回自增键序列。 - + * * @param returnGeneratedKey 是否返回自增键序列 * @return {@link SQLUpdateAction} */ 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 bbed930..1561c7e 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 @@ -5,21 +5,22 @@ import org.jetbrains.annotations.NotNull; import java.util.List; +@SuppressWarnings("UnusedReturnValue") public interface SQLUpdateBatchAction extends SQLAction> { - /** - * 添加一条批量执行的SQL语句 - * - * @param sql SQL语句 - * @return {@link SQLUpdateBatchAction} - */ - SQLUpdateBatchAction addBatch(@NotNull String sql); + /** + * 添加一条批量执行的SQL语句 + * + * @param sql SQL语句 + * @return {@link SQLUpdateBatchAction} + */ + SQLUpdateBatchAction addBatch(@NotNull String sql); - @Override - default @NotNull String getSQLContent() { - return getSQLContents().get(0); - } + @Override + default @NotNull String getSQLContent() { + return getSQLContents().get(0); + } - List getSQLContents(); + List getSQLContents(); } 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 2d5270b..eaf2ca2 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 @@ -32,16 +32,16 @@ import java.sql.SQLException; */ public interface QueryAction extends SQLAction { - @Override - @Contract("_,!null -> !null") - default @Nullable R executeFunction(@NotNull SQLFunction<@NotNull SQLQuery, R> function, - @Nullable R defaultResult) throws SQLException { - try (SQLQuery value = execute()) { - R result = function.apply(value); - return result == null ? defaultResult : result; - } catch (SQLException exception) { - throw new SQLException(exception); - } - } + @Override + @Contract("_,!null -> !null") + default @Nullable R executeFunction(@NotNull SQLFunction<@NotNull SQLQuery, R> function, + @Nullable R defaultResult) throws SQLException { + try (SQLQuery value = execute()) { + 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/DeleteBuilder.java b/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/DeleteBuilder.java index 6072b9a..429001d 100644 --- a/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/DeleteBuilder.java +++ b/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/DeleteBuilder.java @@ -4,6 +4,6 @@ import cc.carm.lib.easysql.api.SQLAction; public interface DeleteBuilder extends ConditionalBuilder> { - String getTableName(); + String getTableName(); } diff --git a/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/ReplaceBuilder.java b/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/ReplaceBuilder.java index 4049715..87a5c3c 100644 --- a/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/ReplaceBuilder.java +++ b/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/ReplaceBuilder.java @@ -14,12 +14,12 @@ import java.util.List; */ public interface ReplaceBuilder> { - String getTableName(); + String getTableName(); - T setColumnNames(List columnNames); + T setColumnNames(List columnNames); - default T setColumnNames(String... columnNames) { - return setColumnNames(columnNames == null ? null : Arrays.asList(columnNames)); - } + default T setColumnNames(String... columnNames) { + return setColumnNames(columnNames == null ? null : Arrays.asList(columnNames)); + } } diff --git a/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/TableAlterBuilder.java b/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/TableAlterBuilder.java index 0363815..006a534 100644 --- a/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/TableAlterBuilder.java +++ b/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/TableAlterBuilder.java @@ -10,120 +10,120 @@ import org.jetbrains.annotations.Nullable; public interface TableAlterBuilder extends SQLBuilder { - SQLAction renameTo(@NotNull String newTableName); + SQLAction renameTo(@NotNull String newTableName); - SQLAction changeComment(@NotNull String newTableComment); + SQLAction changeComment(@NotNull String newTableComment); - SQLAction setAutoIncrementIndex(int index); + SQLAction setAutoIncrementIndex(int index); - SQLAction addIndex(@NotNull IndexType indexType, @NotNull String indexName, - @NotNull String columnName, @NotNull String... moreColumns); + SQLAction addIndex(@NotNull IndexType indexType, @Nullable String indexName, + @NotNull String columnName, @NotNull String... moreColumns); - /** - * 为该表移除一个索引 - * - * @param indexName 索引名 - * @return {@link SQLUpdateAction} - */ - SQLAction dropIndex(@NotNull String indexName); + /** + * 为该表移除一个索引 + * + * @param indexName 索引名 + * @return {@link SQLUpdateAction} + */ + SQLAction dropIndex(@NotNull String indexName); - /** - * 为该表移除一个外键 - * - * @param keySymbol 外键名 - * @return {@link SQLUpdateAction} - */ - SQLAction dropForeignKey(@NotNull String keySymbol); + /** + * 为该表移除一个外键 + * + * @param keySymbol 外键名 + * @return {@link SQLUpdateAction} + */ + SQLAction dropForeignKey(@NotNull String keySymbol); - /** - * 为该表移除主键(须添加新主键) - * - * @return {@link SQLUpdateAction} - */ - SQLAction dropPrimaryKey(); + /** + * 为该表移除主键(须添加新主键) + * + * @return {@link SQLUpdateAction} + */ + SQLAction dropPrimaryKey(); - /** - * 为表添加一列 - * - * @param columnName 列名 - * @param settings 列的相关设定 - * @return {@link SQLUpdateAction} - */ - default SQLAction addColumn(@NotNull String columnName, @NotNull String settings) { - return addColumn(columnName, settings, null); - } + /** + * 为表添加一列 + * + * @param columnName 列名 + * @param settings 列的相关设定 + * @return {@link SQLUpdateAction} + */ + default SQLAction addColumn(@NotNull String columnName, @NotNull String settings) { + return addColumn(columnName, settings, null); + } - /** - * 为表添加一列 - * - * @param columnName 列名 - * @param settings 列的相关设定 - * @param afterColumn 该列增添到哪个列的后面, - *

该参数若省缺则放于最后一行 - *

若为 "" 则置于首行。 - * @return {@link SQLUpdateAction} - */ - SQLAction addColumn(@NotNull String columnName, @NotNull String settings, @Nullable String afterColumn); + /** + * 为表添加一列 + * + * @param columnName 列名 + * @param settings 列的相关设定 + * @param afterColumn 该列增添到哪个列的后面, + *

该参数若省缺则放于最后一行 + *

若为 "" 则置于首行。 + * @return {@link SQLUpdateAction} + */ + SQLAction addColumn(@NotNull String columnName, @NotNull String settings, @Nullable String afterColumn); - SQLAction renameColumn(@NotNull String columnName, @NotNull String newName); + SQLAction renameColumn(@NotNull String columnName, @NotNull String newName); - SQLAction modifyColumn(@NotNull String columnName, @NotNull String settings); + SQLAction modifyColumn(@NotNull String columnName, @NotNull String settings); - default SQLAction modifyColumn(@NotNull String columnName, @NotNull String columnSettings, @NotNull String afterColumn) { - return modifyColumn(columnName, columnSettings + " AFTER `" + afterColumn + "`"); - } + default SQLAction modifyColumn(@NotNull String columnName, @NotNull String columnSettings, @NotNull String afterColumn) { + return modifyColumn(columnName, columnSettings + " AFTER `" + afterColumn + "`"); + } - SQLAction removeColumn(@NotNull String columnName); + SQLAction removeColumn(@NotNull String columnName); - SQLAction setColumnDefault(@NotNull String columnName, @NotNull String defaultValue); + SQLAction setColumnDefault(@NotNull String columnName, @NotNull String defaultValue); - SQLAction removeColumnDefault(@NotNull String columnName); + SQLAction removeColumnDefault(@NotNull String columnName); - /** - * 为该表添加一个自增列 - *

自增列强制要求为数字类型,非空,且为UNIQUE。 - *

注意:一个表只允许有一个自增列! - * - * @param columnName 列名 - * @param numberType 数字类型,若省缺则为 {@link NumberType#INT} - * @param primary 是否为主键,若否则只为唯一键 - * @param unsigned 是否采用 UNSIGNED (即无负数,可以增加自增键的最高数,建议为true) - * @return {@link TableCreateBuilder} - */ - default SQLAction addAutoIncrementColumn(@NotNull String columnName, @Nullable NumberType numberType, - boolean primary, boolean unsigned) { - return addColumn(columnName, - (numberType == null ? NumberType.INT : numberType).name() - + (unsigned ? " UNSIGNED " : " ") - + "NOT NULL AUTO_INCREMENT " + (primary ? "PRIMARY KEY" : "UNIQUE KEY"), - "" - ); - } + /** + * 为该表添加一个自增列 + *

自增列强制要求为数字类型,非空,且为UNIQUE。 + *

注意:一个表只允许有一个自增列! + * + * @param columnName 列名 + * @param numberType 数字类型,若省缺则为 {@link NumberType#INT} + * @param primary 是否为主键,若否则只为唯一键 + * @param unsigned 是否采用 UNSIGNED (即无负数,可以增加自增键的最高数,建议为true) + * @return {@link TableCreateBuilder} + */ + default SQLAction addAutoIncrementColumn(@NotNull String columnName, @Nullable NumberType numberType, + boolean primary, boolean unsigned) { + return addColumn(columnName, + (numberType == null ? NumberType.INT : numberType).name() + + (unsigned ? " UNSIGNED " : " ") + + "NOT NULL AUTO_INCREMENT " + (primary ? "PRIMARY KEY" : "UNIQUE KEY"), + "" + ); + } - /** - * 为该表添加一个自增列 - *
自增列强制要求为数字类型,非空,且为UNIQUE。 - *

注意:一个表只允许有一个自增列! - * - * @param columnName 列名 - * @param numberType 数字类型,若省缺则为 {@link NumberType#INT} - * @return {@link TableAlterBuilder} - */ - default SQLAction addAutoIncrementColumn(@NotNull String columnName, @NotNull NumberType numberType) { - return addAutoIncrementColumn(columnName, numberType, false, true); - } + /** + * 为该表添加一个自增列 + *
自增列强制要求为数字类型,非空,且为UNIQUE。 + *

注意:一个表只允许有一个自增列! + * + * @param columnName 列名 + * @param numberType 数字类型,若省缺则为 {@link NumberType#INT} + * @return {@link TableAlterBuilder} + */ + default SQLAction addAutoIncrementColumn(@NotNull String columnName, @NotNull NumberType numberType) { + return addAutoIncrementColumn(columnName, numberType, false, true); + } - /** - * 为该表添加一个自增列 - *
自增列强制要求为数字类型,非空,且为UNIQUE。 - *

注意:一个表只允许有一个自增列! - * - * @param columnName 列名 - * @return {@link TableAlterBuilder} - */ - default SQLAction addAutoIncrementColumn(@NotNull String columnName) { - return addAutoIncrementColumn(columnName, NumberType.INT); - } + /** + * 为该表添加一个自增列 + *
自增列强制要求为数字类型,非空,且为UNIQUE。 + *

注意:一个表只允许有一个自增列! + * + * @param columnName 列名 + * @return {@link TableAlterBuilder} + */ + default SQLAction addAutoIncrementColumn(@NotNull String columnName) { + return addAutoIncrementColumn(columnName, NumberType.INT); + } } diff --git a/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/TableCreateBuilder.java b/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/TableCreateBuilder.java index da273e8..ce65534 100644 --- a/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/TableCreateBuilder.java +++ b/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/TableCreateBuilder.java @@ -16,241 +16,241 @@ import static cc.carm.lib.easysql.api.SQLBuilder.withQuote; public interface TableCreateBuilder extends SQLBuilder { - /** - * 将现有条件构建完整的SQL语句用于执行。 - * - * @return {@link SQLUpdateAction} - */ - SQLUpdateAction build(); + /** + * 将现有条件构建完整的SQL语句用于执行。 + * + * @return {@link SQLUpdateAction} + */ + SQLUpdateAction build(); - @NotNull String getTableName(); + @NotNull String getTableName(); - /** - * 得到表的设定。 - *

若未使用 {@link #setTableSettings(String)} 方法则会采用 {@link #defaultTablesSettings()} 。 - * - * @return TableSettings - */ - @NotNull String getTableSettings(); + /** + * 得到表的设定。 + *

若未使用 {@link #setTableSettings(String)} 方法则会采用 {@link #defaultTablesSettings()} 。 + * + * @return TableSettings + */ + @NotNull String getTableSettings(); - TableCreateBuilder setTableSettings(@NotNull String settings); + TableCreateBuilder setTableSettings(@NotNull String settings); - /** - * 设定表的标注,一般用于解释该表的作用。 - * - * @param comment 表标注 - * @return {@link TableCreateBuilder} - */ - TableCreateBuilder setTableComment(@Nullable String comment); + /** + * 设定表的标注,一般用于解释该表的作用。 + * + * @param comment 表标注 + * @return {@link TableCreateBuilder} + */ + TableCreateBuilder setTableComment(@Nullable String comment); - /** - * 直接设定表的所有列信息 - * - * @param columns 列的相关信息 (包括列设定) - * @return {@link TableCreateBuilder} - */ - TableCreateBuilder setColumns(@NotNull String... columns); + /** + * 直接设定表的所有列信息 + * + * @param columns 列的相关信息 (包括列设定) + * @return {@link TableCreateBuilder} + */ + TableCreateBuilder setColumns(@NotNull String... columns); - /** - * 为该表添加一个列 - * - * @param column 列的相关信息 - *
如 `uuid` VARCHAR(36) NOT NULL UNIQUE KEY - * @return {@link TableCreateBuilder} - */ - TableCreateBuilder addColumn(@NotNull String column); + /** + * 为该表添加一个列 + * + * @param column 列的相关信息 + *
如 `uuid` VARCHAR(36) NOT NULL UNIQUE KEY + * @return {@link TableCreateBuilder} + */ + TableCreateBuilder addColumn(@NotNull String column); - /** - * 为该表添加一个列 - * - * @param columnName 列名 - * @param settings 列的设定 - *
如 VARCHAR(36) NOT NULL UNIQUE KEY - * @return {@link TableCreateBuilder} - */ - default TableCreateBuilder addColumn(@NotNull String columnName, @NotNull String settings) { - Objects.requireNonNull(columnName, "columnName could not be null"); - return addColumn(withBackQuote(columnName) + " " + settings); - } + /** + * 为该表添加一个列 + * + * @param columnName 列名 + * @param settings 列的设定 + *
如 VARCHAR(36) NOT NULL UNIQUE KEY + * @return {@link TableCreateBuilder} + */ + default TableCreateBuilder addColumn(@NotNull String columnName, @NotNull String settings) { + Objects.requireNonNull(columnName, "columnName could not be null"); + return addColumn(withBackQuote(columnName) + " " + settings); + } - /** - * 为该表添加一个列 - * - * @param columnName 列名 - * @param settings 列的设定 - *
如 VARCHAR(36) NOT NULL UNIQUE KEY - * @param comments 列的注解,用于解释该列数据的作用 - * @return {@link TableCreateBuilder} - */ - default TableCreateBuilder addColumn(@NotNull String columnName, @NotNull String settings, @NotNull String comments) { - return addColumn(columnName, settings + " COMMENT " + withQuote(comments)); - } + /** + * 为该表添加一个列 + * + * @param columnName 列名 + * @param settings 列的设定 + *
如 VARCHAR(36) NOT NULL UNIQUE KEY + * @param comments 列的注解,用于解释该列数据的作用 + * @return {@link TableCreateBuilder} + */ + default TableCreateBuilder addColumn(@NotNull String columnName, @NotNull String settings, @NotNull String comments) { + return addColumn(columnName, settings + " COMMENT " + withQuote(comments)); + } - /** - * 为该表添加一个自增列 - *

自增列强制要求为数字类型,非空,且为UNIQUE。 - *

注意:一个表只允许有一个自增列! - * - * @param columnName 列名 - * @param numberType 数字类型,若省缺则为 {@link NumberType#INT} - * @param asPrimaryKey 是否为主键,若为false则设定为唯一键 - * @param unsigned 是否采用 UNSIGNED (即无负数,可以增加自增键的最高数,建议为true) - * @return {@link TableCreateBuilder} - */ - TableCreateBuilder addAutoIncrementColumn(@NotNull String columnName, @Nullable NumberType numberType, - boolean asPrimaryKey, boolean unsigned); + /** + * 为该表添加一个自增列 + *

自增列强制要求为数字类型,非空,且为UNIQUE。 + *

注意:一个表只允许有一个自增列! + * + * @param columnName 列名 + * @param numberType 数字类型,若省缺则为 {@link NumberType#INT} + * @param asPrimaryKey 是否为主键,若为false则设定为唯一键 + * @param unsigned 是否采用 UNSIGNED (即无负数,可以增加自增键的最高数,建议为true) + * @return {@link TableCreateBuilder} + */ + TableCreateBuilder addAutoIncrementColumn(@NotNull String columnName, @Nullable NumberType numberType, + boolean asPrimaryKey, boolean unsigned); - /** - * 为该表添加一个INT类型的自增主键列 - *

自增列强制要求为数字类型,非空,且为UNIQUE。 - *

注意:一个表只允许有一个自增列! - * - * @param columnName 列名 - * @param asPrimaryKey 是否为主键,若为false则设定为唯一键 - * @param unsigned 是否采用 UNSIGNED (即无负数,可以增加自增键的最高数,建议为true) - * @return {@link TableCreateBuilder} - */ - default TableCreateBuilder addAutoIncrementColumn(@NotNull String columnName, - boolean asPrimaryKey, boolean unsigned) { - return addAutoIncrementColumn(columnName, NumberType.INT, asPrimaryKey, unsigned); - } + /** + * 为该表添加一个INT类型的自增主键列 + *

自增列强制要求为数字类型,非空,且为UNIQUE。 + *

注意:一个表只允许有一个自增列! + * + * @param columnName 列名 + * @param asPrimaryKey 是否为主键,若为false则设定为唯一键 + * @param unsigned 是否采用 UNSIGNED (即无负数,可以增加自增键的最高数,建议为true) + * @return {@link TableCreateBuilder} + */ + default TableCreateBuilder addAutoIncrementColumn(@NotNull String columnName, + boolean asPrimaryKey, boolean unsigned) { + return addAutoIncrementColumn(columnName, NumberType.INT, asPrimaryKey, unsigned); + } - /** - * 为该表添加一个INT类型的自增列 - *

自增列强制要求为数字类型,非空,且为UNIQUE。 - *

注意:一个表只允许有一个自增列! - * - * @param columnName 列名 - * @param asPrimaryKey 是否为主键,若为false则设定为唯一键 - * @return {@link TableCreateBuilder} - */ - default TableCreateBuilder addAutoIncrementColumn(@NotNull String columnName, boolean asPrimaryKey) { - return addAutoIncrementColumn(columnName, asPrimaryKey, true); - } + /** + * 为该表添加一个INT类型的自增列 + *

自增列强制要求为数字类型,非空,且为UNIQUE。 + *

注意:一个表只允许有一个自增列! + * + * @param columnName 列名 + * @param asPrimaryKey 是否为主键,若为false则设定为唯一键 + * @return {@link TableCreateBuilder} + */ + default TableCreateBuilder addAutoIncrementColumn(@NotNull String columnName, boolean asPrimaryKey) { + return addAutoIncrementColumn(columnName, asPrimaryKey, true); + } - /** - * 为该表添加一个INT类型的自增主键列 - *

自增列强制要求为数字类型,非空,且为UNIQUE。 - *

注意:一个表只允许有一个自增列! - * - * @param columnName 列名 - * @return {@link TableCreateBuilder} - */ - default TableCreateBuilder addAutoIncrementColumn(@NotNull String columnName) { - return addAutoIncrementColumn(columnName, true); - } + /** + * 为该表添加一个INT类型的自增主键列 + *

自增列强制要求为数字类型,非空,且为UNIQUE。 + *

注意:一个表只允许有一个自增列! + * + * @param columnName 列名 + * @return {@link TableCreateBuilder} + */ + default TableCreateBuilder addAutoIncrementColumn(@NotNull String columnName) { + return addAutoIncrementColumn(columnName, true); + } - /** - * 设定表中的某列为索引或键。 - * - *

创建索引时,你需要确保该索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件)。 - *
虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE 和DELETE。 - *
因此,请合理的设计索引。 - * - * @param type 索引类型 - * @param columnName 索引包含的列 - * @return {@link TableCreateBuilder} - */ - default TableCreateBuilder setIndex(@NotNull String columnName, - @NotNull IndexType type) { - return setIndex(type, null, columnName); - } + /** + * 设定表中的某列为索引或键。 + * + *

创建索引时,你需要确保该索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件)。 + *
虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE 和DELETE。 + *
因此,请合理的设计索引。 + * + * @param type 索引类型 + * @param columnName 索引包含的列 + * @return {@link TableCreateBuilder} + */ + default TableCreateBuilder setIndex(@NotNull String columnName, + @NotNull IndexType type) { + return setIndex(type, null, columnName); + } - /** - * 设定表中的某列为索引或键。 - * - *

创建索引时,你需要确保该索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件)。 - *
虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE 和DELETE。 - *
因此,请合理的设计索引。 - * - * @param type 索引类型 - * @param indexName 索引名称,缺省时将根据第一个索引列赋一个名称 - * @param columnName 索引包含的列 - * @param moreColumns 联合索引需要包含的列 - * @return {@link TableCreateBuilder} - */ - TableCreateBuilder setIndex(@NotNull IndexType type, @Nullable String indexName, - @NotNull String columnName, @NotNull String... moreColumns); + /** + * 设定表中的某列为索引或键。 + * + *

创建索引时,你需要确保该索引是应用在 SQL 查询语句的条件(一般作为 WHERE 子句的条件)。 + *
虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE 和DELETE。 + *
因此,请合理的设计索引。 + * + * @param type 索引类型 + * @param indexName 索引名称,缺省时将根据第一个索引列赋一个名称 + * @param columnName 索引包含的列 + * @param moreColumns 联合索引需要包含的列 + * @return {@link TableCreateBuilder} + */ + TableCreateBuilder setIndex(@NotNull IndexType type, @Nullable String indexName, + @NotNull String columnName, @NotNull String... moreColumns); - /** - * 以本表位从表,为表中某列设定自参照外键(即自参照完整性)。 - * - *

外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。 - *
外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。 - *
主表删除某条记录时,从表中与之对应的记录也必须有相应的改变。 - * - * @param tableColumn 本表中的列 - * @param foreignColumn 外键关联表中对应的关联列,必须为目标表的主键,即 {@link IndexType#PRIMARY_KEY} - * @return {@link TableCreateBuilder} - */ - default TableCreateBuilder addForeignKey(@NotNull String tableColumn, @NotNull String foreignColumn) { - return addForeignKey(tableColumn, getTableName(), foreignColumn); - } + /** + * 以本表位从表,为表中某列设定自参照外键(即自参照完整性)。 + * + *

外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。 + *
外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。 + *
主表删除某条记录时,从表中与之对应的记录也必须有相应的改变。 + * + * @param tableColumn 本表中的列 + * @param foreignColumn 外键关联表中对应的关联列,必须为目标表的主键,即 {@link IndexType#PRIMARY_KEY} + * @return {@link TableCreateBuilder} + */ + default TableCreateBuilder addForeignKey(@NotNull String tableColumn, @NotNull String foreignColumn) { + return addForeignKey(tableColumn, getTableName(), foreignColumn); + } - /** - * 以本表位从表,为表中某列设定外键。 - * - *

外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。 - *
外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。 - *
主表删除某条记录时,从表中与之对应的记录也必须有相应的改变。 - * - * @param tableColumn 本表中的列 - * @param foreignTable 外键关联主表,必须为已存在的表或本表,且必须有主键。 - * @param foreignColumn 外键关联主表中对应的关联列,须满足 - *

1. 为主表的主键,即 {@link IndexType#PRIMARY_KEY} - *

2. 数据类型必须和所要建立主键的列的数据类型相同。 - * @return {@link TableCreateBuilder} - */ - default TableCreateBuilder addForeignKey(@NotNull String tableColumn, - @NotNull String foreignTable, @NotNull String foreignColumn) { - return addForeignKey(tableColumn, null, foreignTable, foreignColumn); - } + /** + * 以本表位从表,为表中某列设定外键。 + * + *

外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。 + *
外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。 + *
主表删除某条记录时,从表中与之对应的记录也必须有相应的改变。 + * + * @param tableColumn 本表中的列 + * @param foreignTable 外键关联主表,必须为已存在的表或本表,且必须有主键。 + * @param foreignColumn 外键关联主表中对应的关联列,须满足 + *

1. 为主表的主键,即 {@link IndexType#PRIMARY_KEY} + *

2. 数据类型必须和所要建立主键的列的数据类型相同。 + * @return {@link TableCreateBuilder} + */ + default TableCreateBuilder addForeignKey(@NotNull String tableColumn, + @NotNull String foreignTable, @NotNull String foreignColumn) { + return addForeignKey(tableColumn, null, foreignTable, foreignColumn); + } - /** - * 以本表位从表,为表中某列设定外键。 - * - *

外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。 - *
外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。 - *
主表删除某条记录时,从表中与之对应的记录也必须有相应的改变。 - * - * @param tableColumn 本表中的列 - * @param constraintName 约束名,缺省时将使用参数自动生成,如 fk_[tableColumn]_[foreignTable] - * @param foreignTable 外键关联主表,必须为已存在的表或本表,且必须有主键。 - * @param foreignColumn 外键关联主表中对应的关联列,须满足 - *

1. 为主表的主键,即 {@link IndexType#PRIMARY_KEY} - *

2. 数据类型必须和所要建立主键的列的数据类型相同。 - * @return {@link TableCreateBuilder} - */ - default TableCreateBuilder addForeignKey(@NotNull String tableColumn, @Nullable String constraintName, - @NotNull String foreignTable, @NotNull String foreignColumn) { - return addForeignKey(tableColumn, constraintName, foreignTable, foreignColumn, null, null); - } + /** + * 以本表位从表,为表中某列设定外键。 + * + *

外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。 + *
外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。 + *
主表删除某条记录时,从表中与之对应的记录也必须有相应的改变。 + * + * @param tableColumn 本表中的列 + * @param constraintName 约束名,缺省时将使用参数自动生成,如 fk_[tableColumn]_[foreignTable] + * @param foreignTable 外键关联主表,必须为已存在的表或本表,且必须有主键。 + * @param foreignColumn 外键关联主表中对应的关联列,须满足 + *

1. 为主表的主键,即 {@link IndexType#PRIMARY_KEY} + *

2. 数据类型必须和所要建立主键的列的数据类型相同。 + * @return {@link TableCreateBuilder} + */ + default TableCreateBuilder addForeignKey(@NotNull String tableColumn, @Nullable String constraintName, + @NotNull String foreignTable, @NotNull String foreignColumn) { + return addForeignKey(tableColumn, constraintName, foreignTable, foreignColumn, null, null); + } - /** - * 以本表位从表,为表中某列设定外键。 - * - *

外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。 - *
外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。 - *
主表删除某条记录时,从表中与之对应的记录也必须有相应的改变。 - * - * @param tableColumn 本表中的列 - * @param constraintName 约束名,缺省时将使用参数自动生成,如 fk_[tableColumn]_[foreignTable] - * @param foreignTable 外键关联主表,必须为已存在的表或本表,且必须有主键。 - * @param foreignColumn 外键关联主表中对应的关联列,须满足 - *

1. 为主表的主键,即 {@link IndexType#PRIMARY_KEY} - *

2. 数据类型必须和所要建立主键的列的数据类型相同。 - * @param updateRule 在外键被更新时采用的规则,缺省时默认为{@link ForeignKeyRule#RESTRICT} - * @param deleteRule 在外键被删除时采用的规则,缺省时默认为{@link ForeignKeyRule#RESTRICT} - * @return {@link TableCreateBuilder} - */ - TableCreateBuilder addForeignKey(@NotNull String tableColumn, @Nullable String constraintName, - @NotNull String foreignTable, @NotNull String foreignColumn, - @Nullable ForeignKeyRule updateRule, @Nullable ForeignKeyRule deleteRule); + /** + * 以本表位从表,为表中某列设定外键。 + * + *

外键约束(FOREIGN KEY)是表的一个特殊字段,经常与主键约束一起使用。 + *
外键用来建立主表与从表的关联关系,为两个表的数据建立连接,约束两个表中数据的一致性和完整性。 + *
主表删除某条记录时,从表中与之对应的记录也必须有相应的改变。 + * + * @param tableColumn 本表中的列 + * @param constraintName 约束名,缺省时将使用参数自动生成,如 fk_[tableColumn]_[foreignTable] + * @param foreignTable 外键关联主表,必须为已存在的表或本表,且必须有主键。 + * @param foreignColumn 外键关联主表中对应的关联列,须满足 + *

1. 为主表的主键,即 {@link IndexType#PRIMARY_KEY} + *

2. 数据类型必须和所要建立主键的列的数据类型相同。 + * @param updateRule 在外键被更新时采用的规则,缺省时默认为{@link ForeignKeyRule#RESTRICT} + * @param deleteRule 在外键被删除时采用的规则,缺省时默认为{@link ForeignKeyRule#RESTRICT} + * @return {@link TableCreateBuilder} + */ + TableCreateBuilder addForeignKey(@NotNull String tableColumn, @Nullable String constraintName, + @NotNull String foreignTable, @NotNull String foreignColumn, + @Nullable ForeignKeyRule updateRule, @Nullable ForeignKeyRule deleteRule); - default String defaultTablesSettings() { - return "ENGINE=InnoDB DEFAULT CHARSET=utf8"; - } + default String defaultTablesSettings() { + return "ENGINE=InnoDB DEFAULT CHARSET=utf8"; + } } diff --git a/easysql-api/src/main/java/cc/carm/lib/easysql/api/enums/ForeignKeyRule.java b/easysql-api/src/main/java/cc/carm/lib/easysql/api/enums/ForeignKeyRule.java index 036cccd..3be0cc5 100644 --- a/easysql-api/src/main/java/cc/carm/lib/easysql/api/enums/ForeignKeyRule.java +++ b/easysql-api/src/main/java/cc/carm/lib/easysql/api/enums/ForeignKeyRule.java @@ -2,40 +2,40 @@ package cc.carm.lib.easysql.api.enums; public enum ForeignKeyRule { - /** - * 啥也不做 - *

注意: 在Mysql中该选项实际上等同于采用默认的 {@link #RESTRICT} 设定! - */ - NO_ACTION("NO ACTION"), + /** + * 啥也不做 + *

注意: 在Mysql中该选项实际上等同于采用默认的 {@link #RESTRICT} 设定! + */ + NO_ACTION("NO ACTION"), - /** - * 拒绝删除要求,直到使用删除键值的辅助表被手工删除,并且没有参照时(这是默认设置,也是最安全的设置) - */ - RESTRICT("RESTRICT"), + /** + * 拒绝删除要求,直到使用删除键值的辅助表被手工删除,并且没有参照时(这是默认设置,也是最安全的设置) + */ + RESTRICT("RESTRICT"), - /** - * 修改包含与已删除键值有参照关系的所有记录,使用NULL值替换(只能用于已标记为NOT NULL的字段) - */ - SET_NULL("SET NULL"), + /** + * 修改包含与已删除键值有参照关系的所有记录,使用NULL值替换(只能用于已标记为NOT NULL的字段) + */ + SET_NULL("SET NULL"), - /** - * 修改包含与已删除键值有参照关系的所有记录,使用默认值替换(只能用于设定了DEFAULT的字段) - */ - SET_DEFAULT("SET DEFAULT"), + /** + * 修改包含与已删除键值有参照关系的所有记录,使用默认值替换(只能用于设定了DEFAULT的字段) + */ + SET_DEFAULT("SET DEFAULT"), - /** - * 级联删除,删除包含与已删除键值有参照关系的所有记录 - */ - CASCADE("CASCADE"); + /** + * 级联删除,删除包含与已删除键值有参照关系的所有记录 + */ + CASCADE("CASCADE"); - final String ruleName; + final String ruleName; - ForeignKeyRule(String ruleName) { - this.ruleName = ruleName; - } + ForeignKeyRule(String ruleName) { + this.ruleName = ruleName; + } - public String getRuleName() { - return ruleName; - } + public String getRuleName() { + return ruleName; + } } diff --git a/easysql-api/src/main/java/cc/carm/lib/easysql/api/enums/IndexType.java b/easysql-api/src/main/java/cc/carm/lib/easysql/api/enums/IndexType.java index 7338617..a06498c 100644 --- a/easysql-api/src/main/java/cc/carm/lib/easysql/api/enums/IndexType.java +++ b/easysql-api/src/main/java/cc/carm/lib/easysql/api/enums/IndexType.java @@ -3,39 +3,39 @@ package cc.carm.lib.easysql.api.enums; public enum IndexType { - /** - * 普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。 - *
因此,应该只为那些最经常出现在查询条件(WHERE column=)或排序条件(ORDER BY column)中的数据列创建索引。 - *
只要有可能,就应该选择一个数据最整齐、最紧凑的数据列(如一个整数类型的数据列)来创建索引。 - */ - INDEX("INDEX"), + /** + * 普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度。 + *
因此,应该只为那些最经常出现在查询条件(WHERE column=)或排序条件(ORDER BY column)中的数据列创建索引。 + *
只要有可能,就应该选择一个数据最整齐、最紧凑的数据列(如一个整数类型的数据列)来创建索引。 + */ + INDEX("INDEX"), - /** - * 唯一索引 是在表上一个或者多个字段组合建立的索引,这个或者这些字段的值组合起来在表中不可以重复,用于保证数据的唯一性。 - */ - UNIQUE_KEY("UNIQUE KEY"), + /** + * 唯一索引 是在表上一个或者多个字段组合建立的索引,这个或者这些字段的值组合起来在表中不可以重复,用于保证数据的唯一性。 + */ + UNIQUE_KEY("UNIQUE KEY"), - /** - * 主键索引 是唯一索引的特定类型。表中创建主键时自动创建的索引 。一个表只能建立一个主索引。 - */ - PRIMARY_KEY("PRIMARY KEY"), + /** + * 主键索引 是唯一索引的特定类型。表中创建主键时自动创建的索引 。一个表只能建立一个主索引。 + */ + PRIMARY_KEY("PRIMARY KEY"), - /** - * 全文索引 主要用来查找文本中的关键字,而不是直接与索引中的值相比较。 - *
请搭配 MATCH 等语句使用,而不是使用 WHERE - LIKE 。 - *
全文索引只可用于 CHAR、 VARCHAR 与 TEXT 系列类型。 - */ - FULLTEXT_INDEX("FULLTEXT"); + /** + * 全文索引 主要用来查找文本中的关键字,而不是直接与索引中的值相比较。 + *
请搭配 MATCH 等语句使用,而不是使用 WHERE - LIKE 。 + *
全文索引只可用于 CHAR、 VARCHAR 与 TEXT 系列类型。 + */ + FULLTEXT_INDEX("FULLTEXT"); - final String name; + final String name; - IndexType(String name) { - this.name = name; - } + IndexType(String name) { + this.name = name; + } - public String getName() { - return name; - } + public String getName() { + return name; + } } diff --git a/easysql-api/src/main/java/cc/carm/lib/easysql/api/enums/NumberType.java b/easysql-api/src/main/java/cc/carm/lib/easysql/api/enums/NumberType.java index 19439f1..fc446b3 100644 --- a/easysql-api/src/main/java/cc/carm/lib/easysql/api/enums/NumberType.java +++ b/easysql-api/src/main/java/cc/carm/lib/easysql/api/enums/NumberType.java @@ -2,10 +2,10 @@ package cc.carm.lib.easysql.api.enums; public enum NumberType { - TINYINT, - SMALLINT, - MEDIUMINT, - INT, - BIGINT + TINYINT, + SMALLINT, + MEDIUMINT, + INT, + BIGINT } diff --git a/easysql-api/src/main/java/cc/carm/lib/easysql/api/function/SQLExceptionHandler.java b/easysql-api/src/main/java/cc/carm/lib/easysql/api/function/SQLExceptionHandler.java index 150070d..4f15a83 100644 --- a/easysql-api/src/main/java/cc/carm/lib/easysql/api/function/SQLExceptionHandler.java +++ b/easysql-api/src/main/java/cc/carm/lib/easysql/api/function/SQLExceptionHandler.java @@ -7,6 +7,6 @@ import java.util.function.BiConsumer; @FunctionalInterface public interface SQLExceptionHandler extends BiConsumer> { - + } 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 734a40a..cf803fe 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 @@ -8,7 +8,7 @@ import java.sql.SQLException; @FunctionalInterface public interface SQLFunction { - @Nullable - R apply(@NotNull T t) throws SQLException; + @Nullable + R apply(@NotNull T t) throws SQLException; } diff --git a/easysql-api/src/main/java/cc/carm/lib/easysql/api/function/SQLHandler.java b/easysql-api/src/main/java/cc/carm/lib/easysql/api/function/SQLHandler.java index 7fdcac4..46e5b3e 100644 --- a/easysql-api/src/main/java/cc/carm/lib/easysql/api/function/SQLHandler.java +++ b/easysql-api/src/main/java/cc/carm/lib/easysql/api/function/SQLHandler.java @@ -9,15 +9,15 @@ import java.util.Objects; @FunctionalInterface public interface SQLHandler { - void accept(@NotNull T t) throws SQLException; + void accept(@NotNull T t) throws SQLException; - @NotNull - @Contract(pure = true) - default SQLHandler andThen(@NotNull SQLHandler after) { - Objects.requireNonNull(after); - return (T t) -> { - accept(t); - after.accept(t); - }; - } + @NotNull + @Contract(pure = true) + default SQLHandler andThen(@NotNull SQLHandler after) { + Objects.requireNonNull(after); + return (T t) -> { + accept(t); + after.accept(t); + }; + } } diff --git a/easysql-api/src/main/java/cc/carm/lib/easysql/api/function/defaults/DefaultSQLExceptionHandler.java b/easysql-api/src/main/java/cc/carm/lib/easysql/api/function/defaults/DefaultSQLExceptionHandler.java index 9e3efca..eb5fa1d 100644 --- a/easysql-api/src/main/java/cc/carm/lib/easysql/api/function/defaults/DefaultSQLExceptionHandler.java +++ b/easysql-api/src/main/java/cc/carm/lib/easysql/api/function/defaults/DefaultSQLExceptionHandler.java @@ -11,47 +11,46 @@ import java.util.logging.Logger; public class DefaultSQLExceptionHandler implements SQLExceptionHandler { - private static @Nullable SQLExceptionHandler customDefaultHandler = null; + private static @Nullable SQLExceptionHandler customDefaultHandler = null; + private final Logger logger; - public static void setCustomHandler(@Nullable SQLExceptionHandler handler) { - DefaultSQLExceptionHandler.customDefaultHandler = handler; - } + public DefaultSQLExceptionHandler(Logger logger) { + this.logger = logger; + } - public static @Nullable SQLExceptionHandler getCustomHandler() { - return customDefaultHandler; - } + public static @Nullable SQLExceptionHandler getCustomHandler() { + return customDefaultHandler; + } - public static @NotNull SQLExceptionHandler get(Logger logger) { - if (getCustomHandler() != null) return getCustomHandler(); - else return new DefaultSQLExceptionHandler(logger); - } + public static void setCustomHandler(@Nullable SQLExceptionHandler handler) { + DefaultSQLExceptionHandler.customDefaultHandler = handler; + } - private final Logger logger; + public static @NotNull SQLExceptionHandler get(Logger logger) { + if (getCustomHandler() != null) return getCustomHandler(); + else return new DefaultSQLExceptionHandler(logger); + } - public DefaultSQLExceptionHandler(Logger logger) { - this.logger = logger; - } + protected Logger getLogger() { + return logger; + } - protected Logger getLogger() { - return logger; - } + @Override + public void accept(SQLException exception, SQLAction sqlAction) { + if (sqlAction instanceof SQLUpdateBatchAction) { - @Override - public void accept(SQLException exception, SQLAction sqlAction) { - if (sqlAction instanceof SQLUpdateBatchAction) { + getLogger().severe("Error when execute SQLs : "); + int i = 1; + for (String content : ((SQLUpdateBatchAction) sqlAction).getSQLContents()) { + getLogger().severe(String.format("#%d {%s}", i, content)); + i++; + } - getLogger().severe("Error when execute SQLs : "); - int i = 1; - for (String content : ((SQLUpdateBatchAction) sqlAction).getSQLContents()) { - getLogger().severe("#" + i + " {" + content + "}"); - i++; - } - - } else { - getLogger().severe("Error when execute { " + sqlAction.getSQLContent() + " }"); - } - exception.printStackTrace(); - } + } else { + getLogger().severe("Error when execute { " + sqlAction.getSQLContent() + " }"); + } + exception.printStackTrace(); + } } diff --git a/easysql-api/src/main/java/cc/carm/lib/easysql/api/util/TimeDateUtils.java b/easysql-api/src/main/java/cc/carm/lib/easysql/api/util/TimeDateUtils.java index e34378b..9ee8044 100644 --- a/easysql-api/src/main/java/cc/carm/lib/easysql/api/util/TimeDateUtils.java +++ b/easysql-api/src/main/java/cc/carm/lib/easysql/api/util/TimeDateUtils.java @@ -6,7 +6,7 @@ import java.text.SimpleDateFormat; import java.util.Date; public class TimeDateUtils { - public static DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + public static final DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); public TimeDateUtils() { } diff --git a/easysql-impl/src/main/java/cc/carm/lib/easysql/action/AbstractSQLAction.java b/easysql-impl/src/main/java/cc/carm/lib/easysql/action/AbstractSQLAction.java index ad1830f..f8009a3 100644 --- a/easysql-impl/src/main/java/cc/carm/lib/easysql/action/AbstractSQLAction.java +++ b/easysql-impl/src/main/java/cc/carm/lib/easysql/action/AbstractSQLAction.java @@ -7,78 +7,80 @@ import cc.carm.lib.easysql.manager.SQLManagerImpl; import org.jetbrains.annotations.NotNull; import java.sql.SQLException; +import java.util.Objects; import java.util.UUID; public abstract class AbstractSQLAction implements SQLAction { - private final @NotNull SQLManagerImpl sqlManager; + protected final @NotNull String sqlContent; + private final @NotNull SQLManagerImpl sqlManager; + private final @NotNull UUID uuid; + private final long createTime; - private final @NotNull UUID uuid; - private final long createTime; + public AbstractSQLAction(@NotNull SQLManagerImpl manager, @NotNull String sql) { + this(manager, sql, System.currentTimeMillis()); + } - protected @NotNull String sqlContent; + public AbstractSQLAction(@NotNull SQLManagerImpl manager, @NotNull String sql, @NotNull UUID uuid) { + this(manager, sql, uuid, System.currentTimeMillis()); + } - public AbstractSQLAction(@NotNull SQLManagerImpl manager, @NotNull String sql) { - this(manager, sql, System.currentTimeMillis()); - } + public AbstractSQLAction(@NotNull SQLManagerImpl manager, @NotNull String sql, long createTime) { + this(manager, sql, UUID.randomUUID(), createTime); + } - public AbstractSQLAction(@NotNull SQLManagerImpl manager, @NotNull String sql, @NotNull UUID uuid) { - this(manager, sql, uuid, System.currentTimeMillis()); - } - - public AbstractSQLAction(@NotNull SQLManagerImpl manager, @NotNull String sql, long createTime) { - this(manager, sql, UUID.randomUUID(), createTime); - } - - public AbstractSQLAction(@NotNull SQLManagerImpl manager, @NotNull String sql, - @NotNull UUID uuid, long createTime) { - this.sqlManager = manager; - this.sqlContent = sql; - this.uuid = uuid; - this.createTime = createTime; - } + public AbstractSQLAction(@NotNull SQLManagerImpl manager, @NotNull String sql, + @NotNull UUID uuid, long createTime) { + Objects.requireNonNull(manager); + Objects.requireNonNull(sql); + Objects.requireNonNull(uuid); + this.sqlManager = manager; + this.sqlContent = sql; + this.uuid = uuid; + this.createTime = createTime; + } - @Override - public @NotNull UUID getActionUUID() { - return this.uuid; - } + @Override + public @NotNull UUID getActionUUID() { + return this.uuid; + } - @Override - public @NotNull String getShortID() { - return getActionUUID().toString().substring(0, 8); - } + @Override + public @NotNull String getShortID() { + return getActionUUID().toString().substring(0, 8); + } - @Override - public long getCreateTime() { - return this.createTime; - } + @Override + public long getCreateTime() { + return this.createTime; + } - @Override - public @NotNull String getSQLContent() { - return this.sqlContent.trim(); - } + @Override + public @NotNull String getSQLContent() { + return this.sqlContent.trim(); + } - @Override - public @NotNull SQLManagerImpl getManager() { - return this.sqlManager; - } + @Override + public @NotNull SQLManagerImpl getManager() { + return this.sqlManager; + } - protected void outputDebugMessage() { - getManager().debug("# " + getShortID() + " -> { " + getSQLContent() + " }"); - } + protected void outputDebugMessage() { + getManager().debug("# " + getShortID() + " -> { " + getSQLContent() + " }"); + } - @Override - @SuppressWarnings("FutureReturnValueIgnored") - public void executeAsync(SQLHandler success, SQLExceptionHandler failure) { - getManager().getExecutorPool().submit(() -> { - try { - T returnedValue = execute(); - if (success != null) success.accept(returnedValue); - } catch (SQLException e) { - handleException(failure, e); - } - }); - } + @Override + @SuppressWarnings("FutureReturnValueIgnored") + public void executeAsync(SQLHandler success, SQLExceptionHandler failure) { + getManager().getExecutorPool().submit(() -> { + try { + T returnedValue = execute(); + if (success != null) success.accept(returnedValue); + } catch (SQLException e) { + handleException(failure, e); + } + }); + } } diff --git a/easysql-impl/src/main/java/cc/carm/lib/easysql/action/PreparedSQLBatchUpdateActionImpl.java b/easysql-impl/src/main/java/cc/carm/lib/easysql/action/PreparedSQLBatchUpdateActionImpl.java index 1a25bd3..351a7ef 100644 --- a/easysql-impl/src/main/java/cc/carm/lib/easysql/action/PreparedSQLBatchUpdateActionImpl.java +++ b/easysql-impl/src/main/java/cc/carm/lib/easysql/action/PreparedSQLBatchUpdateActionImpl.java @@ -15,60 +15,60 @@ import java.util.List; import java.util.stream.Collectors; public class PreparedSQLBatchUpdateActionImpl - extends AbstractSQLAction> - implements PreparedSQLUpdateBatchAction { + extends AbstractSQLAction> + implements PreparedSQLUpdateBatchAction { - boolean returnKeys = false; - List allParams; + boolean returnKeys = false; + List allParams; - public PreparedSQLBatchUpdateActionImpl(@NotNull SQLManagerImpl manager, @NotNull String sql) { - super(manager, sql); - this.allParams = new ArrayList<>(); - } + public PreparedSQLBatchUpdateActionImpl(@NotNull SQLManagerImpl manager, @NotNull String sql) { + super(manager, sql); + this.allParams = new ArrayList<>(); + } - @Override - public PreparedSQLUpdateBatchAction setAllParams(Iterable allParams) { - List paramsList = new ArrayList<>(); - allParams.forEach(paramsList::add); - this.allParams = paramsList; - return this; - } + @Override + public PreparedSQLUpdateBatchAction setAllParams(Iterable allParams) { + List paramsList = new ArrayList<>(); + allParams.forEach(paramsList::add); + this.allParams = paramsList; + return this; + } - @Override - public PreparedSQLUpdateBatchAction addParamsBatch(Object... params) { - this.allParams.add(params); - return this; - } + @Override + public PreparedSQLUpdateBatchAction addParamsBatch(Object... params) { + this.allParams.add(params); + return this; + } - @Override - public PreparedSQLUpdateBatchAction setReturnGeneratedKeys(boolean returnGeneratedKey) { - this.returnKeys = returnGeneratedKey; - return this; - } + @Override + public PreparedSQLUpdateBatchAction setReturnGeneratedKeys(boolean returnGeneratedKey) { + this.returnKeys = returnGeneratedKey; + return this; + } - @Override - public @NotNull List execute() throws SQLException { - try (Connection connection = getManager().getConnection()) { - try (PreparedStatement statement = StatementUtil.createPrepareStatementBatch( - connection, getSQLContent(), allParams, returnKeys - )) { + @Override + public @NotNull List execute() throws SQLException { + try (Connection connection = getManager().getConnection()) { + try (PreparedStatement statement = StatementUtil.createPrepareStatementBatch( + connection, getSQLContent(), allParams, returnKeys + )) { - outputDebugMessage(); - int[] executed = statement.executeBatch(); + outputDebugMessage(); + int[] executed = statement.executeBatch(); - if (!returnKeys) return Arrays.stream(executed).boxed().collect(Collectors.toList()); - else { - try (ResultSet resultSet = statement.getGeneratedKeys()) { - List generatedKeys = new ArrayList<>(); - while (resultSet.next()) { - generatedKeys.add(resultSet.getInt(1)); - } - return generatedKeys; - } - } - } + if (!returnKeys) return Arrays.stream(executed).boxed().collect(Collectors.toList()); + else { + try (ResultSet resultSet = statement.getGeneratedKeys()) { + List generatedKeys = new ArrayList<>(); + while (resultSet.next()) { + generatedKeys.add(resultSet.getInt(1)); + } + return generatedKeys; + } + } + } - } - } + } + } } diff --git a/easysql-impl/src/main/java/cc/carm/lib/easysql/action/PreparedSQLUpdateActionImpl.java b/easysql-impl/src/main/java/cc/carm/lib/easysql/action/PreparedSQLUpdateActionImpl.java index 2885cf1..8f5c779 100644 --- a/easysql-impl/src/main/java/cc/carm/lib/easysql/action/PreparedSQLUpdateActionImpl.java +++ b/easysql-impl/src/main/java/cc/carm/lib/easysql/action/PreparedSQLUpdateActionImpl.java @@ -14,64 +14,64 @@ import java.util.ArrayList; import java.util.List; public class PreparedSQLUpdateActionImpl - extends SQLUpdateActionImpl - implements PreparedSQLUpdateAction { + extends SQLUpdateActionImpl + implements PreparedSQLUpdateAction { - Object[] params; + Object[] params; - public PreparedSQLUpdateActionImpl(@NotNull SQLManagerImpl manager, @NotNull String sql) { - this(manager, sql, (Object[]) null); - } + public PreparedSQLUpdateActionImpl(@NotNull SQLManagerImpl manager, @NotNull String sql) { + this(manager, sql, (Object[]) null); + } - public PreparedSQLUpdateActionImpl(@NotNull SQLManagerImpl manager, @NotNull String sql, - @Nullable List params) { - this(manager, sql, params == null ? null : params.toArray()); - } + public PreparedSQLUpdateActionImpl(@NotNull SQLManagerImpl manager, @NotNull String sql, + @Nullable List params) { + this(manager, sql, params == null ? null : params.toArray()); + } - public PreparedSQLUpdateActionImpl(@NotNull SQLManagerImpl manager, @NotNull String sql, - @Nullable Object[] params) { - super(manager, sql); - this.params = params; - } + public PreparedSQLUpdateActionImpl(@NotNull SQLManagerImpl manager, @NotNull String sql, + @Nullable Object[] params) { + super(manager, sql); + this.params = params; + } - @Override - public PreparedSQLUpdateActionImpl setParams(Object... params) { - this.params = params; - return this; - } + @Override + public PreparedSQLUpdateActionImpl setParams(Object... params) { + this.params = params; + return this; + } - @Override - public PreparedSQLUpdateAction setParams(@Nullable Iterable params) { - if (params == null) { - return setParams((Object[]) null); - } else { - List paramsList = new ArrayList<>(); - params.forEach(paramsList::add); - return setParams(paramsList.toArray()); - } - } + @Override + public PreparedSQLUpdateAction setParams(@Nullable Iterable params) { + if (params == null) { + return setParams((Object[]) null); + } else { + List paramsList = new ArrayList<>(); + params.forEach(paramsList::add); + return setParams(paramsList.toArray()); + } + } - @Override - public @NotNull Integer execute() throws SQLException { - try (Connection connection = getManager().getConnection()) { + @Override + public @NotNull Integer execute() throws SQLException { + try (Connection connection = getManager().getConnection()) { - try (PreparedStatement statement = StatementUtil.createPrepareStatement( - connection, getSQLContent(), params, returnGeneratedKeys - )) { + try (PreparedStatement statement = StatementUtil.createPrepareStatement( + connection, getSQLContent(), params, returnGeneratedKeys + )) { - outputDebugMessage(); + outputDebugMessage(); - int changes = statement.executeUpdate(); - if (!returnGeneratedKeys) return changes; - else { - try (ResultSet resultSet = statement.getGeneratedKeys()) { - return resultSet.next() ? resultSet.getInt(1) : -1; - } - } + int changes = statement.executeUpdate(); + if (!returnGeneratedKeys) return changes; + else { + try (ResultSet resultSet = statement.getGeneratedKeys()) { + return resultSet.next() ? resultSet.getInt(1) : -1; + } + } - } - } + } + } - } + } } diff --git a/easysql-impl/src/main/java/cc/carm/lib/easysql/action/SQLUpdateActionImpl.java b/easysql-impl/src/main/java/cc/carm/lib/easysql/action/SQLUpdateActionImpl.java index db17437..b399708 100644 --- a/easysql-impl/src/main/java/cc/carm/lib/easysql/action/SQLUpdateActionImpl.java +++ b/easysql-impl/src/main/java/cc/carm/lib/easysql/action/SQLUpdateActionImpl.java @@ -10,39 +10,39 @@ import java.sql.SQLException; import java.sql.Statement; public class SQLUpdateActionImpl - extends AbstractSQLAction - implements SQLUpdateAction { + extends AbstractSQLAction + implements SQLUpdateAction { - boolean returnGeneratedKeys = false; + boolean returnGeneratedKeys = false; - public SQLUpdateActionImpl(@NotNull SQLManagerImpl manager, @NotNull String sql) { - super(manager, sql); - } + public SQLUpdateActionImpl(@NotNull SQLManagerImpl manager, @NotNull String sql) { + super(manager, sql); + } - @Override - public @NotNull Integer execute() throws SQLException { - try (Connection connection = getManager().getConnection()) { - try (Statement statement = connection.createStatement()) { - outputDebugMessage(); + @Override + public @NotNull Integer execute() throws SQLException { + try (Connection connection = getManager().getConnection()) { + try (Statement statement = connection.createStatement()) { + outputDebugMessage(); - if (!returnGeneratedKeys) { - return statement.executeUpdate(getSQLContent()); - } else { - statement.executeUpdate(getSQLContent(), Statement.RETURN_GENERATED_KEYS); + if (!returnGeneratedKeys) { + return statement.executeUpdate(getSQLContent()); + } else { + statement.executeUpdate(getSQLContent(), Statement.RETURN_GENERATED_KEYS); - try (ResultSet resultSet = statement.getGeneratedKeys()) { - return resultSet.next() ? resultSet.getInt(1) : -1; - } - } - } - } - } + try (ResultSet resultSet = statement.getGeneratedKeys()) { + return resultSet.next() ? resultSet.getInt(1) : -1; + } + } + } + } + } - @Override - public SQLUpdateAction setReturnGeneratedKey(boolean returnGeneratedKey) { - this.returnGeneratedKeys = returnGeneratedKey; - return this; - } + @Override + public SQLUpdateAction setReturnGeneratedKey(boolean returnGeneratedKey) { + this.returnGeneratedKeys = returnGeneratedKey; + return this; + } } 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 e3c822b..aabbe06 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 @@ -14,53 +14,53 @@ import java.util.Objects; import java.util.stream.Collectors; public class SQLUpdateBatchActionImpl - extends AbstractSQLAction> - implements SQLUpdateBatchAction { + extends AbstractSQLAction> + implements SQLUpdateBatchAction { - List sqlContents = new ArrayList<>(); + protected final 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 List getSQLContents() { - return this.sqlContents; - } + @Override + public @NotNull List getSQLContents() { + return this.sqlContents; + } - @Override - public SQLUpdateBatchAction addBatch(@NotNull String sql) { - Objects.requireNonNull(sql, "sql could not be null"); - this.sqlContents.add(sql); - return this; - } + @Override + public SQLUpdateBatchAction addBatch(@NotNull String sql) { + Objects.requireNonNull(sql, "sql could not be null"); + this.sqlContents.add(sql); + return this; + } - @Override - public @NotNull List execute() throws SQLException { - try (Connection connection = getManager().getConnection()) { + @Override + public @NotNull List execute() throws SQLException { + try (Connection connection = getManager().getConnection()) { - try (Statement statement = connection.createStatement()) { - outputDebugMessage(); + try (Statement statement = connection.createStatement()) { + outputDebugMessage(); - for (String content : this.sqlContents) { - statement.addBatch(content); - } + for (String content : this.sqlContents) { + statement.addBatch(content); + } - int[] executed = statement.executeBatch(); + int[] executed = statement.executeBatch(); - return Arrays.stream(executed).boxed().collect(Collectors.toList()); - } + return Arrays.stream(executed).boxed().collect(Collectors.toList()); + } - } - } + } + } - @Override - protected void outputDebugMessage() { - getManager().debug("# " + getShortID() + " -> ["); - for (String content : getSQLContents()) getManager().debug(" { " + content + " }"); - getManager().debug("]"); + @Override + protected void outputDebugMessage() { + getManager().debug("# " + getShortID() + " -> ["); + for (String content : getSQLContents()) getManager().debug(String.format(" { %s }", content)); + getManager().debug("]"); - } + } } diff --git a/easysql-impl/src/main/java/cc/carm/lib/easysql/action/query/PreparedQueryActionImpl.java b/easysql-impl/src/main/java/cc/carm/lib/easysql/action/query/PreparedQueryActionImpl.java index 6427540..4a42dff 100644 --- a/easysql-impl/src/main/java/cc/carm/lib/easysql/action/query/PreparedQueryActionImpl.java +++ b/easysql-impl/src/main/java/cc/carm/lib/easysql/action/query/PreparedQueryActionImpl.java @@ -16,71 +16,71 @@ import java.util.function.Consumer; public class PreparedQueryActionImpl extends QueryActionImpl implements PreparedQueryAction { - Consumer handler; - Object[] params; + Consumer handler; + Object[] params; - public PreparedQueryActionImpl(@NotNull SQLManagerImpl manager, @NotNull String sql) { - super(manager, sql); - } + public PreparedQueryActionImpl(@NotNull SQLManagerImpl manager, @NotNull String sql) { + super(manager, sql); + } - @Override - public PreparedQueryActionImpl setParams(@Nullable Object... params) { - this.params = params; - return this; - } + @Override + public PreparedQueryActionImpl setParams(@Nullable Object... params) { + this.params = params; + return this; + } - @Override - public PreparedQueryActionImpl setParams(@Nullable Iterable params) { - if (params == null) { - return setParams((Object[]) null); - } else { - List paramsList = new ArrayList<>(); - params.forEach(paramsList::add); - return setParams(paramsList.toArray()); - } - } + @Override + public PreparedQueryActionImpl setParams(@Nullable Iterable params) { + if (params == null) { + return setParams((Object[]) null); + } else { + List paramsList = new ArrayList<>(); + params.forEach(paramsList::add); + return setParams(paramsList.toArray()); + } + } - @Override - public PreparedQueryActionImpl handleStatement(@Nullable Consumer statement) { - this.handler = statement; - return this; - } + @Override + public PreparedQueryActionImpl handleStatement(@Nullable Consumer statement) { + this.handler = statement; + return this; + } - @Override - public @NotNull SQLQueryImpl execute() throws SQLException { - outputDebugMessage(); + @Override + public @NotNull SQLQueryImpl execute() throws SQLException { + outputDebugMessage(); - Connection connection = getManager().getConnection(); - PreparedStatement preparedStatement; - try { - if (handler == null) { - preparedStatement = StatementUtil.createPrepareStatement(connection, getSQLContent(), this.params); - } else { - preparedStatement = connection.prepareStatement(getSQLContent()); - handler.accept(preparedStatement); - } - } catch (SQLException exception) { - connection.close(); - throw exception; - } + Connection connection = getManager().getConnection(); + PreparedStatement preparedStatement; + try { + if (handler == null) { + preparedStatement = StatementUtil.createPrepareStatement(connection, getSQLContent(), this.params); + } else { + preparedStatement = connection.prepareStatement(getSQLContent()); + handler.accept(preparedStatement); + } + } catch (SQLException exception) { + connection.close(); + throw exception; + } - try { - long executeTime = System.currentTimeMillis(); - SQLQueryImpl query = new SQLQueryImpl( - getManager(), this, - connection, preparedStatement, - preparedStatement.executeQuery(), - executeTime - ); - getManager().getActiveQuery().put(getActionUUID(), query); + try { + long executeTime = System.currentTimeMillis(); + SQLQueryImpl query = new SQLQueryImpl( + getManager(), this, + connection, preparedStatement, + preparedStatement.executeQuery(), + executeTime + ); + getManager().getActiveQuery().put(getActionUUID(), query); - return query; - } catch (SQLException exception) { - preparedStatement.close(); - connection.close(); - throw exception; - } + return query; + } catch (SQLException exception) { + preparedStatement.close(); + connection.close(); + throw exception; + } - } + } } diff --git a/easysql-impl/src/main/java/cc/carm/lib/easysql/action/query/QueryActionImpl.java b/easysql-impl/src/main/java/cc/carm/lib/easysql/action/query/QueryActionImpl.java index f96cf43..276a5de 100644 --- a/easysql-impl/src/main/java/cc/carm/lib/easysql/action/query/QueryActionImpl.java +++ b/easysql-impl/src/main/java/cc/carm/lib/easysql/action/query/QueryActionImpl.java @@ -15,49 +15,49 @@ import java.sql.Statement; public class QueryActionImpl extends AbstractSQLAction implements QueryAction { - public QueryActionImpl(@NotNull SQLManagerImpl manager, @NotNull String sql) { - super(manager, sql); - } + public QueryActionImpl(@NotNull SQLManagerImpl manager, @NotNull String sql) { + super(manager, sql); + } - @Override - public @NotNull SQLQueryImpl execute() throws SQLException { + @Override + public @NotNull SQLQueryImpl execute() throws SQLException { - Connection connection = getManager().getConnection(); - Statement statement; + Connection connection = getManager().getConnection(); + Statement statement; - try { - statement = connection.createStatement(); - } catch (SQLException ex) { - connection.close(); - throw ex; - } - - outputDebugMessage(); - try { - long executeTime = System.currentTimeMillis(); - SQLQueryImpl query = new SQLQueryImpl( - getManager(), this, - connection, statement, - statement.executeQuery(getSQLContent()), - executeTime - ); - getManager().getActiveQuery().put(getActionUUID(), query); + try { + statement = connection.createStatement(); + } catch (SQLException ex) { + connection.close(); + throw ex; + } - return query; - } catch (SQLException exception) { - statement.close(); - connection.close(); - throw exception; - } - } + outputDebugMessage(); + try { + long executeTime = System.currentTimeMillis(); + SQLQueryImpl query = new SQLQueryImpl( + getManager(), this, + connection, statement, + statement.executeQuery(getSQLContent()), + executeTime + ); + getManager().getActiveQuery().put(getActionUUID(), query); + + return query; + } catch (SQLException exception) { + statement.close(); + connection.close(); + throw exception; + } + } - @Override - public void executeAsync(SQLHandler success, SQLExceptionHandler failure) { - try (SQLQueryImpl query = execute()) { - if (success != null) success.accept(query); - } catch (SQLException exception) { - handleException(failure, exception); - } - } + @Override + public void executeAsync(SQLHandler success, SQLExceptionHandler failure) { + try (SQLQueryImpl query = execute()) { + if (success != null) success.accept(query); + } catch (SQLException exception) { + handleException(failure, exception); + } + } } diff --git a/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/AbstractSQLBuilder.java b/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/AbstractSQLBuilder.java index 2b1943e..ee7e3c1 100644 --- a/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/AbstractSQLBuilder.java +++ b/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/AbstractSQLBuilder.java @@ -4,11 +4,15 @@ import cc.carm.lib.easysql.api.SQLBuilder; import cc.carm.lib.easysql.manager.SQLManagerImpl; import org.jetbrains.annotations.NotNull; +import java.util.Objects; + public abstract class AbstractSQLBuilder implements SQLBuilder { - @NotNull SQLManagerImpl sqlManager; + @NotNull + final SQLManagerImpl sqlManager; public AbstractSQLBuilder(@NotNull SQLManagerImpl manager) { + Objects.requireNonNull(manager, "SQLManager must not be null"); this.sqlManager = manager; } 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 fff5d24..b13ac7b 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,6 +53,7 @@ public abstract class AbstractConditionalBuilder or = or <) "); addCondition(withBackQuote(columnName) + " " + operator + " ?"); this.conditionParams.add(queryValue); return getThis(); @@ -62,6 +63,7 @@ public abstract class AbstractConditionalBuilder> - implements DeleteBuilder { + extends AbstractConditionalBuilder> + implements DeleteBuilder { - String tableName; + protected final String tableName; - public DeleteBuilderImpl(@NotNull SQLManagerImpl manager, @NotNull String tableName) { - super(manager); - this.tableName = tableName; - } + public DeleteBuilderImpl(@NotNull SQLManagerImpl manager, @NotNull String tableName) { + super(manager); + Objects.requireNonNull(tableName); + this.tableName = tableName; + } - @Override - public PreparedSQLUpdateAction build() { + @Override + public PreparedSQLUpdateAction build() { - StringBuilder sqlBuilder = new StringBuilder(); + StringBuilder sqlBuilder = new StringBuilder(); - sqlBuilder.append("DELETE FROM ").append(withBackQuote(getTableName())); + sqlBuilder.append("DELETE FROM ").append(withBackQuote(getTableName())); - if (hasConditions()) sqlBuilder.append(" ").append(buildConditionSQL()); - if (limit > 0) sqlBuilder.append(" ").append(buildLimitSQL()); + if (hasConditions()) sqlBuilder.append(" ").append(buildConditionSQL()); + if (limit > 0) sqlBuilder.append(" ").append(buildLimitSQL()); - return new PreparedSQLUpdateActionImpl( - getManager(), sqlBuilder.toString(), - hasConditionParams() ? getConditionParams() : null - ); - } + return new PreparedSQLUpdateActionImpl( + getManager(), sqlBuilder.toString(), + hasConditionParams() ? getConditionParams() : null + ); + } - @Override - public String getTableName() { - return tableName; - } + @Override + public String getTableName() { + return tableName; + } - @Override - protected DeleteBuilderImpl getThis() { - return this; - } + @Override + protected DeleteBuilderImpl getThis() { + return this; + } } diff --git a/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/impl/InsertBuilderImpl.java b/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/impl/InsertBuilderImpl.java index 1688f23..396d42f 100644 --- a/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/impl/InsertBuilderImpl.java +++ b/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/impl/InsertBuilderImpl.java @@ -8,44 +8,50 @@ import org.jetbrains.annotations.NotNull; import java.util.Iterator; import java.util.List; +import java.util.Objects; import static cc.carm.lib.easysql.api.SQLBuilder.withBackQuote; public abstract class InsertBuilderImpl> - extends AbstractSQLBuilder implements InsertBuilder { + extends AbstractSQLBuilder implements InsertBuilder { - String tableName; + protected final String tableName; - public InsertBuilderImpl(@NotNull SQLManagerImpl manager, String tableName) { - super(manager); - this.tableName = tableName; - } + public InsertBuilderImpl(@NotNull SQLManagerImpl manager, String tableName) { + super(manager); + Objects.requireNonNull(tableName); + this.tableName = tableName; + } - protected static String buildSQL(String tableName, List columnNames) { - int valueLength = columnNames.size(); - StringBuilder sqlBuilder = new StringBuilder(); + protected static String buildSQL(String tableName, List columnNames) { + return buildSQL("INSERT IGNORE INTO", tableName, columnNames); + } - sqlBuilder.append("INSERT IGNORE INTO ").append(withBackQuote(tableName)).append("("); - Iterator iterator = columnNames.iterator(); - while (iterator.hasNext()) { - sqlBuilder.append(withBackQuote(iterator.next())); - if (iterator.hasNext()) sqlBuilder.append(", "); - } + protected static String buildSQL(String sqlPrefix, String tableName, List columnNames) { + int valueLength = columnNames.size(); + StringBuilder sqlBuilder = new StringBuilder(); - sqlBuilder.append(") VALUES ("); + sqlBuilder.append(sqlPrefix).append(" ").append(withBackQuote(tableName)).append("("); + Iterator iterator = columnNames.iterator(); + while (iterator.hasNext()) { + sqlBuilder.append(withBackQuote(iterator.next())); + if (iterator.hasNext()) sqlBuilder.append(", "); + } - for (int i = 0; i < valueLength; i++) { - sqlBuilder.append("?"); - if (i != valueLength - 1) { - sqlBuilder.append(", "); - } - } - sqlBuilder.append(")"); - return sqlBuilder.toString(); - } + sqlBuilder.append(") VALUES ("); - @Override - public String getTableName() { - return tableName; - } + for (int i = 0; i < valueLength; i++) { + sqlBuilder.append("?"); + if (i != valueLength - 1) { + sqlBuilder.append(", "); + } + } + sqlBuilder.append(")"); + return sqlBuilder.toString(); + } + + @Override + public String getTableName() { + return tableName; + } } diff --git a/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/impl/ReplaceBuilderImpl.java b/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/impl/ReplaceBuilderImpl.java index ec9d885..8cf4b1f 100644 --- a/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/impl/ReplaceBuilderImpl.java +++ b/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/impl/ReplaceBuilderImpl.java @@ -6,46 +6,24 @@ import cc.carm.lib.easysql.builder.AbstractSQLBuilder; import cc.carm.lib.easysql.manager.SQLManagerImpl; import org.jetbrains.annotations.NotNull; -import java.util.Iterator; import java.util.List; -import static cc.carm.lib.easysql.api.SQLBuilder.withBackQuote; - public abstract class ReplaceBuilderImpl> - extends AbstractSQLBuilder implements ReplaceBuilder { + extends AbstractSQLBuilder implements ReplaceBuilder { - String tableName; + protected final @NotNull String tableName; - public ReplaceBuilderImpl(@NotNull SQLManagerImpl manager, String tableName) { - super(manager); - this.tableName = tableName; - } + public ReplaceBuilderImpl(@NotNull SQLManagerImpl manager, @NotNull String tableName) { + super(manager); + this.tableName = tableName; + } - protected static String buildSQL(String tableName, List columnNames) { - int valueLength = columnNames.size(); - StringBuilder sqlBuilder = new StringBuilder(); + protected static String buildSQL(String tableName, List columnNames) { + return InsertBuilderImpl.buildSQL("REPLACE INTO", tableName, columnNames); + } - sqlBuilder.append("REPLACE INTO ").append(withBackQuote(tableName)).append("("); - Iterator iterator = columnNames.iterator(); - while (iterator.hasNext()) { - sqlBuilder.append(withBackQuote(iterator.next())); - if (iterator.hasNext()) sqlBuilder.append(", "); - } - - sqlBuilder.append(") VALUES ("); - - for (int i = 0; i < valueLength; i++) { - sqlBuilder.append("?"); - if (i != valueLength - 1) { - sqlBuilder.append(", "); - } - } - sqlBuilder.append(")"); - return sqlBuilder.toString(); - } - - @Override - public String getTableName() { - return tableName; - } + @Override + public @NotNull String getTableName() { + return tableName; + } } diff --git a/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/impl/TableAlterBuilderImpl.java b/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/impl/TableAlterBuilderImpl.java index 4039b66..1952f48 100644 --- a/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/impl/TableAlterBuilderImpl.java +++ b/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/impl/TableAlterBuilderImpl.java @@ -16,121 +16,138 @@ import static cc.carm.lib.easysql.api.SQLBuilder.withQuote; public class TableAlterBuilderImpl extends AbstractSQLBuilder implements TableAlterBuilder { - protected final @NotNull String tableName; + protected final @NotNull String tableName; - public TableAlterBuilderImpl(@NotNull SQLManagerImpl manager, @NotNull String tableName) { - super(manager); - this.tableName = tableName; - } + public TableAlterBuilderImpl(@NotNull SQLManagerImpl manager, @NotNull String tableName) { + super(manager); + this.tableName = tableName; + } - public @NotNull String getTableName() { - return tableName; - } + public @NotNull String getTableName() { + return tableName; + } - @Override - public SQLAction renameTo(@NotNull String newTableName) { - Objects.requireNonNull(newTableName, "table name could not be null"); - return new SQLUpdateActionImpl(getManager(), - "ALTER TABLE " + withBackQuote(getTableName()) + " RENAME TO " + withBackQuote(newTableName) + "" - ); - } + @Override + public SQLAction renameTo(@NotNull String newTableName) { + Objects.requireNonNull(newTableName, "table name could not be null"); + return new SQLUpdateActionImpl(getManager(), + "ALTER TABLE " + withBackQuote(tableName) + " RENAME TO " + withBackQuote(newTableName) + ); + } - @Override - public SQLAction changeComment(@NotNull String newTableComment) { - return new SQLUpdateActionImpl(getManager(), - "ALTER TABLE " + withBackQuote(getTableName()) + " COMMENT " + withQuote(newTableComment) - ); - } + @Override + public SQLAction changeComment(@NotNull String newTableComment) { + Objects.requireNonNull(newTableComment, "table comment could not be null"); + return new SQLUpdateActionImpl(getManager(), + "ALTER TABLE " + withBackQuote(getTableName()) + " COMMENT " + withQuote(newTableComment) + ); + } - @Override - public SQLAction setAutoIncrementIndex(int index) { - return new SQLUpdateActionImpl(getManager(), - "ALTER TABLE " + withBackQuote(getTableName()) + " AUTO_INCREMENT=" + index - ); - } + @Override + public SQLAction setAutoIncrementIndex(int index) { + return new SQLUpdateActionImpl(getManager(), + "ALTER TABLE " + withBackQuote(getTableName()) + " AUTO_INCREMENT=" + index + ); + } - @Override - public SQLAction addIndex(@NotNull IndexType indexType, @NotNull String indexName, @NotNull String columnName, @NotNull String... moreColumns) { - return createAction( - "ALTER TABLE " + withBackQuote(getTableName()) + " ADD " - + TableCreateBuilderImpl.buildIndexSettings(indexType, indexName, columnName, moreColumns) - ); - } + @Override + public SQLAction addIndex(@NotNull IndexType indexType, @Nullable String indexName, + @NotNull String columnName, @NotNull String... moreColumns) { + Objects.requireNonNull(indexType, "indexType could not be null"); + Objects.requireNonNull(columnName, "column names could not be null"); + Objects.requireNonNull(moreColumns, "column names could not be null"); + return createAction( + "ALTER TABLE " + withBackQuote(getTableName()) + " ADD " + + TableCreateBuilderImpl.buildIndexSettings(indexType, indexName, columnName, moreColumns) + ); + } - @Override - public SQLAction dropIndex(@NotNull String indexName) { - return createAction( - "ALTER TABLE " + withBackQuote(getTableName()) + " DROP INDEX " + withBackQuote(indexName) - ); - } + @Override + public SQLAction dropIndex(@NotNull String indexName) { + Objects.requireNonNull(indexName, "indexName could not be null"); + return createAction( + "ALTER TABLE " + withBackQuote(getTableName()) + " DROP INDEX " + withBackQuote(indexName) + ); + } - @Override - public SQLAction dropForeignKey(@NotNull String keySymbol) { - return createAction( - "ALTER TABLE " + withBackQuote(getTableName()) + " DROP FOREIGN KEY " + withBackQuote(keySymbol) - ); - } + @Override + public SQLAction dropForeignKey(@NotNull String keySymbol) { + Objects.requireNonNull(keySymbol, "keySymbol could not be null"); + return createAction( + "ALTER TABLE " + withBackQuote(getTableName()) + " DROP FOREIGN KEY " + withBackQuote(keySymbol) + ); + } - @Override - public SQLAction dropPrimaryKey() { - return createAction( - "ALTER TABLE " + withBackQuote(getTableName()) + " DROP PRIMARY KEY" - ); - } + @Override + public SQLAction dropPrimaryKey() { + return createAction( + "ALTER TABLE " + withBackQuote(getTableName()) + " DROP PRIMARY KEY" + ); + } - @Override - public SQLAction addColumn(@NotNull String columnName, @NotNull String settings, @Nullable String afterColumn) { - String orderSettings = null; - if (afterColumn != null) { - if (afterColumn.length() > 0) { - orderSettings = "AFTER " + withBackQuote(afterColumn); - } else { - orderSettings = "FIRST"; - } - } + @Override + public SQLAction addColumn(@NotNull String columnName, @NotNull String settings, @Nullable String afterColumn) { + Objects.requireNonNull(columnName, "columnName could not be null"); + Objects.requireNonNull(settings, "settings could not be null"); + String orderSettings = null; + if (afterColumn != null) { + if (afterColumn.length() > 0) { + orderSettings = "AFTER " + withBackQuote(afterColumn); + } else { + orderSettings = "FIRST"; + } + } - return createAction( - "ALTER TABLE " + withBackQuote(getTableName()) + " ADD " + withBackQuote(columnName) + " " + settings - + (orderSettings != null ? " " + orderSettings : "") - ); - } + return createAction( + "ALTER TABLE " + withBackQuote(getTableName()) + " ADD " + withBackQuote(columnName) + " " + settings + + (orderSettings != null ? " " + orderSettings : "") + ); + } - @Override - public SQLAction renameColumn(@NotNull String columnName, @NotNull String newName) { - return createAction( - "ALTER TABLE " + withBackQuote(getTableName()) + " RENAME COLUMN " + withBackQuote(columnName) + " TO " + withBackQuote(newName) - ); - } + @Override + public SQLAction renameColumn(@NotNull String columnName, @NotNull String newName) { + Objects.requireNonNull(columnName, "columnName could not be null"); + Objects.requireNonNull(newName, "please specify new column name"); + return createAction( + "ALTER TABLE " + withBackQuote(getTableName()) + " RENAME COLUMN " + withBackQuote(columnName) + " TO " + withBackQuote(newName) + ); + } - @Override - public SQLAction modifyColumn(@NotNull String columnName, @NotNull String settings) { - return createAction( - "ALTER TABLE " + withBackQuote(getTableName()) + " MODIFY COLUMN " + withBackQuote(columnName) + " " + settings - ); - } + @Override + public SQLAction modifyColumn(@NotNull String columnName, @NotNull String settings) { + Objects.requireNonNull(columnName, "columnName could not be null"); + Objects.requireNonNull(settings, "please specify new column settings"); + return createAction( + "ALTER TABLE " + withBackQuote(getTableName()) + " MODIFY COLUMN " + withBackQuote(columnName) + " " + settings + ); + } - @Override - public SQLAction removeColumn(@NotNull String columnName) { - return createAction( - "ALTER TABLE " + withBackQuote(getTableName()) + " DROP " + withBackQuote(columnName) - ); - } + @Override + public SQLAction removeColumn(@NotNull String columnName) { + Objects.requireNonNull(columnName, "columnName could not be null"); + return createAction( + "ALTER TABLE " + withBackQuote(getTableName()) + " DROP " + withBackQuote(columnName) + ); + } - @Override - public SQLAction setColumnDefault(@NotNull String columnName, @NotNull String defaultValue) { - return createAction( - "ALTER TABLE " + withBackQuote(getTableName()) + " ALTER " + withBackQuote(columnName) + " SET DEFAULT " + defaultValue - ); - } + @Override + public SQLAction setColumnDefault(@NotNull String columnName, @NotNull String defaultValue) { + Objects.requireNonNull(columnName, "columnName could not be null"); + Objects.requireNonNull(defaultValue, "defaultValue could not be null, if you need to remove the default value, please use #removeColumnDefault()."); + return createAction( + "ALTER TABLE " + withBackQuote(getTableName()) + " ALTER " + withBackQuote(columnName) + " SET DEFAULT " + defaultValue + ); + } - @Override - public SQLAction removeColumnDefault(@NotNull String columnName) { - return createAction( - "ALTER TABLE " + withBackQuote(getTableName()) + " ALTER " + withBackQuote(columnName) + " DROP DEFAULT" - ); - } + @Override + public SQLAction removeColumnDefault(@NotNull String columnName) { + Objects.requireNonNull(columnName, "columnName could not be null"); + return createAction( + "ALTER TABLE " + withBackQuote(getTableName()) + " ALTER " + withBackQuote(columnName) + " DROP DEFAULT" + ); + } - private SQLUpdateActionImpl createAction(@NotNull String sql) { - return new SQLUpdateActionImpl(getManager(), sql); - } + private SQLUpdateActionImpl createAction(@NotNull String sql) { + return new SQLUpdateActionImpl(getManager(), sql); + } } diff --git a/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/impl/TableCreateBuilderImpl.java b/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/impl/TableCreateBuilderImpl.java index 18ff57b..1a61671 100644 --- a/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/impl/TableCreateBuilderImpl.java +++ b/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/impl/TableCreateBuilderImpl.java @@ -14,148 +14,159 @@ import org.jetbrains.annotations.Nullable; import java.util.ArrayList; import java.util.Arrays; import java.util.List; +import java.util.Objects; import static cc.carm.lib.easysql.api.SQLBuilder.withBackQuote; import static cc.carm.lib.easysql.api.SQLBuilder.withQuote; public class TableCreateBuilderImpl extends AbstractSQLBuilder implements TableCreateBuilder { - protected final @NotNull String tableName; + protected final @NotNull String tableName; + @NotNull + final List indexes = new ArrayList<>(); + @NotNull + final List foreignKeys = new ArrayList<>(); + @NotNull List columns = new ArrayList<>(); + @NotNull String tableSettings = defaultTablesSettings(); + @Nullable String tableComment; - @NotNull List columns = new ArrayList<>(); - @NotNull List indexes = new ArrayList<>(); - @NotNull List foreignKeys = new ArrayList<>(); + public TableCreateBuilderImpl(SQLManagerImpl manager, @NotNull String tableName) { + super(manager); + this.tableName = tableName; + } - @NotNull String tableSettings = defaultTablesSettings(); - @Nullable String tableComment; + protected static String buildIndexSettings(@NotNull IndexType indexType, @Nullable String indexName, + @NotNull String columnName, @NotNull String... moreColumns) { + Objects.requireNonNull(indexType, "indexType could not be null"); + Objects.requireNonNull(columnName, "column names could not be null"); + Objects.requireNonNull(moreColumns, "column names could not be null"); + StringBuilder indexBuilder = new StringBuilder(); - public TableCreateBuilderImpl(SQLManagerImpl manager, @NotNull String tableName) { - super(manager); - this.tableName = tableName; - } + indexBuilder.append(indexType.getName()).append(" "); + if (indexName != null) { + indexBuilder.append(withBackQuote(indexName)); + } + indexBuilder.append("("); + indexBuilder.append(withBackQuote(columnName)); - @Override - public @NotNull String getTableName() { - return this.tableName; - } + if (moreColumns.length > 0) { + indexBuilder.append(", "); - @Override - public @NotNull String getTableSettings() { - return this.tableSettings; - } + for (int i = 0; i < moreColumns.length; i++) { + indexBuilder.append(withBackQuote(moreColumns[i])); + if (i != moreColumns.length - 1) indexBuilder.append(", "); + } - @Override - public SQLUpdateAction build() { - StringBuilder createSQL = new StringBuilder(); - createSQL.append("CREATE TABLE IF NOT EXISTS ").append(withBackQuote(tableName)); - createSQL.append("("); - createSQL.append(String.join(", ", columns)); - if (indexes.size() > 0) { - createSQL.append(", "); - createSQL.append(String.join(", ", indexes)); - } - if (foreignKeys.size() > 0) { - createSQL.append(", "); - createSQL.append(String.join(", ", foreignKeys)); - } - createSQL.append(") ").append(getTableSettings()); + } - if (tableComment != null) { - createSQL.append(" COMMENT ").append(withQuote(tableComment)); - } + indexBuilder.append(")"); - return new SQLUpdateActionImpl(getManager(), createSQL.toString()); - } + return indexBuilder.toString(); + } - @Override - public TableCreateBuilder addColumn(@NotNull String column) { - this.columns.add(column); - return this; - } + @Override + public @NotNull String getTableName() { + return this.tableName; + } - @Override - public TableCreateBuilder addAutoIncrementColumn(@NotNull String columnName, @Nullable NumberType numberType, - boolean asPrimaryKey, boolean unsigned) { - return addColumn(columnName, - (numberType == null ? NumberType.INT : numberType).name() - + (unsigned ? " UNSIGNED " : " ") - + "NOT NULL AUTO_INCREMENT " + (asPrimaryKey ? "PRIMARY KEY" : "UNIQUE KEY") - ); - } + @Override + public @NotNull String getTableSettings() { + return this.tableSettings; + } - @Override - public TableCreateBuilder setIndex(@NotNull IndexType type, @Nullable String indexName, - @NotNull String columnName, @NotNull String... moreColumns) { - this.indexes.add(buildIndexSettings(type, indexName, columnName, moreColumns)); - return this; - } + @Override + public SQLUpdateAction build() { + StringBuilder createSQL = new StringBuilder(); + createSQL.append("CREATE TABLE IF NOT EXISTS ").append(withBackQuote(tableName)); + createSQL.append("("); + createSQL.append(String.join(", ", columns)); + if (indexes.size() > 0) { + createSQL.append(", "); + createSQL.append(String.join(", ", indexes)); + } + if (foreignKeys.size() > 0) { + createSQL.append(", "); + createSQL.append(String.join(", ", foreignKeys)); + } + createSQL.append(") ").append(getTableSettings()); - @Override - public TableCreateBuilder addForeignKey(@NotNull String tableColumn, @Nullable String constraintName, - @NotNull String foreignTable, @NotNull String foreignColumn, - @Nullable ForeignKeyRule updateRule, @Nullable ForeignKeyRule deleteRule) { - StringBuilder keyBuilder = new StringBuilder(); + if (tableComment != null) { + createSQL.append(" COMMENT ").append(withQuote(tableComment)); + } - keyBuilder.append("CONSTRAINT "); - if (constraintName == null) { - keyBuilder.append(withBackQuote("fk_" + tableColumn + "_" + foreignTable)); - } else { - keyBuilder.append(withBackQuote(constraintName)); - } - keyBuilder.append(" "); - keyBuilder.append("FOREIGN KEY (").append(withBackQuote(tableColumn)).append(") "); - keyBuilder.append("REFERENCES ").append(withBackQuote(foreignTable)).append("(").append(withBackQuote(foreignColumn)).append(")"); + return new SQLUpdateActionImpl(getManager(), createSQL.toString()); + } - if (updateRule != null) keyBuilder.append(" ON UPDATE ").append(updateRule.getRuleName()); - if (deleteRule != null) keyBuilder.append(" ON DELETE ").append(deleteRule.getRuleName()); + @Override + public TableCreateBuilder addColumn(@NotNull String column) { + Objects.requireNonNull(column, "column could not be null"); + this.columns.add(column); + return this; + } - this.foreignKeys.add(keyBuilder.toString()); - return this; - } + @Override + public TableCreateBuilder addAutoIncrementColumn(@NotNull String columnName, @Nullable NumberType numberType, + boolean asPrimaryKey, boolean unsigned) { + return addColumn(columnName, + (numberType == null ? NumberType.INT : numberType).name() + + (unsigned ? " UNSIGNED " : " ") + + "NOT NULL AUTO_INCREMENT " + (asPrimaryKey ? "PRIMARY KEY" : "UNIQUE KEY") + ); + } - @Override - public TableCreateBuilder setColumns(@NotNull String... columns) { - this.columns = Arrays.asList(columns); - return this; - } + @Override + public TableCreateBuilder setIndex(@NotNull IndexType type, @Nullable String indexName, + @NotNull String columnName, @NotNull String... moreColumns) { + Objects.requireNonNull(columnName, "columnName could not be null"); + this.indexes.add(buildIndexSettings(type, indexName, columnName, moreColumns)); + return this; + } - @Override - public TableCreateBuilder setTableSettings(@NotNull String settings) { - this.tableSettings = settings; - return this; - } + @Override + public TableCreateBuilder addForeignKey(@NotNull String tableColumn, @Nullable String constraintName, + @NotNull String foreignTable, @NotNull String foreignColumn, + @Nullable ForeignKeyRule updateRule, @Nullable ForeignKeyRule deleteRule) { + Objects.requireNonNull(tableColumn, "tableColumn could not be null"); + Objects.requireNonNull(foreignTable, "foreignTable could not be null"); + Objects.requireNonNull(foreignColumn, "foreignColumn could not be null"); - @Override - public TableCreateBuilder setTableComment(@Nullable String comment) { - this.tableComment = comment; - return this; - } + StringBuilder keyBuilder = new StringBuilder(); - protected static String buildIndexSettings(@NotNull IndexType indexType, @Nullable String indexName, - @NotNull String columnName, @NotNull String... moreColumns) { + keyBuilder.append("CONSTRAINT "); + if (constraintName == null) { + keyBuilder.append(withBackQuote("fk_" + tableColumn + "_" + foreignTable)); + } else { + keyBuilder.append(withBackQuote(constraintName)); + } + keyBuilder.append(" "); + keyBuilder.append("FOREIGN KEY (").append(withBackQuote(tableColumn)).append(") "); + keyBuilder.append("REFERENCES ").append(withBackQuote(foreignTable)).append("(").append(withBackQuote(foreignColumn)).append(")"); - StringBuilder indexBuilder = new StringBuilder(); + if (updateRule != null) keyBuilder.append(" ON UPDATE ").append(updateRule.getRuleName()); + if (deleteRule != null) keyBuilder.append(" ON DELETE ").append(deleteRule.getRuleName()); - indexBuilder.append(indexType.getName()).append(" "); - if (indexName != null) { - indexBuilder.append(withBackQuote(indexName)); - } - indexBuilder.append("("); - indexBuilder.append(withBackQuote(columnName)); + this.foreignKeys.add(keyBuilder.toString()); + return this; + } - if (moreColumns.length > 0) { - indexBuilder.append(", "); + @Override + public TableCreateBuilder setColumns(@NotNull String... columns) { + Objects.requireNonNull(columns, "columns could not be null"); + this.columns = Arrays.asList(columns); + return this; + } - for (int i = 0; i < moreColumns.length; i++) { - indexBuilder.append(withBackQuote(moreColumns[i])); - if (i != moreColumns.length - 1) indexBuilder.append(", "); - } + @Override + public TableCreateBuilder setTableSettings(@NotNull String settings) { + Objects.requireNonNull(settings, "settings could not be null"); + this.tableSettings = settings; + return this; + } - } - - indexBuilder.append(")"); - - return indexBuilder.toString(); - } + @Override + public TableCreateBuilder setTableComment(@Nullable String comment) { + this.tableComment = comment; + return this; + } } diff --git a/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/impl/TableQueryBuilderImpl.java b/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/impl/TableQueryBuilderImpl.java index 17c697b..cdd660d 100644 --- a/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/impl/TableQueryBuilderImpl.java +++ b/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/impl/TableQueryBuilderImpl.java @@ -12,81 +12,83 @@ import java.util.Objects; import static cc.carm.lib.easysql.api.SQLBuilder.withBackQuote; public class TableQueryBuilderImpl - extends AbstractConditionalBuilder - implements TableQueryBuilder { - - @NotNull String tableName; - - String[] columns; - - @Nullable String orderBy; - - int[] pageLimit; - - public TableQueryBuilderImpl(@NotNull SQLManagerImpl manager, @NotNull String tableName) { - super(manager); - this.tableName = tableName; - } - - @Override - public PreparedQueryActionImpl build() { - StringBuilder sqlBuilder = new StringBuilder(); - sqlBuilder.append("SELECT").append(" "); - if (columns == null || columns.length < 1) { - sqlBuilder.append("*"); - } else { - for (int i = 0; i < columns.length; i++) { - String name = columns[i]; - sqlBuilder.append(withBackQuote(name)); - if (i != columns.length - 1) { - sqlBuilder.append(","); - } - } - } - - sqlBuilder.append(" ").append("FROM").append(" ").append(withBackQuote(tableName)); - - if (hasConditions()) sqlBuilder.append(" ").append(buildConditionSQL()); - - if (orderBy != null) sqlBuilder.append(" ").append(orderBy); - - if (pageLimit != null && pageLimit.length == 2) { - sqlBuilder.append(" LIMIT ").append(pageLimit[0]).append(",").append(pageLimit[1]); - } else if (limit > 0) { - sqlBuilder.append(" ").append(buildLimitSQL()); - } + extends AbstractConditionalBuilder + implements TableQueryBuilder { - return new PreparedQueryActionImpl(getManager(), sqlBuilder.toString()) - .setParams(hasConditionParams() ? getConditionParams() : null); - } + protected final @NotNull String tableName; - @Override - public @NotNull String getTableName() { - return tableName; - } + String[] columns; - @Override - public TableQueryBuilderImpl selectColumns(@NotNull String... columnNames) { - this.columns = columnNames; - return this; - } + @Nullable String orderBy; - @Override - public TableQueryBuilder orderBy(@NotNull String columnName, boolean asc) { - Objects.requireNonNull(columnName, "columnName could not be null"); - this.orderBy = "ORDER BY " + withBackQuote(columnName) + " " + (asc ? "ASC" : "DESC"); - return this; - } + int[] pageLimit; - @Override - public TableQueryBuilder setPageLimit(int start, int end) { - this.pageLimit = new int[]{start, end}; - return this; - } + public TableQueryBuilderImpl(@NotNull SQLManagerImpl manager, @NotNull String tableName) { + super(manager); + this.tableName = tableName; + } - @Override - protected TableQueryBuilderImpl getThis() { - return this; - } + @Override + public PreparedQueryActionImpl build() { + StringBuilder sqlBuilder = new StringBuilder(); + sqlBuilder.append("SELECT").append(" "); + if (columns == null || columns.length < 1) { + sqlBuilder.append("*"); + } else { + for (int i = 0; i < columns.length; i++) { + String name = columns[i]; + sqlBuilder.append(withBackQuote(name)); + if (i != columns.length - 1) { + sqlBuilder.append(","); + } + } + } + + sqlBuilder.append(" ").append("FROM").append(" ").append(withBackQuote(tableName)); + + if (hasConditions()) sqlBuilder.append(" ").append(buildConditionSQL()); + + if (orderBy != null) sqlBuilder.append(" ").append(orderBy); + + if (pageLimit != null && pageLimit.length == 2) { + sqlBuilder.append(" LIMIT ").append(pageLimit[0]).append(",").append(pageLimit[1]); + } else if (limit > 0) { + sqlBuilder.append(" ").append(buildLimitSQL()); + } + + + return new PreparedQueryActionImpl(getManager(), sqlBuilder.toString()) + .setParams(hasConditionParams() ? getConditionParams() : null); + } + + @Override + public @NotNull String getTableName() { + return tableName; + } + + @Override + public TableQueryBuilderImpl selectColumns(@NotNull String... columnNames) { + Objects.requireNonNull(columnNames, "columnNames could not be null"); + this.columns = columnNames; + return this; + } + + @Override + public TableQueryBuilder orderBy(@NotNull String columnName, boolean asc) { + Objects.requireNonNull(columnName, "columnName could not be null"); + this.orderBy = "ORDER BY " + withBackQuote(columnName) + " " + (asc ? "ASC" : "DESC"); + return this; + } + + @Override + public TableQueryBuilder setPageLimit(int start, int end) { + this.pageLimit = new int[]{start, end}; + return this; + } + + @Override + protected TableQueryBuilderImpl getThis() { + return this; + } } diff --git a/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/impl/UpdateBuilderImpl.java b/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/impl/UpdateBuilderImpl.java index 09441ff..319963e 100644 --- a/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/impl/UpdateBuilderImpl.java +++ b/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/impl/UpdateBuilderImpl.java @@ -16,7 +16,7 @@ public class UpdateBuilderImpl extends AbstractConditionalBuilder> implements UpdateBuilder { - String tableName; + protected final @NotNull String tableName; @NotNull LinkedHashMap columnData; @@ -51,7 +51,7 @@ public class UpdateBuilderImpl } @Override - public String getTableName() { + public @NotNull String getTableName() { return tableName; } diff --git a/easysql-impl/src/main/java/cc/carm/lib/easysql/manager/SQLManagerImpl.java b/easysql-impl/src/main/java/cc/carm/lib/easysql/manager/SQLManagerImpl.java index cb45c12..448917c 100644 --- a/easysql-impl/src/main/java/cc/carm/lib/easysql/manager/SQLManagerImpl.java +++ b/easysql-impl/src/main/java/cc/carm/lib/easysql/manager/SQLManagerImpl.java @@ -26,169 +26,168 @@ import java.util.logging.Logger; public class SQLManagerImpl implements SQLManager { - private final Logger LOGGER; - private final DataSource dataSource; - protected ExecutorService executorPool; - ConcurrentHashMap activeQuery = new ConcurrentHashMap<>(); + private final Logger LOGGER; + private final DataSource dataSource; + private final ConcurrentHashMap activeQuery = new ConcurrentHashMap<>(); + protected ExecutorService executorPool; + @NotNull Supplier debugMode = () -> Boolean.FALSE; - @NotNull Supplier debugMode = () -> false; + public SQLManagerImpl(@NotNull DataSource dataSource) { + this(dataSource, null); + } - public SQLManagerImpl(@NotNull DataSource dataSource) { - this(dataSource, null); - } + public SQLManagerImpl(@NotNull DataSource dataSource, @Nullable String name) { + String managerName = "SQLManager" + (name != null ? "#" + name : ""); + this.LOGGER = Logger.getLogger(managerName); + this.dataSource = dataSource; + this.executorPool = Executors.newFixedThreadPool(3, r -> { + Thread thread = new Thread(r, managerName); + thread.setDaemon(true); + return thread; + }); + } - public SQLManagerImpl(@NotNull DataSource dataSource, @Nullable String name) { - String managerName = "SQLManager" + (name != null ? "#" + name : ""); - this.LOGGER = Logger.getLogger(managerName); - this.dataSource = dataSource; - this.executorPool = Executors.newFixedThreadPool(3, r -> { - Thread thread = new Thread(r, managerName); - thread.setDaemon(true); - return thread; - }); - } + @Override + public boolean isDebugMode() { + return this.debugMode.get(); + } - @Override - public boolean isDebugMode() { - return this.debugMode.get(); - } + @Override + public void setDebugMode(@NotNull Supplier<@NotNull Boolean> debugMode) { + this.debugMode = debugMode; + } - @Override - public void setDebugMode(@NotNull Supplier<@NotNull Boolean> debugMode) { - this.debugMode = debugMode; - } + public void debug(String msg) { + if (isDebugMode()) getLogger().info("[DEBUG] " + msg); + } - public void debug(String msg) { - if (isDebugMode()) getLogger().info("[DEBUG] " + msg); - } + @Override + public Logger getLogger() { + return LOGGER; + } - @Override - public Logger getLogger() { - return LOGGER; - } + public ExecutorService getExecutorPool() { + return executorPool; + } - public ExecutorService getExecutorPool() { - return executorPool; - } + @Override + public @NotNull DataSource getDataSource() { + return this.dataSource; + } - @Override - public @NotNull DataSource getDataSource() { - return this.dataSource; - } + @Override + public @NotNull Connection getConnection() throws SQLException { + return getDataSource().getConnection(); + } - @Override - public @NotNull Connection getConnection() throws SQLException { - return getDataSource().getConnection(); - } + @Override + public @NotNull Map getActiveQuery() { + return this.activeQuery; + } - @Override - public @NotNull Map getActiveQuery() { - return this.activeQuery; - } + @Override + public Integer executeSQL(String sql) { + return new SQLUpdateActionImpl(this, sql).execute(null); + } - @Override - public Integer executeSQL(String sql) { - return new SQLUpdateActionImpl(this, sql).execute(null); - } + @Override + public Integer executeSQL(String sql, Object[] params) { + return new PreparedSQLUpdateActionImpl(this, sql, params).execute(null); + } - @Override - public Integer executeSQL(String sql, Object[] params) { - return new PreparedSQLUpdateActionImpl(this, sql, params).execute(null); - } + @Override + public List executeSQLBatch(String sql, Iterable paramsBatch) { + return new PreparedSQLBatchUpdateActionImpl(this, sql) + .setAllParams(paramsBatch) + .execute(null); + } - @Override - public List executeSQLBatch(String sql, Iterable paramsBatch) { - return new PreparedSQLBatchUpdateActionImpl(this, sql) - .setAllParams(paramsBatch) - .execute(null); - } + @Override + public List executeSQLBatch(@NotNull String sql, String... moreSQL) { + SQLUpdateBatchAction action = new SQLUpdateBatchActionImpl(this, sql); + if (moreSQL != null && moreSQL.length > 0) { + Arrays.stream(moreSQL).forEach(action::addBatch); + } + return action.execute(null); + } - @Override - public List executeSQLBatch(@NotNull String sql, String... moreSQL) { - SQLUpdateBatchAction action = new SQLUpdateBatchActionImpl(this, sql); - if (moreSQL != null && moreSQL.length > 0) { - Arrays.stream(moreSQL).forEach(action::addBatch); - } - return action.execute(null); - } + @Override + public @Nullable List executeSQLBatch(@NotNull Iterable sqlBatch) { + Iterator iterator = sqlBatch.iterator(); + if (!iterator.hasNext()) return null; // PLEASE GIVE IT SOMETHING - @Override - public @Nullable List executeSQLBatch(@NotNull Iterable sqlBatch) { - Iterator iterator = sqlBatch.iterator(); - if (!iterator.hasNext()) return null; // PLEASE GIVE IT SOMETHING + SQLUpdateBatchAction action = new SQLUpdateBatchActionImpl(this, iterator.next()); + while (iterator.hasNext()) { + action.addBatch(iterator.next()); + } - SQLUpdateBatchAction action = new SQLUpdateBatchActionImpl(this, iterator.next()); - while (iterator.hasNext()) { - action.addBatch(iterator.next()); - } + return action.execute(null); + } - return action.execute(null); - } + @Override + public TableCreateBuilder createTable(@NotNull String tableName) { + return new TableCreateBuilderImpl(this, tableName); + } - @Override - public TableCreateBuilder createTable(@NotNull String tableName) { - return new TableCreateBuilderImpl(this, tableName); - } + @Override + public TableAlterBuilder alterTable(@NotNull String tableName) { + return new TableAlterBuilderImpl(this, tableName); + } - @Override - public TableAlterBuilder alterTable(@NotNull String tableName) { - return new TableAlterBuilderImpl(this, tableName); - } + @Override + public QueryBuilder createQuery() { + return new QueryBuilderImpl(this); + } - @Override - public QueryBuilder createQuery() { - return new QueryBuilderImpl(this); - } + @Override + public InsertBuilder createInsertBatch(@NotNull String tableName) { + return new InsertBuilderImpl(this, tableName) { + @Override + public PreparedSQLUpdateBatchAction setColumnNames(List columnNames) { + return new PreparedSQLBatchUpdateActionImpl(getManager(), buildSQL(getTableName(), columnNames)); + } + }; + } - @Override - public InsertBuilder createInsertBatch(@NotNull String tableName) { - return new InsertBuilderImpl(this, tableName) { - @Override - public PreparedSQLUpdateBatchAction setColumnNames(List columnNames) { - return new PreparedSQLBatchUpdateActionImpl(getManager(), buildSQL(getTableName(), columnNames)); - } - }; - } + @Override + public InsertBuilder createInsert(@NotNull String tableName) { + return new InsertBuilderImpl(this, tableName) { + @Override + public PreparedSQLUpdateAction setColumnNames(List columnNames) { + return new PreparedSQLUpdateActionImpl(getManager(), buildSQL(getTableName(), columnNames)); + } + }; + } - @Override - public InsertBuilder createInsert(@NotNull String tableName) { - return new InsertBuilderImpl(this, tableName) { - @Override - public PreparedSQLUpdateAction setColumnNames(List columnNames) { - return new PreparedSQLUpdateActionImpl(getManager(), buildSQL(getTableName(), columnNames)); - } - }; - } + @Override + public ReplaceBuilder createReplaceBatch(@NotNull String tableName) { + return new ReplaceBuilderImpl(this, tableName) { + @Override + public PreparedSQLUpdateBatchAction setColumnNames(List columnNames) { + return new PreparedSQLBatchUpdateActionImpl(getManager(), buildSQL(getTableName(), columnNames)); + } + }; + } - @Override - public ReplaceBuilder createReplaceBatch(@NotNull String tableName) { - return new ReplaceBuilderImpl(this, tableName) { - @Override - public PreparedSQLUpdateBatchAction setColumnNames(List columnNames) { - return new PreparedSQLBatchUpdateActionImpl(getManager(), buildSQL(getTableName(), columnNames)); - } - }; - } + @Override + public ReplaceBuilder createReplace(@NotNull String tableName) { + return new ReplaceBuilderImpl(this, tableName) { + @Override + public PreparedSQLUpdateAction setColumnNames(List columnNames) { + return new PreparedSQLUpdateActionImpl(getManager(), buildSQL(getTableName(), columnNames)); + } + }; + } - @Override - public ReplaceBuilder createReplace(@NotNull String tableName) { - return new ReplaceBuilderImpl(this, tableName) { - @Override - public PreparedSQLUpdateAction setColumnNames(List columnNames) { - return new PreparedSQLUpdateActionImpl(getManager(), buildSQL(getTableName(), columnNames)); - } - }; - } + @Override + public UpdateBuilder createUpdate(@NotNull String tableName) { + return new UpdateBuilderImpl(this, tableName); + } - @Override - public UpdateBuilder createUpdate(@NotNull String tableName) { - return new UpdateBuilderImpl(this, tableName); - } - - @Override - public DeleteBuilder createDelete(@NotNull String tableName) { - return new DeleteBuilderImpl(this, tableName); - } + @Override + public DeleteBuilder createDelete(@NotNull String tableName) { + return new DeleteBuilderImpl(this, tableName); + } } diff --git a/easysql-impl/src/main/java/cc/carm/lib/easysql/query/SQLQueryImpl.java b/easysql-impl/src/main/java/cc/carm/lib/easysql/query/SQLQueryImpl.java index 26ac904..dd508bd 100644 --- a/easysql-impl/src/main/java/cc/carm/lib/easysql/query/SQLQueryImpl.java +++ b/easysql-impl/src/main/java/cc/carm/lib/easysql/query/SQLQueryImpl.java @@ -11,85 +11,83 @@ import java.sql.Statement; public class SQLQueryImpl implements SQLQuery { - protected final long executeTime; + protected final long executeTime; - protected SQLManagerImpl sqlManager; - protected QueryActionImpl queryAction; + protected final SQLManagerImpl sqlManager; + final Connection connection; + final Statement statement; + final ResultSet resultSet; + protected QueryActionImpl queryAction; - Connection connection; - Statement statement; + public SQLQueryImpl( + SQLManagerImpl sqlManager, QueryActionImpl queryAction, + Connection connection, Statement statement, ResultSet resultSet + ) { + this(sqlManager, queryAction, connection, statement, resultSet, System.currentTimeMillis()); + } - ResultSet resultSet; + public SQLQueryImpl( + SQLManagerImpl sqlManager, QueryActionImpl queryAction, + Connection connection, Statement statement, ResultSet resultSet, + long executeTime + ) { + this.executeTime = executeTime; + this.sqlManager = sqlManager; + this.queryAction = queryAction; + this.connection = connection; + this.statement = statement; + this.resultSet = resultSet; + } - public SQLQueryImpl( - SQLManagerImpl sqlManager, QueryActionImpl queryAction, - Connection connection, Statement statement, ResultSet resultSet - ) { - this(sqlManager, queryAction, connection, statement, resultSet, System.currentTimeMillis()); - } + @Override + public long getExecuteTime() { + return this.executeTime; + } - public SQLQueryImpl( - SQLManagerImpl sqlManager, QueryActionImpl queryAction, - Connection connection, Statement statement, ResultSet resultSet, - long executeTime - ) { - this.executeTime = executeTime; - this.sqlManager = sqlManager; - this.queryAction = queryAction; - this.connection = connection; - this.statement = statement; - this.resultSet = resultSet; - } + @Override + public SQLManagerImpl getManager() { + return this.sqlManager; + } - @Override - public long getExecuteTime() { - return this.executeTime; - } + @Override + public QueryActionImpl getAction() { + return this.queryAction; + } - @Override - public SQLManagerImpl getManager() { - return this.sqlManager; - } + @Override + public ResultSet getResultSet() { + return this.resultSet; + } - @Override - public QueryActionImpl getAction() { - return this.queryAction; - } + @Override + public String getSQLContent() { + return getAction().getSQLContent(); + } - @Override - public ResultSet getResultSet() { - return this.resultSet; - } + @Override + public void close() { + try { + if (getResultSet() != null && !getResultSet().isClosed()) getResultSet().close(); + if (getStatement() != null && !getStatement().isClosed()) getStatement().close(); + if (getConnection() != null && !getConnection().isClosed()) getConnection().close(); - @Override - public String getSQLContent() { - return getAction().getSQLContent(); - } + getManager().debug("#" + getAction().getShortID() + + " -> finished after " + (System.currentTimeMillis() - getExecuteTime()) + " ms." + ); + getManager().getActiveQuery().remove(getAction().getActionUUID()); + } catch (SQLException e) { + getAction().handleException(getAction().defaultExceptionHandler(), e); + } + this.queryAction = null; + } - @Override - public void close() { - try { - if (getResultSet() != null) getResultSet().close(); - if (getStatement() != null) getStatement().close(); - if (getConnection() != null) getConnection().close(); + @Override + public Statement getStatement() { + return this.statement; + } - getManager().debug("#" + getAction().getShortID() + - " -> finished after " + (System.currentTimeMillis() - getExecuteTime()) + " ms." - ); - getManager().getActiveQuery().remove(getAction().getActionUUID()); - } catch (SQLException e) { - getAction().handleException(getAction().defaultExceptionHandler(), e); - } - this.queryAction = null; - } - - @Override - public Statement getStatement() { - return this.statement; - } - - @Override - public Connection getConnection() { - return this.connection; - } + @Override + public Connection getConnection() { + return this.connection; + } } diff --git a/easysql-impl/src/main/java/cc/carm/lib/easysql/util/StatementUtil.java b/easysql-impl/src/main/java/cc/carm/lib/easysql/util/StatementUtil.java index 7d9fdcf..43e205b 100644 --- a/easysql-impl/src/main/java/cc/carm/lib/easysql/util/StatementUtil.java +++ b/easysql-impl/src/main/java/cc/carm/lib/easysql/util/StatementUtil.java @@ -10,201 +10,201 @@ import java.util.UUID; public class StatementUtil { - /** - * 创建一个 {@link PreparedStatement} 。 - * - * @param connection 数据库连接 - * @param sql SQL语句,使用"?"做为占位符 - * @param params "?"所代表的对应参数列表 - * @return 完成参数填充的 {@link PreparedStatement} - */ - public static PreparedStatement createPrepareStatement( - Connection connection, String sql, Object[] params - ) throws SQLException { - return createPrepareStatement(connection, sql, params, false); - } + /** + * 创建一个 {@link PreparedStatement} 。 + * + * @param connection 数据库连接 + * @param sql SQL语句,使用"?"做为占位符 + * @param params "?"所代表的对应参数列表 + * @return 完成参数填充的 {@link PreparedStatement} + */ + public static PreparedStatement createPrepareStatement( + Connection connection, String sql, Object[] params + ) throws SQLException { + return createPrepareStatement(connection, sql, params, false); + } - /** - * 创建一个 {@link PreparedStatement} 。 - * - * @param connection 数据库连接 - * @param sql SQL语句,使用"?"做为占位符 - * @param params "?"所代表的对应参数列表 - * @param returnGeneratedKey 是否会返回自增主键 - * @return 完成参数填充的 {@link PreparedStatement} - */ - public static PreparedStatement createPrepareStatement( - Connection connection, String sql, Object[] params, boolean returnGeneratedKey - ) throws SQLException { - sql = sql.trim(); - PreparedStatement statement = connection.prepareStatement(sql, returnGeneratedKey ? Statement.RETURN_GENERATED_KEYS : Statement.NO_GENERATED_KEYS); - Map nullTypeMap = new HashMap<>(); - if (params != null) fillParams(statement, Arrays.asList(params), nullTypeMap); - statement.addBatch(); - return statement; - } + /** + * 创建一个 {@link PreparedStatement} 。 + * + * @param connection 数据库连接 + * @param sql SQL语句,使用"?"做为占位符 + * @param params "?"所代表的对应参数列表 + * @param returnGeneratedKey 是否会返回自增主键 + * @return 完成参数填充的 {@link PreparedStatement} + */ + public static PreparedStatement createPrepareStatement( + Connection connection, String sql, Object[] params, boolean returnGeneratedKey + ) throws SQLException { + sql = sql.trim(); + PreparedStatement statement = connection.prepareStatement(sql, returnGeneratedKey ? Statement.RETURN_GENERATED_KEYS : Statement.NO_GENERATED_KEYS); + Map nullTypeMap = new HashMap<>(); + if (params != null) fillParams(statement, Arrays.asList(params), nullTypeMap); + statement.addBatch(); + return statement; + } - /** - * 创建批量操作的一个 {@link PreparedStatement} 。 - * - * @param connection 数据库连接 - * @param sql SQL语句,使用"?"做为占位符 - * @param paramsBatch "?"所代表的对应参数列表 - * @return 完成参数填充的 {@link PreparedStatement} - */ - public static PreparedStatement createPrepareStatementBatch( - Connection connection, String sql, Iterable paramsBatch - ) throws SQLException { - return createPrepareStatementBatch(connection, sql, paramsBatch, false); - } + /** + * 创建批量操作的一个 {@link PreparedStatement} 。 + * + * @param connection 数据库连接 + * @param sql SQL语句,使用"?"做为占位符 + * @param paramsBatch "?"所代表的对应参数列表 + * @return 完成参数填充的 {@link PreparedStatement} + */ + public static PreparedStatement createPrepareStatementBatch( + Connection connection, String sql, Iterable paramsBatch + ) throws SQLException { + return createPrepareStatementBatch(connection, sql, paramsBatch, false); + } - /** - * 创建批量操作的一个 {@link PreparedStatement} 。 - * - * @param connection 数据库连接 - * @param sql SQL语句,使用"?"做为占位符 - * @param paramsBatch "?"所代表的对应参数列表 - * @param returnGeneratedKey 是否会返回自增主键 - * @return 完成参数填充的 {@link PreparedStatement} - */ - public static PreparedStatement createPrepareStatementBatch( - Connection connection, String sql, Iterable paramsBatch, boolean returnGeneratedKey - ) throws SQLException { + /** + * 创建批量操作的一个 {@link PreparedStatement} 。 + * + * @param connection 数据库连接 + * @param sql SQL语句,使用"?"做为占位符 + * @param paramsBatch "?"所代表的对应参数列表 + * @param returnGeneratedKey 是否会返回自增主键 + * @return 完成参数填充的 {@link PreparedStatement} + */ + public static PreparedStatement createPrepareStatementBatch( + Connection connection, String sql, Iterable paramsBatch, boolean returnGeneratedKey + ) throws SQLException { - sql = sql.trim(); - PreparedStatement statement = connection.prepareStatement(sql, returnGeneratedKey ? Statement.RETURN_GENERATED_KEYS : Statement.NO_GENERATED_KEYS); - Map nullTypeMap = new HashMap<>(); - for (Object[] params : paramsBatch) { - fillParams(statement, Arrays.asList(params), nullTypeMap); - statement.addBatch(); - } + sql = sql.trim(); + PreparedStatement statement = connection.prepareStatement(sql, returnGeneratedKey ? Statement.RETURN_GENERATED_KEYS : Statement.NO_GENERATED_KEYS); + Map nullTypeMap = new HashMap<>(); + for (Object[] params : paramsBatch) { + fillParams(statement, Arrays.asList(params), nullTypeMap); + statement.addBatch(); + } - return statement; - } + return statement; + } - /** - * 填充PreparedStatement的参数。 - * - * @param statement PreparedStatement - * @param params SQL参数 - * @return {@link PreparedStatement} 填充参数后的PreparedStatement - * @throws SQLException SQL执行异常 - */ - public static PreparedStatement fillParams( - PreparedStatement statement, Iterable params - ) throws SQLException { - return fillParams(statement, params, null); - } + /** + * 填充PreparedStatement的参数。 + * + * @param statement PreparedStatement + * @param params SQL参数 + * @return {@link PreparedStatement} 填充参数后的PreparedStatement + * @throws SQLException SQL执行异常 + */ + public static PreparedStatement fillParams( + PreparedStatement statement, Iterable params + ) throws SQLException { + return fillParams(statement, params, null); + } - /** - * 填充PreparedStatement的参数。 - * - * @param statement PreparedStatement - * @param params SQL参数 - * @param nullCache null参数的类型缓存,避免循环中重复获取类型 - * @return 完成参数填充的 {@link PreparedStatement} - */ - public static PreparedStatement fillParams( - PreparedStatement statement, Iterable params, Map nullCache - ) throws SQLException { - if (null == params) { - return statement;// 无参数 - } + /** + * 填充PreparedStatement的参数。 + * + * @param statement PreparedStatement + * @param params SQL参数 + * @param nullCache null参数的类型缓存,避免循环中重复获取类型 + * @return 完成参数填充的 {@link PreparedStatement} + */ + public static PreparedStatement fillParams( + PreparedStatement statement, Iterable params, Map nullCache + ) throws SQLException { + if (null == params) { + return statement;// 无参数 + } - int paramIndex = 1;//第一个参数从1计数 - for (Object param : params) { - setParam(statement, paramIndex++, param, nullCache); - } - return statement; - } + int paramIndex = 1;//第一个参数从1计数 + for (Object param : params) { + setParam(statement, paramIndex++, param, nullCache); + } + return statement; + } - /** - * 获取null字段对应位置的数据类型 - * 如果类型获取失败将使用默认的 {@link Types#VARCHAR} - * - * @param statement {@link PreparedStatement} - * @param paramIndex 参数序列,第一位从1开始 - * @return 数据类型,默认为 {@link Types#VARCHAR} - */ - public static int getNullType(PreparedStatement statement, int paramIndex) { - try { - ParameterMetaData pmd = statement.getParameterMetaData(); - return pmd.getParameterType(paramIndex); - } catch (SQLException ignore) { - return Types.VARCHAR; - } - } + /** + * 获取null字段对应位置的数据类型 + * 如果类型获取失败将使用默认的 {@link Types#VARCHAR} + * + * @param statement {@link PreparedStatement} + * @param paramIndex 参数序列,第一位从1开始 + * @return 数据类型,默认为 {@link Types#VARCHAR} + */ + public static int getNullType(PreparedStatement statement, int paramIndex) { + try { + ParameterMetaData pmd = statement.getParameterMetaData(); + return pmd.getParameterType(paramIndex); + } catch (SQLException ignore) { + return Types.VARCHAR; + } + } - /** - * 为 {@link PreparedStatement} 设置单个参数 - * - * @param preparedStatement {@link PreparedStatement} - * @param paramIndex 参数序列,从1开始 - * @param param 参数,不能为{@code null} - * @param nullCache 用于缓存参数为null位置的类型,避免重复获取 - */ - private static void setParam( - PreparedStatement preparedStatement, int paramIndex, Object param, - Map nullCache - ) throws SQLException { + /** + * 为 {@link PreparedStatement} 设置单个参数 + * + * @param preparedStatement {@link PreparedStatement} + * @param paramIndex 参数序列,从1开始 + * @param param 参数,不能为{@code null} + * @param nullCache 用于缓存参数为null位置的类型,避免重复获取 + */ + private static void setParam( + PreparedStatement preparedStatement, int paramIndex, Object param, + Map nullCache + ) throws SQLException { - if (param == null) { - Integer type = (null == nullCache) ? null : nullCache.get(paramIndex); - if (null == type) { - type = getNullType(preparedStatement, paramIndex); - if (null != nullCache) { - nullCache.put(paramIndex, type); - } - } - preparedStatement.setNull(paramIndex, type); - } + if (param == null) { + Integer type = (null == nullCache) ? null : nullCache.get(paramIndex); + if (null == type) { + type = getNullType(preparedStatement, paramIndex); + if (null != nullCache) { + nullCache.put(paramIndex, type); + } + } + preparedStatement.setNull(paramIndex, type); + } - // 针对UUID特殊处理,避免元数据直接传入 - if (param instanceof UUID) { - preparedStatement.setString(paramIndex, param.toString()); - return; - } + // 针对UUID特殊处理,避免元数据直接传入 + if (param instanceof UUID) { + preparedStatement.setString(paramIndex, param.toString()); + return; + } - // 针对StringBuilder或StringBuffer进行处理,避免元数据传入 - if (param instanceof StringBuilder || param instanceof StringBuffer) { - preparedStatement.setString(paramIndex, param.toString()); - return; - } + // 针对StringBuilder或StringBuffer进行处理,避免元数据传入 + if (param instanceof StringBuilder || param instanceof StringBuffer) { + preparedStatement.setString(paramIndex, param.toString()); + return; + } - // 日期特殊处理,默认按照时间戳传入,避免精度丢失 - if (param instanceof java.util.Date) { - if (param instanceof Date) { - preparedStatement.setDate(paramIndex, (Date) param); - } else if (param instanceof Time) { - preparedStatement.setTime(paramIndex, (Time) param); - } else { - preparedStatement.setTimestamp(paramIndex, new Timestamp(((java.util.Date) param).getTime())); - } - return; - } + // 日期特殊处理,默认按照时间戳传入,避免精度丢失 + if (param instanceof java.util.Date) { + if (param instanceof Date) { + preparedStatement.setDate(paramIndex, (Date) param); + } else if (param instanceof Time) { + preparedStatement.setTime(paramIndex, (Time) param); + } else { + preparedStatement.setTimestamp(paramIndex, new Timestamp(((java.util.Date) param).getTime())); + } + return; + } - // 针对大数字类型的特殊处理 - if (param instanceof Number) { - if (param instanceof BigDecimal) { - // BigDecimal的转换交给JDBC驱动处理 - preparedStatement.setBigDecimal(paramIndex, (BigDecimal) param); - return; - } else if (param instanceof BigInteger) { - preparedStatement.setBigDecimal(paramIndex, new BigDecimal((BigInteger) param)); - return; - } - // 其它数字类型按照默认类型传入 - } + // 针对大数字类型的特殊处理 + if (param instanceof Number) { + if (param instanceof BigDecimal) { + // BigDecimal的转换交给JDBC驱动处理 + preparedStatement.setBigDecimal(paramIndex, (BigDecimal) param); + return; + } else if (param instanceof BigInteger) { + preparedStatement.setBigDecimal(paramIndex, new BigDecimal((BigInteger) param)); + return; + } + // 其它数字类型按照默认类型传入 + } - if (param instanceof Enum) { - //枚举类采用 name() - preparedStatement.setString(paramIndex, ((Enum) param).name()); - return; - } + if (param instanceof Enum) { + //枚举类采用 name() + preparedStatement.setString(paramIndex, ((Enum) param).name()); + return; + } - // 其它参数类型直接传入 - preparedStatement.setObject(paramIndex, param); - } + // 其它参数类型直接传入 + preparedStatement.setObject(paramIndex, param); + } } diff --git a/example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/EasySQLTest.java b/example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/EasySQLTest.java deleted file mode 100644 index d9e21a5..0000000 --- a/example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/EasySQLTest.java +++ /dev/null @@ -1,36 +0,0 @@ -package cc.carm.lib.easysql.testrunner; - -import cc.carm.lib.easysql.api.SQLManager; -import org.jetbrains.annotations.ApiStatus; -import org.jetbrains.annotations.NotNull; - -import java.sql.SQLException; - -public abstract class EasySQLTest { - - @ApiStatus.OverrideOnly - public abstract void onTest(SQLManager sqlManager) throws SQLException; - - public boolean executeTest(int index, SQLManager sqlManager) { - String testName = getClass().getSimpleName(); - - print(" #%s 测试 @%s 开始", index, testName); - long start = System.currentTimeMillis(); - - try { - onTest(sqlManager); - print(" #%s 测试 @%s 成功,耗时 %s ms。", index, testName, (System.currentTimeMillis() - start)); - return true; - } catch (Exception exception) { - print(" #%s 测试 @%s 失败,耗时 %s ms。", index, testName, (System.currentTimeMillis() - start)); - exception.printStackTrace(); - return false; - } - } - - protected static void print(@NotNull String format, Object... params) { - Main.print(format, params); - } - - -} diff --git a/example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/Main.java b/example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/Main.java deleted file mode 100644 index 021c450..0000000 --- a/example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/Main.java +++ /dev/null @@ -1,93 +0,0 @@ -package cc.carm.lib.easysql.testrunner; - -import cc.carm.lib.easysql.EasySQL; -import cc.carm.lib.easysql.api.SQLManager; -import cc.carm.lib.easysql.testrunner.tests.DeleteTest; -import cc.carm.lib.easysql.testrunner.tests.QueryCloseTest; -import cc.carm.lib.easysql.testrunner.tests.QueryFunctionTest; -import cc.carm.lib.easysql.testrunner.tests.TableCreateTest; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.TestOnly; - -import java.util.Iterator; -import java.util.LinkedHashSet; -import java.util.Scanner; -import java.util.Set; - -@TestOnly -@SuppressWarnings("all") -public class Main { - - public static void main(String[] args) { - if (args.length < 4) { - print("请提供以下参数:<数据库驱动> <数据库地址(JDBC)> <数据库用户> <数据库密码> [是否采用DEBUG(y/n)]"); - return; - } - - SQLManager sqlManager; - try { - print("初始化 SQLManager..."); - print("数据库驱动 %s", args[0]); - print("数据库地址 %s", args[1]); - print("数据库用户 %s", args[2]); - print("数据库密码 %s", args[3]); - sqlManager = EasySQL.createManager(args[0], args[1], args[2], args[3]); - sqlManager.setDebugMode(args.length > 4); - print("SQLManager 初始化完成!"); - } catch (Exception exception) { - print("SQLManager 初始化失败,请检查数据库配置。"); - exception.printStackTrace(); - return; - } - - print("加载测试类..."); - Set tests = new LinkedHashSet<>(); - tests.add(new TableCreateTest()); -// tests.add(new TableAlterTest()); -// tests.add(new TableRenameTest()); -// tests.add(new QueryNotCloseTest()); - tests.add(new QueryCloseTest()); -// tests.add(new SQLUpdateBatchTests()); -// tests.add(new SQLUpdateReturnKeysTest()); - tests.add(new QueryFunctionTest()); - tests.add(new DeleteTest()); - - print("准备进行测试..."); - - int index = 1; - int success = 0; - - Iterator testIterator = tests.iterator(); - - print("准备完成,请按回车键开始执行测试。"); - - while (testIterator.hasNext()) { - Scanner scanner = new Scanner(System.in); - - if (scanner.nextLine() != null) { - - EasySQLTest currentTest = testIterator.next(); - - if (currentTest.executeTest(index, sqlManager)) { - success++; - } - - index++; - } - - } - - print(" "); - print("全部测试执行完毕,成功 %s 个,失败 %s 个。", - success, (tests.size() - success) - ); - - EasySQL.shutdownManager(sqlManager); - - } - - public static void print(@NotNull String format, Object... params) { - System.out.printf((format) + "%n", params); - } - -} diff --git a/example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/tests/DeleteTest.java b/example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/tests/DeleteTest.java deleted file mode 100644 index 4f826da..0000000 --- a/example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/tests/DeleteTest.java +++ /dev/null @@ -1,22 +0,0 @@ -package cc.carm.lib.easysql.testrunner.tests; - -import cc.carm.lib.easysql.api.SQLManager; -import cc.carm.lib.easysql.testrunner.EasySQLTest; - -import java.sql.SQLException; - -public class DeleteTest extends EasySQLTest { - - - @Override - public void onTest(SQLManager sqlManager) throws SQLException { - - Integer changes = sqlManager.createDelete("test_user_table") - .addCondition("id", ">", 5) - .addNotNullCondition("username") - .build().execute(); - - System.out.println("change(s): " + changes); - - } -} diff --git a/example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/tests/QueryCloseTest.java b/example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/tests/QueryCloseTest.java deleted file mode 100644 index ca6d29b..0000000 --- a/example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/tests/QueryCloseTest.java +++ /dev/null @@ -1,31 +0,0 @@ -package cc.carm.lib.easysql.testrunner.tests; - -import cc.carm.lib.easysql.api.SQLManager; -import cc.carm.lib.easysql.api.SQLQuery; -import cc.carm.lib.easysql.testrunner.EasySQLTest; - -import java.sql.ResultSet; -import java.sql.SQLException; - -public class QueryCloseTest extends EasySQLTest { - - - @Override - public void onTest(SQLManager sqlManager) throws SQLException { - - try (SQLQuery query = sqlManager.createQuery() - .inTable("test_user_table") - .orderBy("id", false) - .setLimit(5) - .build().execute()) { - ResultSet resultSet = query.getResultSet(); - - while (resultSet.next()) { - - System.out.println("id: " + resultSet.getInt("id") + " username: " + resultSet.getString("username")); - - } - } - - } -} diff --git a/example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/tests/QueryFunctionTest.java b/example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/tests/QueryFunctionTest.java deleted file mode 100644 index 3d90fc6..0000000 --- a/example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/tests/QueryFunctionTest.java +++ /dev/null @@ -1,34 +0,0 @@ -package cc.carm.lib.easysql.testrunner.tests; - -import cc.carm.lib.easysql.api.SQLManager; -import cc.carm.lib.easysql.testrunner.EasySQLTest; - -import java.sql.SQLException; - -public class QueryFunctionTest extends EasySQLTest { - - - @Override - public void onTest(SQLManager sqlManager) throws SQLException { - - Integer id_1 = sqlManager.createQuery() - .inTable("test_user_table") - .orderBy("id", false) - .setLimit(1) - .build().executeFunction(query -> { - if (!query.getResultSet().next()) return -1; - else return query.getResultSet().getInt("id"); - }); - - System.out.println("id (ps): " + id_1); - - Integer id_2 = sqlManager.createQuery().withSQL("SELECT id FROM test_user_table ORDER BY id DESC LIMIT 1") - .executeFunction(query -> { - if (!query.getResultSet().next()) return -1; - else return query.getResultSet().getInt("id"); - }); - - System.out.println("id (s): " + id_2); - - } -} diff --git a/example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/tests/QueryNotCloseTest.java b/example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/tests/QueryNotCloseTest.java deleted file mode 100644 index 42a41f5..0000000 --- a/example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/tests/QueryNotCloseTest.java +++ /dev/null @@ -1,30 +0,0 @@ -package cc.carm.lib.easysql.testrunner.tests; - -import cc.carm.lib.easysql.api.SQLManager; -import cc.carm.lib.easysql.api.SQLQuery; -import cc.carm.lib.easysql.testrunner.EasySQLTest; - -import java.sql.ResultSet; -import java.sql.SQLException; - -public class QueryNotCloseTest extends EasySQLTest { - - @Override - public void onTest(SQLManager sqlManager) throws SQLException { - SQLQuery query = sqlManager.createQuery() - .inTable("test_user_table") - .orderBy("id", false) - .setLimit(5) - .build().execute(); - - ResultSet resultSet = query.getResultSet(); - - while (resultSet.next()) { - - System.out.println("id: " + resultSet.getInt("id") + " username: " + resultSet.getString("username")); - - } - - - } -} diff --git a/example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/tests/SQLUpdateBatchTests.java b/example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/tests/SQLUpdateBatchTests.java deleted file mode 100644 index afea0a0..0000000 --- a/example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/tests/SQLUpdateBatchTests.java +++ /dev/null @@ -1,38 +0,0 @@ -package cc.carm.lib.easysql.testrunner.tests; - -import cc.carm.lib.easysql.api.SQLManager; -import cc.carm.lib.easysql.testrunner.EasySQLTest; - -import java.sql.SQLException; -import java.util.Arrays; -import java.util.List; -import java.util.UUID; -import java.util.stream.Collectors; -import java.util.stream.IntStream; - -public class SQLUpdateBatchTests extends EasySQLTest { - - - @Override - public void onTest(SQLManager sqlManager) throws SQLException { - - List updates = sqlManager.createInsertBatch("test_user_table") - .setColumnNames("uuid", "username", "age") - .setAllParams(generateParams()) - .execute(); - - System.out.println("changes " + Arrays.toString(updates.toArray())); - - } - - protected List generateParams() { - return IntStream.range(0, 5).mapToObj(i -> generateParam()).collect(Collectors.toList()); - } - - protected Object[] generateParam() { - UUID uuid = UUID.randomUUID(); - return new Object[]{uuid, uuid.toString().substring(0, 5), (int) (Math.random() * 50)}; - } - - -} diff --git a/example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/tests/SQLUpdateReturnKeysTest.java b/example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/tests/SQLUpdateReturnKeysTest.java deleted file mode 100644 index db3f3b8..0000000 --- a/example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/tests/SQLUpdateReturnKeysTest.java +++ /dev/null @@ -1,24 +0,0 @@ -package cc.carm.lib.easysql.testrunner.tests; - -import cc.carm.lib.easysql.api.SQLManager; - -import java.sql.SQLException; -import java.util.Arrays; -import java.util.List; - -public class SQLUpdateReturnKeysTest extends SQLUpdateBatchTests { - - - @Override - public void onTest(SQLManager sqlManager) throws SQLException { - List generatedKeys = sqlManager.createInsertBatch("test_user_table") - .setColumnNames("uuid", "username", "age") - .setAllParams(generateParams()) - .returnGeneratedKeys() - .execute(); - - System.out.println("generated " + Arrays.toString(generatedKeys.toArray())); - } - - -} diff --git a/example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/tests/TableAlterTest.java b/example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/tests/TableAlterTest.java deleted file mode 100644 index b3f13bb..0000000 --- a/example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/tests/TableAlterTest.java +++ /dev/null @@ -1,35 +0,0 @@ -package cc.carm.lib.easysql.testrunner.tests; - -import cc.carm.lib.easysql.api.SQLManager; -import cc.carm.lib.easysql.api.enums.NumberType; -import cc.carm.lib.easysql.testrunner.EasySQLTest; - -import java.sql.SQLException; - -public class TableAlterTest extends EasySQLTest { - - @Override - public void onTest(SQLManager sqlManager) throws SQLException { - - print(" 修改 test_user_table"); - sqlManager.alterTable("test_user_table") - .addColumn("test", "VARCHAR(16) NOT NULL") - .execute(); - - sqlManager.alterTable("test_user_table") - .addColumn("test2", "VARCHAR(16) NOT NULL", "username") - .execute(); - - - print(" 修改 test_user_info"); - sqlManager.alterTable("test_user_info") - .addAutoIncrementColumn("num", NumberType.BIGINT, false, true) - .execute(); - - sqlManager.alterTable("test_user_info") - .addColumn("a", "VARCHAR(16) NOT NULL", "") - .execute(); - - } - -} diff --git a/example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/tests/TableCreateTest.java b/example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/tests/TableCreateTest.java deleted file mode 100644 index bf9ac06..0000000 --- a/example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/tests/TableCreateTest.java +++ /dev/null @@ -1,38 +0,0 @@ -package cc.carm.lib.easysql.testrunner.tests; - -import cc.carm.lib.easysql.api.SQLManager; -import cc.carm.lib.easysql.api.enums.ForeignKeyRule; -import cc.carm.lib.easysql.api.enums.IndexType; -import cc.carm.lib.easysql.testrunner.EasySQLTest; - -import java.sql.SQLException; - -public class TableCreateTest extends EasySQLTest { - - @Override - public void onTest(SQLManager sqlManager) throws SQLException { - - print(" 创建 test_user_table"); - sqlManager.createTable("test_user_table") - .addAutoIncrementColumn("id") - .addColumn("uuid", "VARCHAR(36) NOT NULL", "用户UUID") - .addColumn("username", "VARCHAR(16) NOT NULL", "用户名") - .addColumn("age", "TINYINT DEFAULT 0 NOT NULL", "年龄") - - .setIndex("uuid", IndexType.UNIQUE_KEY) - .build().execute(); - - print(" 创建 test_user_info"); - sqlManager.createTable("test_user_info") - .addColumn("uid", "INT UNSIGNED NOT NULL") - .addColumn("info", "TEXT", "相关信息") - .addForeignKey("uid", "user", - "test_user_table", "id", - ForeignKeyRule.CASCADE, ForeignKeyRule.CASCADE - ) - .setIndex(IndexType.FULLTEXT_INDEX, "sign", "info") - .build().execute(); - - } - -} diff --git a/example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/tests/TableRenameTest.java b/example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/tests/TableRenameTest.java deleted file mode 100644 index 58fde99..0000000 --- a/example/easysql-test/src/main/java/cc/carm/lib/easysql/testrunner/tests/TableRenameTest.java +++ /dev/null @@ -1,16 +0,0 @@ -package cc.carm.lib.easysql.testrunner.tests; - -import cc.carm.lib.easysql.api.SQLManager; -import cc.carm.lib.easysql.testrunner.EasySQLTest; - -import java.sql.SQLException; - -public class TableRenameTest extends EasySQLTest { - @Override - public void onTest(SQLManager sqlManager) throws SQLException { - print(" 重命名 test_user_table"); - sqlManager.alterTable("test_user_table") - .renameTo("test_user_table2") - .execute(); - } -} diff --git a/example/easysql-test/pom.xml b/example/easysql-tester/pom.xml similarity index 98% rename from example/easysql-test/pom.xml rename to example/easysql-tester/pom.xml index 049a35d..3a90ad1 100644 --- a/example/easysql-test/pom.xml +++ b/example/easysql-tester/pom.xml @@ -115,7 +115,7 @@ - cc.carm.lib.easysql.testrunner.Main + cc.carm.lib.easysql.tester.Main diff --git a/example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/EasySQLTest.java b/example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/EasySQLTest.java new file mode 100644 index 0000000..540e645 --- /dev/null +++ b/example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/EasySQLTest.java @@ -0,0 +1,36 @@ +package cc.carm.lib.easysql.tester; + +import cc.carm.lib.easysql.api.SQLManager; +import org.jetbrains.annotations.ApiStatus; +import org.jetbrains.annotations.NotNull; + +import java.sql.SQLException; + +public abstract class EasySQLTest { + + protected static void print(@NotNull String format, Object... params) { + Main.print(format, params); + } + + @ApiStatus.OverrideOnly + public abstract void onTest(SQLManager sqlManager) throws SQLException; + + public boolean executeTest(int index, SQLManager sqlManager) { + String testName = getClass().getSimpleName(); + + print(" #%s 测试 @%s 开始", index, testName); + long start = System.currentTimeMillis(); + + try { + onTest(sqlManager); + print(" #%s 测试 @%s 成功,耗时 %s ms。", index, testName, (System.currentTimeMillis() - start)); + return true; + } catch (Exception exception) { + print(" #%s 测试 @%s 失败,耗时 %s ms。", index, testName, (System.currentTimeMillis() - start)); + exception.printStackTrace(); + return false; + } + } + + +} diff --git a/example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/Main.java b/example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/Main.java new file mode 100644 index 0000000..1651693 --- /dev/null +++ b/example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/Main.java @@ -0,0 +1,93 @@ +package cc.carm.lib.easysql.tester; + +import cc.carm.lib.easysql.EasySQL; +import cc.carm.lib.easysql.api.SQLManager; +import cc.carm.lib.easysql.tester.tests.DeleteTest; +import cc.carm.lib.easysql.tester.tests.QueryCloseTest; +import cc.carm.lib.easysql.tester.tests.QueryFunctionTest; +import cc.carm.lib.easysql.tester.tests.TableCreateTest; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.TestOnly; + +import java.util.Iterator; +import java.util.LinkedHashSet; +import java.util.Scanner; +import java.util.Set; + +@TestOnly +@SuppressWarnings("all") +public class Main { + + public static void main(String[] args) { + if (args.length < 4) { + print("请提供以下参数:<数据库驱动> <数据库地址(JDBC)> <数据库用户> <数据库密码> [是否采用DEBUG(y/n)]"); + return; + } + + SQLManager sqlManager; + try { + print("初始化 SQLManager..."); + print("数据库驱动 %s", args[0]); + print("数据库地址 %s", args[1]); + print("数据库用户 %s", args[2]); + print("数据库密码 %s", args[3]); + sqlManager = EasySQL.createManager(args[0], args[1], args[2], args[3]); + sqlManager.setDebugMode(args.length > 4); + print("SQLManager 初始化完成!"); + } catch (Exception exception) { + print("SQLManager 初始化失败,请检查数据库配置。"); + exception.printStackTrace(); + return; + } + + print("加载测试类..."); + Set tests = new LinkedHashSet<>(); + tests.add(new TableCreateTest()); +// tests.add(new TableAlterTest()); +// tests.add(new TableRenameTest()); +// tests.add(new QueryNotCloseTest()); + tests.add(new QueryCloseTest()); +// tests.add(new SQLUpdateBatchTests()); +// tests.add(new SQLUpdateReturnKeysTest()); + tests.add(new QueryFunctionTest()); + tests.add(new DeleteTest()); + + print("准备进行测试..."); + + int index = 1; + int success = 0; + + Iterator testIterator = tests.iterator(); + + print("准备完成,请按回车键开始执行测试。"); + + while (testIterator.hasNext()) { + Scanner scanner = new Scanner(System.in); + + if (scanner.nextLine() != null) { + + EasySQLTest currentTest = testIterator.next(); + + if (currentTest.executeTest(index, sqlManager)) { + success++; + } + + index++; + } + + } + + print(" "); + print("全部测试执行完毕,成功 %s 个,失败 %s 个。", + success, (tests.size() - success) + ); + + EasySQL.shutdownManager(sqlManager); + + } + + public static void print(@NotNull String format, Object... params) { + System.out.printf((format) + "%n", params); + } + +} diff --git a/example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/tests/DeleteTest.java b/example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/tests/DeleteTest.java new file mode 100644 index 0000000..d1ab74e --- /dev/null +++ b/example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/tests/DeleteTest.java @@ -0,0 +1,22 @@ +package cc.carm.lib.easysql.tester.tests; + +import cc.carm.lib.easysql.api.SQLManager; +import cc.carm.lib.easysql.tester.EasySQLTest; + +import java.sql.SQLException; + +public class DeleteTest extends EasySQLTest { + + + @Override + public void onTest(SQLManager sqlManager) throws SQLException { + + Integer changes = sqlManager.createDelete("test_user_table") + .addCondition("id", ">", 5) + .addNotNullCondition("username") + .build().execute(); + + System.out.println("change(s): " + changes); + + } +} diff --git a/example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/tests/QueryCloseTest.java b/example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/tests/QueryCloseTest.java new file mode 100644 index 0000000..9c0a32e --- /dev/null +++ b/example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/tests/QueryCloseTest.java @@ -0,0 +1,35 @@ +package cc.carm.lib.easysql.tester.tests; + +import cc.carm.lib.easysql.api.SQLManager; +import cc.carm.lib.easysql.api.SQLQuery; +import cc.carm.lib.easysql.tester.EasySQLTest; + +import java.sql.ResultSet; +import java.sql.SQLException; + +public class QueryCloseTest extends EasySQLTest { + + + @Override + public void onTest(SQLManager sqlManager) throws SQLException { + + try (SQLQuery query = sqlManager.createQuery() + .inTable("test_user_table") + .orderBy("id", false) + .setLimit(5) + .build().execute()) { + ResultSet resultSet = query.getResultSet(); + + while (resultSet.next()) { + + System.out.printf( + "id: %d username: %s%n", + resultSet.getInt("id"), + resultSet.getString("username") + ); + + } + } + + } +} diff --git a/example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/tests/QueryFunctionTest.java b/example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/tests/QueryFunctionTest.java new file mode 100644 index 0000000..5c64f01 --- /dev/null +++ b/example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/tests/QueryFunctionTest.java @@ -0,0 +1,26 @@ +package cc.carm.lib.easysql.tester.tests; + +import cc.carm.lib.easysql.api.SQLManager; +import cc.carm.lib.easysql.tester.EasySQLTest; + +import java.sql.SQLException; + +public class QueryFunctionTest extends EasySQLTest { + + + @Override + public void onTest(SQLManager sqlManager) throws SQLException { + + Integer id_1 = sqlManager.createQuery() + .inTable("test_user_table") + .orderBy("id", false) + .setLimit(1) + .build().executeFunction(query -> { + if (!query.getResultSet().next()) return -1; + else return query.getResultSet().getInt("id"); + }); + + System.out.println("id (ps): " + id_1); + + } +} diff --git a/example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/tests/QueryNotCloseTest.java b/example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/tests/QueryNotCloseTest.java new file mode 100644 index 0000000..d057714 --- /dev/null +++ b/example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/tests/QueryNotCloseTest.java @@ -0,0 +1,30 @@ +package cc.carm.lib.easysql.tester.tests; + +import cc.carm.lib.easysql.api.SQLManager; +import cc.carm.lib.easysql.api.SQLQuery; +import cc.carm.lib.easysql.tester.EasySQLTest; + +import java.sql.ResultSet; +import java.sql.SQLException; + +public class QueryNotCloseTest extends EasySQLTest { + + @Override + public void onTest(SQLManager sqlManager) throws SQLException { + SQLQuery query = sqlManager.createQuery() + .inTable("test_user_table") + .orderBy("id", false) + .setLimit(5) + .build().execute(); + + ResultSet resultSet = query.getResultSet(); + + while (resultSet.next()) { + + System.out.printf("id: %d username: %s%n", resultSet.getInt("id"), resultSet.getString("username")); + + } + + + } +} diff --git a/example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/tests/SQLUpdateBatchTests.java b/example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/tests/SQLUpdateBatchTests.java new file mode 100644 index 0000000..7294dce --- /dev/null +++ b/example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/tests/SQLUpdateBatchTests.java @@ -0,0 +1,38 @@ +package cc.carm.lib.easysql.tester.tests; + +import cc.carm.lib.easysql.api.SQLManager; +import cc.carm.lib.easysql.tester.EasySQLTest; + +import java.sql.SQLException; +import java.util.Arrays; +import java.util.List; +import java.util.UUID; +import java.util.stream.Collectors; +import java.util.stream.IntStream; + +public class SQLUpdateBatchTests extends EasySQLTest { + + + protected static List generateParams() { + return IntStream.range(0, 5).mapToObj(i -> generateParam()).collect(Collectors.toList()); + } + + protected static Object[] generateParam() { + UUID uuid = UUID.randomUUID(); + return new Object[]{uuid, uuid.toString().substring(0, 5), (int) (Math.random() * 50)}; + } + + @Override + public void onTest(SQLManager sqlManager) throws SQLException { + + List updates = sqlManager.createInsertBatch("test_user_table") + .setColumnNames("uuid", "username", "age") + .setAllParams(generateParams()) + .execute(); + + System.out.println("changes " + Arrays.toString(updates.toArray())); + + } + + +} diff --git a/example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/tests/SQLUpdateReturnKeysTest.java b/example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/tests/SQLUpdateReturnKeysTest.java new file mode 100644 index 0000000..67c7159 --- /dev/null +++ b/example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/tests/SQLUpdateReturnKeysTest.java @@ -0,0 +1,24 @@ +package cc.carm.lib.easysql.tester.tests; + +import cc.carm.lib.easysql.api.SQLManager; + +import java.sql.SQLException; +import java.util.Arrays; +import java.util.List; + +public class SQLUpdateReturnKeysTest extends SQLUpdateBatchTests { + + + @Override + public void onTest(SQLManager sqlManager) throws SQLException { + List generatedKeys = sqlManager.createInsertBatch("test_user_table") + .setColumnNames("uuid", "username", "age") + .setAllParams(generateParams()) + .returnGeneratedKeys() + .execute(); + + System.out.println("generated " + Arrays.toString(generatedKeys.toArray())); + } + + +} diff --git a/example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/tests/TableAlterTest.java b/example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/tests/TableAlterTest.java new file mode 100644 index 0000000..89dce3d --- /dev/null +++ b/example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/tests/TableAlterTest.java @@ -0,0 +1,35 @@ +package cc.carm.lib.easysql.tester.tests; + +import cc.carm.lib.easysql.api.SQLManager; +import cc.carm.lib.easysql.api.enums.NumberType; +import cc.carm.lib.easysql.tester.EasySQLTest; + +import java.sql.SQLException; + +public class TableAlterTest extends EasySQLTest { + + @Override + public void onTest(SQLManager sqlManager) throws SQLException { + + print(" 修改 test_user_table"); + sqlManager.alterTable("test_user_table") + .addColumn("test", "VARCHAR(16) NOT NULL") + .execute(); + + sqlManager.alterTable("test_user_table") + .addColumn("test2", "VARCHAR(16) NOT NULL", "username") + .execute(); + + + print(" 修改 test_user_info"); + sqlManager.alterTable("test_user_info") + .addAutoIncrementColumn("num", NumberType.BIGINT, false, true) + .execute(); + + sqlManager.alterTable("test_user_info") + .addColumn("a", "VARCHAR(16) NOT NULL", "") + .execute(); + + } + +} diff --git a/example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/tests/TableCreateTest.java b/example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/tests/TableCreateTest.java new file mode 100644 index 0000000..6e86c88 --- /dev/null +++ b/example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/tests/TableCreateTest.java @@ -0,0 +1,38 @@ +package cc.carm.lib.easysql.tester.tests; + +import cc.carm.lib.easysql.api.SQLManager; +import cc.carm.lib.easysql.api.enums.ForeignKeyRule; +import cc.carm.lib.easysql.api.enums.IndexType; +import cc.carm.lib.easysql.tester.EasySQLTest; + +import java.sql.SQLException; + +public class TableCreateTest extends EasySQLTest { + + @Override + public void onTest(SQLManager sqlManager) throws SQLException { + + print(" 创建 test_user_table"); + sqlManager.createTable("test_user_table") + .addAutoIncrementColumn("id") + .addColumn("uuid", "VARCHAR(36) NOT NULL", "用户UUID") + .addColumn("username", "VARCHAR(16) NOT NULL", "用户名") + .addColumn("age", "TINYINT DEFAULT 0 NOT NULL", "年龄") + + .setIndex("uuid", IndexType.UNIQUE_KEY) + .build().execute(); + + print(" 创建 test_user_info"); + sqlManager.createTable("test_user_info") + .addColumn("uid", "INT UNSIGNED NOT NULL") + .addColumn("info", "TEXT", "相关信息") + .addForeignKey("uid", "user", + "test_user_table", "id", + ForeignKeyRule.CASCADE, ForeignKeyRule.CASCADE + ) + .setIndex(IndexType.FULLTEXT_INDEX, "sign", "info") + .build().execute(); + + } + +} diff --git a/example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/tests/TableRenameTest.java b/example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/tests/TableRenameTest.java new file mode 100644 index 0000000..8c4441d --- /dev/null +++ b/example/easysql-tester/src/main/java/cc/carm/lib/easysql/tester/tests/TableRenameTest.java @@ -0,0 +1,16 @@ +package cc.carm.lib.easysql.tester.tests; + +import cc.carm.lib.easysql.api.SQLManager; +import cc.carm.lib.easysql.tester.EasySQLTest; + +import java.sql.SQLException; + +public class TableRenameTest extends EasySQLTest { + @Override + public void onTest(SQLManager sqlManager) throws SQLException { + print(" 重命名 test_user_table"); + sqlManager.alterTable("test_user_table") + .renameTo("test_user_table2") + .execute(); + } +} diff --git a/example/easysql-test/src/main/resources/log4j2.xml b/example/easysql-tester/src/main/resources/log4j2.xml similarity index 100% rename from example/easysql-test/src/main/resources/log4j2.xml rename to example/easysql-tester/src/main/resources/log4j2.xml diff --git a/with-pool/easysql-hikaricp/pom.xml b/with-pool/easysql-hikaricp/pom.xml index dae57e7..b7251af 100644 --- a/with-pool/easysql-hikaricp/pom.xml +++ b/with-pool/easysql-hikaricp/pom.xml @@ -72,6 +72,7 @@ com.zaxxer HikariCP + 4.0.3 true compile