From a88843f768961db32894d2d44b818336708d5b1a Mon Sep 17 00:00:00 2001 From: carm Date: Sun, 16 Oct 2022 23:49:53 +0800 Subject: [PATCH] =?UTF-8?q?feat(sql):=20=E9=A2=84=E5=A4=87=E6=94=AF?= =?UTF-8?q?=E6=8C=81=E4=BA=8B=E5=8A=A1(v0.5.0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../carm/lib/easysql/api/NewSQLManager.java | 152 +++++++++++++++ .../cc/carm/lib/easysql/api/SQLManager.java | 4 +- .../cc/carm/lib/easysql/api/SQLSource.java | 175 ++++++++++++++++++ .../cc/carm/lib/easysql/api/SQLTable.java | 4 +- .../api/action/PreparedSQLUpdateAction.java | 4 +- .../easysql/api/action/SQLTransaction.java | 19 ++ .../api/builder/ConditionalBuilder.java | 6 +- .../easysql/api/builder/InsertBuilder.java | 6 +- .../lib/easysql/api/builder/QueryBuilder.java | 2 +- .../easysql/api/builder/ReplaceBuilder.java | 6 +- .../api/builder/TableCreateBuilder.java | 2 +- .../api/builder/TableQueryBuilder.java | 4 +- .../easysql/api/builder/UpdateBuilder.java | 14 +- .../easysql/api/condition/SQLCondition.java | 4 + demo/src/main/java/EasySQLDemo.java | 22 +-- .../cc/carm/lib/easysql/DemoTransaction.java | 12 ++ .../lib/easysql/tests/QueryAsyncTest.java | 4 +- .../lib/easysql/tests/QueryCloseTest.java | 4 +- .../lib/easysql/tests/QueryFunctionTest.java | 4 +- .../lib/easysql/tests/QueryFutureTest.java | 4 +- .../lib/easysql/tests/QueryNotCloseTest.java | 4 +- .../easysql/tests/SQLUpdateBatchTests.java | 2 +- .../tests/SQLUpdateReturnKeysTest.java | 2 +- .../action/PreparedSQLUpdateActionImpl.java | 8 +- .../impl/AbstractConditionalBuilder.java | 6 +- .../builder/impl/QueryBuilderImpl.java | 2 +- .../builder/impl/TableCreateBuilderImpl.java | 2 +- .../builder/impl/TableQueryBuilderImpl.java | 4 +- .../builder/impl/UpdateBuilderImpl.java | 8 +- .../lib/easysql/manager/SQLManagerImpl.java | 8 +- 30 files changed, 429 insertions(+), 69 deletions(-) create mode 100644 api/src/main/java/cc/carm/lib/easysql/api/NewSQLManager.java create mode 100644 api/src/main/java/cc/carm/lib/easysql/api/SQLSource.java create mode 100644 api/src/main/java/cc/carm/lib/easysql/api/action/SQLTransaction.java create mode 100644 api/src/main/java/cc/carm/lib/easysql/api/condition/SQLCondition.java create mode 100644 demo/src/test/java/cc/carm/lib/easysql/DemoTransaction.java diff --git a/api/src/main/java/cc/carm/lib/easysql/api/NewSQLManager.java b/api/src/main/java/cc/carm/lib/easysql/api/NewSQLManager.java new file mode 100644 index 0000000..49ba641 --- /dev/null +++ b/api/src/main/java/cc/carm/lib/easysql/api/NewSQLManager.java @@ -0,0 +1,152 @@ +package cc.carm.lib.easysql.api; + +import cc.carm.lib.easysql.api.action.PreparedSQLUpdateAction; +import cc.carm.lib.easysql.api.action.PreparedSQLUpdateBatchAction; +import cc.carm.lib.easysql.api.builder.*; +import cc.carm.lib.easysql.api.function.SQLBiFunction; +import cc.carm.lib.easysql.api.function.SQLFunction; +import org.jetbrains.annotations.NotNull; + +import java.sql.Connection; +import java.sql.DatabaseMetaData; +import java.sql.ResultSet; +import java.util.concurrent.CompletableFuture; + +public interface NewSQLManager { + + /** + * 得到用于该管理器的 {@link SQLSource} + * + * @return {@link SQLSource} + */ + @NotNull SQLSource getSource(); + + /** + * 获取并操作 {@link DatabaseMetaData} 以得到需要的数据库消息。 + * + * @param reader 操作与读取的方法 + * @param 最终结果的返回类型 + * @return 最终结果,通过 {@link CompletableFuture#get()} 可阻塞并等待结果返回。 + */ + default CompletableFuture fetchMetadata(@NotNull SQLFunction reader) { + return fetchMetadata((meta, conn) -> reader.apply(meta)); + } + + /** + * 获取并操作 {@link DatabaseMetaData} 提供的指定 {@link ResultSet} 以得到需要的数据库消息。 + *
该方法会自动关闭 {@link ResultSet} 。 + * + * @param supplier 操作 {@link DatabaseMetaData} 以提供信息所在的 {@link ResultSet} + * @param reader 读取 {@link ResultSet} 中指定信息的方法 + * @param 最终结果的返回类型 + * @return 最终结果,通过 {@link CompletableFuture#get()} 可阻塞并等待结果返回。 + * @throws NullPointerException 当 supplier 提供的 {@link ResultSet} 为NULL时抛出 + */ + default CompletableFuture fetchMetadata(@NotNull SQLFunction supplier, + @NotNull SQLFunction<@NotNull ResultSet, R> reader) { + return fetchMetadata((meta, conn) -> supplier.apply(meta), reader); + } + + /** + * 获取并操作 {@link DatabaseMetaData} 以得到需要的数据库消息。 + * + * @param reader 操作与读取的方法 + * @param 最终结果的返回类型 + * @return 最终结果,通过 {@link CompletableFuture#get()} 可阻塞并等待结果返回。 + */ + CompletableFuture fetchMetadata(@NotNull SQLBiFunction reader); + + /** + * 获取并操作 {@link DatabaseMetaData} 提供的指定 {@link ResultSet} 以得到需要的数据库消息。 + *
该方法会自动关闭 {@link ResultSet} 。 + * + * @param supplier 操作 {@link DatabaseMetaData} 以提供信息所在的 {@link ResultSet} + * @param reader 读取 {@link ResultSet} 中指定信息的方法 + * @param 最终结果的返回类型 + * @return 最终结果,通过 {@link CompletableFuture#get()} 可阻塞并等待结果返回。 + * @throws NullPointerException 当 supplier 提供的 {@link ResultSet} 为NULL时抛出 + */ + CompletableFuture fetchMetadata(@NotNull SQLBiFunction supplier, + @NotNull SQLFunction<@NotNull ResultSet, R> reader); + + /** + * 在库中创建一个表。 + * + * @param tableName 表名 + * @return {@link TableCreateBuilder} + */ + @NotNull TableCreateBuilder createTable(@NotNull String tableName); + + /** + * 对库中的某个表执行更改。 + * + * @param tableName 表名 + * @return {@link TableAlterBuilder} + */ + @NotNull TableAlterBuilder alterTable(@NotNull String tableName); + + /** + * 快速获取表的部分元数据。 + *
当需要获取其他元数据时,请使用 {@link #fetchMetadata(SQLFunction, SQLFunction)} 方法。 + * + * @param tablePattern 表名通配符 + * @return {@link TableMetadataBuilder} + */ + @NotNull TableMetadataBuilder fetchTableMetadata(@NotNull String tablePattern); + + /** + * 新建一个查询。 + * + * @return {@link QueryBuilder} + */ + @NotNull QueryBuilder createQuery(); + + /** + * 创建一条插入操作。 + * + * @param tableName 目标表名 + * @return {@link InsertBuilder} + */ + @NotNull InsertBuilder> insertInto(@NotNull String tableName); + + /** + * 创建支持多组数据的插入操作。 + * + * @param tableName 目标表名 + * @return {@link InsertBuilder} + */ + @NotNull InsertBuilder> insertBatchInto(@NotNull String tableName); + + /** + * 创建一条替换操作。 + * + * @param tableName 目标表名 + * @return {@link ReplaceBuilder} + */ + @NotNull ReplaceBuilder> replaceInto(@NotNull String tableName); + + /** + * 创建支持多组数据的替换操作。 + * + * @param tableName 目标表名 + * @return {@link ReplaceBuilder} + */ + @NotNull ReplaceBuilder> replaceBatchInto(@NotNull String tableName); + + /** + * 创建更新操作。 + * + * @param tableName 目标表名 + * @return {@link UpdateBuilder} + */ + @NotNull UpdateBuilder updateInto(@NotNull String tableName); + + /** + * 创建删除操作。 + * + * @param tableName 目标表名 + * @return {@link DeleteBuilder} + */ + @NotNull DeleteBuilder deleteFrom(@NotNull String tableName); + +} diff --git a/api/src/main/java/cc/carm/lib/easysql/api/SQLManager.java b/api/src/main/java/cc/carm/lib/easysql/api/SQLManager.java index 10661ee..bf0a85e 100644 --- a/api/src/main/java/cc/carm/lib/easysql/api/SQLManager.java +++ b/api/src/main/java/cc/carm/lib/easysql/api/SQLManager.java @@ -35,9 +35,6 @@ public interface SQLManager { Logger getLogger(); - boolean isDebugMode(); - - /** * 获取用于执行 {@link SQLAction#executeAsync()} 的线程池。 *
默认线程池为 {@link #defaultExecutorPool(String)} 。 @@ -62,6 +59,7 @@ public interface SQLManager { }); } + boolean isDebugMode(); /** * 设定是否启用调试模式。 diff --git a/api/src/main/java/cc/carm/lib/easysql/api/SQLSource.java b/api/src/main/java/cc/carm/lib/easysql/api/SQLSource.java new file mode 100644 index 0000000..ff54ccd --- /dev/null +++ b/api/src/main/java/cc/carm/lib/easysql/api/SQLSource.java @@ -0,0 +1,175 @@ +package cc.carm.lib.easysql.api; + +import cc.carm.lib.easysql.api.action.PreparedSQLUpdateAction; +import cc.carm.lib.easysql.api.action.PreparedSQLUpdateBatchAction; +import cc.carm.lib.easysql.api.action.SQLUpdateAction; +import cc.carm.lib.easysql.api.action.SQLUpdateBatchAction; +import cc.carm.lib.easysql.api.function.SQLDebugHandler; +import cc.carm.lib.easysql.api.function.SQLExceptionHandler; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; +import org.slf4j.Logger; + +import javax.sql.DataSource; +import java.sql.Connection; +import java.sql.SQLException; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.function.Supplier; + +public interface SQLSource { + + Logger getLogger(); + + /** + * 获取用于执行 {@link SQLAction#executeAsync()} 的线程池。 + *
默认线程池为 {@link #defaultExecutorPool(String)} 。 + * + * @return {@link ExecutorService} + */ + @NotNull ExecutorService getExecutorPool(); + + /** + * 设定用于执行 {@link SQLAction#executeAsync()} 的线程池. + *
默认线程池为 {@link #defaultExecutorPool(String)} 。 + * + * @param executorPool {@link ExecutorService} + */ + void setExecutorPool(@NotNull ExecutorService executorPool); + + static @NotNull ExecutorService defaultExecutorPool(@NotNull String threadName) { + return Executors.newFixedThreadPool(4, r -> { + Thread thread = new Thread(r, threadName); + thread.setDaemon(true); + return thread; + }); + } + + boolean isDebugMode(); + + /** + * 设定是否启用调试模式。 + * 启用调试模式后,会在每次执行SQL语句时,调用 {@link #getDebugHandler()} 来输出调试信息。 + * + * @param debugMode 是否启用调试模式 + */ + void setDebugMode(@NotNull Supplier<@NotNull Boolean> debugMode); + + /** + * 设定是否启用调试模式。 + * 启用调试模式后,会在每次执行SQL语句时,调用 {@link #getDebugHandler()} 来输出调试信息。 + * + * @param enable 是否启用调试模式 + */ + default void setDebugMode(boolean enable) { + setDebugMode(() -> enable); + } + + /** + * 获取调试处理器,用于处理调试信息。 + * + * @return {@link SQLDebugHandler} + */ + @NotNull SQLDebugHandler getDebugHandler(); + + /** + * 设定调试处理器,默认为 {@link SQLDebugHandler#defaultHandler(Logger)} 。 + * + * @param debugHandler {@link SQLDebugHandler} + */ + void setDebugHandler(@NotNull SQLDebugHandler debugHandler); + + /** + * 得到连接池源 + * + * @return DataSource + */ + @NotNull DataSource getDataSource(); + + /** + * 得到一个数据库连接实例 + * + * @return Connection + * @throws SQLException 见 {@link DataSource#getConnection()} + */ + @NotNull Connection getConnection() throws SQLException; + + /** + * 得到正使用的查询。 + * + * @return 查询列表 + */ + @NotNull Map getActiveQuery(); + + /** + * 获取改管理器提供的默认异常处理器。 + * 若未使用过 {@link #setExceptionHandler(SQLExceptionHandler)} 方法, + * 则默认返回 {@link SQLExceptionHandler#detailed(Logger)} 。 + * + * @return {@link SQLExceptionHandler} + */ + @NotNull SQLExceptionHandler getExceptionHandler(); + + /** + * 设定通用的异常处理器。 + *
在使用 {@link SQLAction#execute(SQLExceptionHandler)} 等相关方法时,若传入的处理器为null,则会采用此处理器。 + *
若该方法传入参数为 null,则会使用 {@link SQLExceptionHandler#detailed(Logger)} 。 + * + * @param handler 异常处理器 + */ + void setExceptionHandler(@Nullable SQLExceptionHandler handler); + + /** + * 执行一条不需要返回结果的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 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。 + * + * @param sqlBatch SQL语句内容 + * @return 对应参数返回的行数 + */ + @Nullable List executeSQLBatch(@NotNull Iterable sqlBatch); + +} diff --git a/api/src/main/java/cc/carm/lib/easysql/api/SQLTable.java b/api/src/main/java/cc/carm/lib/easysql/api/SQLTable.java index 553238f..b471511 100644 --- a/api/src/main/java/cc/carm/lib/easysql/api/SQLTable.java +++ b/api/src/main/java/cc/carm/lib/easysql/api/SQLTable.java @@ -45,7 +45,7 @@ public interface SQLTable { static @NotNull NamedSQLTable of(@NotNull String tableName, @NotNull String[] columns, @Nullable String tableSettings) { return of(tableName, builder -> { - builder.setColumns(columns); + builder.columns(columns); if (tableSettings != null) builder.setTableSettings(tableSettings); }); } @@ -79,7 +79,7 @@ public interface SQLTable { } default @NotNull TableQueryBuilder createQuery(@NotNull SQLManager sqlManager) { - return sqlManager.createQuery().inTable(getTableName()); + return sqlManager.createQuery().fromTable(getTableName()); } default @NotNull DeleteBuilder createDelete() { diff --git a/api/src/main/java/cc/carm/lib/easysql/api/action/PreparedSQLUpdateAction.java b/api/src/main/java/cc/carm/lib/easysql/api/action/PreparedSQLUpdateAction.java index 39e6beb..723549d 100644 --- a/api/src/main/java/cc/carm/lib/easysql/api/action/PreparedSQLUpdateAction.java +++ b/api/src/main/java/cc/carm/lib/easysql/api/action/PreparedSQLUpdateAction.java @@ -10,7 +10,7 @@ public interface PreparedSQLUpdateAction extends SQLUpdateActi * @param params 参数内容 * @return {@link PreparedSQLUpdateAction} */ - PreparedSQLUpdateAction setParams(Object... params); + PreparedSQLUpdateAction params(Object... params); /** * 设定SQL语句中所有 ? 对应的参数 @@ -19,6 +19,6 @@ public interface PreparedSQLUpdateAction extends SQLUpdateActi * @return {@link PreparedSQLUpdateAction} * @since 0.4.0 */ - PreparedSQLUpdateAction setParams(@Nullable Iterable params); + PreparedSQLUpdateAction params(@Nullable Iterable params); } diff --git a/api/src/main/java/cc/carm/lib/easysql/api/action/SQLTransaction.java b/api/src/main/java/cc/carm/lib/easysql/api/action/SQLTransaction.java new file mode 100644 index 0000000..ef5c4db --- /dev/null +++ b/api/src/main/java/cc/carm/lib/easysql/api/action/SQLTransaction.java @@ -0,0 +1,19 @@ +package cc.carm.lib.easysql.api.action; + +import cc.carm.lib.easysql.api.SQLManager; + +public class SQLTransaction implements SQLManager { + + public SQLTransaction savepoint() { + return this; + } + + public SQLTransaction releaseSavepoint() { + return this; + } + + public SQLTransaction rollbackToSavepoint() { + return this; + } + +} diff --git a/api/src/main/java/cc/carm/lib/easysql/api/builder/ConditionalBuilder.java b/api/src/main/java/cc/carm/lib/easysql/api/builder/ConditionalBuilder.java index 41b4943..e69fcff 100644 --- a/api/src/main/java/cc/carm/lib/easysql/api/builder/ConditionalBuilder.java +++ b/api/src/main/java/cc/carm/lib/easysql/api/builder/ConditionalBuilder.java @@ -23,7 +23,7 @@ public interface ConditionalBuilder, T extend * @param limit 条数限制 * @return {@link B} */ - B setLimit(int limit); + B limit(int limit); /** * 直接设定条件的源文本,不需要以WHERE开头。 @@ -32,7 +32,7 @@ public interface ConditionalBuilder, T extend * @param condition 条件文本,不需要以WHERE开头。 * @return {@link B} */ - B setConditions(@Nullable String condition); + B where(@Nullable String condition); /** * 直接设定每个条件的文本与其对应数值,将以AND链接,且不需要以WHERE开头。 @@ -41,7 +41,7 @@ public interface ConditionalBuilder, T extend * @param conditionSQLs 条件内容,将以AND链接,且不需要以WHERE开头。 * @return {@link B} */ - B setConditions(LinkedHashMap<@NotNull String, @Nullable Object> conditionSQLs); + B where(LinkedHashMap<@NotNull String, @Nullable Object> conditionSQLs); B addCondition(@Nullable String condition); diff --git a/api/src/main/java/cc/carm/lib/easysql/api/builder/InsertBuilder.java b/api/src/main/java/cc/carm/lib/easysql/api/builder/InsertBuilder.java index 380c133..3777104 100644 --- a/api/src/main/java/cc/carm/lib/easysql/api/builder/InsertBuilder.java +++ b/api/src/main/java/cc/carm/lib/easysql/api/builder/InsertBuilder.java @@ -9,10 +9,10 @@ public interface InsertBuilder> { String getTableName(); - T setColumnNames(List columnNames); + T columns(List columnNames); - default T setColumnNames(String... columnNames) { - return setColumnNames(columnNames == null ? null : Arrays.asList(columnNames)); + default T columns(String... columnNames) { + return columns(columnNames == null ? null : Arrays.asList(columnNames)); } diff --git a/api/src/main/java/cc/carm/lib/easysql/api/builder/QueryBuilder.java b/api/src/main/java/cc/carm/lib/easysql/api/builder/QueryBuilder.java index 4e4dbd6..e78cfba 100644 --- a/api/src/main/java/cc/carm/lib/easysql/api/builder/QueryBuilder.java +++ b/api/src/main/java/cc/carm/lib/easysql/api/builder/QueryBuilder.java @@ -32,6 +32,6 @@ public interface QueryBuilder extends SQLBuilder { * @param tableName 表名 * @return {@link TableQueryBuilder} */ - TableQueryBuilder inTable(@NotNull String tableName); + TableQueryBuilder fromTable(@NotNull String tableName); } diff --git a/api/src/main/java/cc/carm/lib/easysql/api/builder/ReplaceBuilder.java b/api/src/main/java/cc/carm/lib/easysql/api/builder/ReplaceBuilder.java index 87a5c3c..9cd6863 100644 --- a/api/src/main/java/cc/carm/lib/easysql/api/builder/ReplaceBuilder.java +++ b/api/src/main/java/cc/carm/lib/easysql/api/builder/ReplaceBuilder.java @@ -16,10 +16,10 @@ public interface ReplaceBuilder> { String getTableName(); - T setColumnNames(List columnNames); + T columns(List columnNames); - default T setColumnNames(String... columnNames) { - return setColumnNames(columnNames == null ? null : Arrays.asList(columnNames)); + default T columns(String... columnNames) { + return columns(columnNames == null ? null : Arrays.asList(columnNames)); } } diff --git a/api/src/main/java/cc/carm/lib/easysql/api/builder/TableCreateBuilder.java b/api/src/main/java/cc/carm/lib/easysql/api/builder/TableCreateBuilder.java index 079b1ec..db1acbb 100644 --- a/api/src/main/java/cc/carm/lib/easysql/api/builder/TableCreateBuilder.java +++ b/api/src/main/java/cc/carm/lib/easysql/api/builder/TableCreateBuilder.java @@ -49,7 +49,7 @@ public interface TableCreateBuilder extends SQLBuilder { * @param columns 列的相关信息 (包括列设定) * @return {@link TableCreateBuilder} */ - TableCreateBuilder setColumns(@NotNull String... columns); + TableCreateBuilder columns(@NotNull String... columns); /** * 为该表添加一个列 diff --git a/api/src/main/java/cc/carm/lib/easysql/api/builder/TableQueryBuilder.java b/api/src/main/java/cc/carm/lib/easysql/api/builder/TableQueryBuilder.java index 6348935..4a26da9 100644 --- a/api/src/main/java/cc/carm/lib/easysql/api/builder/TableQueryBuilder.java +++ b/api/src/main/java/cc/carm/lib/easysql/api/builder/TableQueryBuilder.java @@ -13,7 +13,7 @@ public interface TableQueryBuilder extends ConditionalBuilder(此操作会覆盖之前的设定) @@ -27,7 +27,7 @@ public interface UpdateBuilder extends ConditionalBuilder columnData); + UpdateBuilder setAll(LinkedHashMap<@NotNull String, @Nullable Object> columnData); /** * 设定更新的全部字段值 (此操作会覆盖之前的设定) @@ -37,19 +37,19 @@ public interface UpdateBuilder extends ConditionalBuilder(此操作会覆盖之前的设定) - *

如需同时更新多条字段,请使用 {@link #setColumnValues(String[], Object[])} 或 {@link #setColumnValues(LinkedHashMap)} - *
也可以使用 {@link #addColumnValue(String, Object)} 一条条的添加字段 + *

如需同时更新多条字段,请使用 {@link #setAll(String[], Object[])} 或 {@link #setAll(LinkedHashMap)} + *
也可以使用 {@link #set(String, Object)} 一条条的添加字段 * * @param columnName 字段名 * @param columnValue 字段名对应的值 * @return {@link UpdateBuilder} */ - default UpdateBuilder setColumnValues(@NotNull String columnName, @Nullable Object columnValue) { - return setColumnValues(new String[]{columnName}, new Object[]{columnValue}); + default UpdateBuilder setAll(@NotNull String columnName, @Nullable Object columnValue) { + return setAll(new String[]{columnName}, new Object[]{columnValue}); } diff --git a/api/src/main/java/cc/carm/lib/easysql/api/condition/SQLCondition.java b/api/src/main/java/cc/carm/lib/easysql/api/condition/SQLCondition.java new file mode 100644 index 0000000..7f7a3c9 --- /dev/null +++ b/api/src/main/java/cc/carm/lib/easysql/api/condition/SQLCondition.java @@ -0,0 +1,4 @@ +package cc.carm.lib.easysql.api.condition; + +public class SQLCondition { +} diff --git a/demo/src/main/java/EasySQLDemo.java b/demo/src/main/java/EasySQLDemo.java index d0fdd59..d371822 100644 --- a/demo/src/main/java/EasySQLDemo.java +++ b/demo/src/main/java/EasySQLDemo.java @@ -84,8 +84,8 @@ public class EasySQLDemo { public void sqlQuery(SQLManager sqlManager) { // 同步SQL查询 try (SQLQuery query = sqlManager.createQuery() - .inTable("users") // 在users表中查询 - .selectColumns("id", "name") // 选中 id 与 name列 + .fromTable("users") // 在users表中查询 + .select("id", "name") // 选中 id 与 name列 .addCondition("age", ">", 18) // 限定 age 要大于5 .addCondition("email", null) // 限定查询 email 字段为空 .addNotNullCondition("phone") // 限定 phone 字段不为空 @@ -101,10 +101,10 @@ public class EasySQLDemo { } UUID userUUID = sqlManager.createQuery() - .inTable("users") // 在users表中查询 - .selectColumns("uuid") + .fromTable("users") // 在users表中查询 + .select("uuid") .addCondition("id", 5) // 限定 id 为 5 - .setLimit(1) // 只取出一个数据 + .limit(1) // 只取出一个数据 .build().execute(query -> { //可以直接进行数据处理 ResultSet result = query.getResultSet(); @@ -118,9 +118,9 @@ public class EasySQLDemo { public void sqlQueryAsync(SQLManager sqlManager) { // 异步SQL查询 sqlManager.createQuery() - .inTable("users") // 在users表中查询 + .fromTable("users") // 在users表中查询 .addCondition("id", 5) // 限定 id 为 5 - .setLimit(1) // 只取出一个数据 + .limit(1) // 只取出一个数据 .build().executeAsync(success -> { ResultSet resultSet = success.getResultSet(); if (resultSet != null && resultSet.next()) { @@ -137,8 +137,8 @@ public class EasySQLDemo { public void sqlInsert(SQLManager sqlManager) { // 同步SQL插入 (不使用try-catch的情况下,返回的数值可能为空。) int id = sqlManager.createInsert("users") - .setColumnNames("username", "phone", "email", "registerTime") - .setParams("CarmJos", "18888888888", "carm@carm.cc", TimeDateUtils.getCurrentTime()) + .columns("username", "phone", "email", "registerTime") + .params("CarmJos", "18888888888", "carm@carm.cc", TimeDateUtils.getCurrentTime()) .returnGeneratedKey() // 设定在后续返回自增主键 .execute((exception, action) -> { // 处理异常 @@ -148,8 +148,8 @@ public class EasySQLDemo { try { int userID = sqlManager.createInsert("users") - .setColumnNames("username", "phone", "email", "registerTime") - .setParams("CarmJos", "18888888888", "carm@carm.cc", TimeDateUtils.getCurrentTime()) + .columns("username", "phone", "email", "registerTime") + .params("CarmJos", "18888888888", "carm@carm.cc", TimeDateUtils.getCurrentTime()) .returnGeneratedKey().execute(); System.out.println("新用户的ID为 " + userID); diff --git a/demo/src/test/java/cc/carm/lib/easysql/DemoTransaction.java b/demo/src/test/java/cc/carm/lib/easysql/DemoTransaction.java new file mode 100644 index 0000000..a7131f5 --- /dev/null +++ b/demo/src/test/java/cc/carm/lib/easysql/DemoTransaction.java @@ -0,0 +1,12 @@ +package cc.carm.lib.easysql; + +import cc.carm.lib.easysql.api.action.SQLTransaction; + +import java.sql.SQLException; +import java.util.function.Consumer; + +public interface DemoTransaction { + + SQLTransactionResult commitTransaction(Consumer consumer); + +} diff --git a/demo/src/test/java/cc/carm/lib/easysql/tests/QueryAsyncTest.java b/demo/src/test/java/cc/carm/lib/easysql/tests/QueryAsyncTest.java index 265eea1..1098b66 100644 --- a/demo/src/test/java/cc/carm/lib/easysql/tests/QueryAsyncTest.java +++ b/demo/src/test/java/cc/carm/lib/easysql/tests/QueryAsyncTest.java @@ -12,9 +12,9 @@ public class QueryAsyncTest extends TestHandler { public void onTest(SQLManager sqlManager) throws SQLException { sqlManager.createQuery() - .inTable("test_user_table") + .fromTable("test_user_table") .orderBy("id", false) - .setLimit(1) + .limit(1) .build().executeAsync(query -> { try { Thread.sleep(1000L); diff --git a/demo/src/test/java/cc/carm/lib/easysql/tests/QueryCloseTest.java b/demo/src/test/java/cc/carm/lib/easysql/tests/QueryCloseTest.java index dc3d285..e9f25ac 100644 --- a/demo/src/test/java/cc/carm/lib/easysql/tests/QueryCloseTest.java +++ b/demo/src/test/java/cc/carm/lib/easysql/tests/QueryCloseTest.java @@ -15,9 +15,9 @@ public class QueryCloseTest extends TestHandler { public void onTest(SQLManager sqlManager) throws SQLException { try (SQLQuery query = sqlManager.createQuery() - .inTable("test_user_table") + .fromTable("test_user_table") .orderBy("id", false) - .setLimit(5) + .limit(5) .build().execute()) { ResultSet resultSet = query.getResultSet(); diff --git a/demo/src/test/java/cc/carm/lib/easysql/tests/QueryFunctionTest.java b/demo/src/test/java/cc/carm/lib/easysql/tests/QueryFunctionTest.java index bc1ac7b..1291f2e 100644 --- a/demo/src/test/java/cc/carm/lib/easysql/tests/QueryFunctionTest.java +++ b/demo/src/test/java/cc/carm/lib/easysql/tests/QueryFunctionTest.java @@ -12,9 +12,9 @@ public class QueryFunctionTest extends TestHandler { public void onTest(SQLManager sqlManager) throws SQLException { Integer id_1 = sqlManager.createQuery() - .inTable("test_user_table") + .fromTable("test_user_table") .orderBy("id", false) - .setLimit(1) + .limit(1) .build().executeFunction(query -> { try { Thread.sleep(1000L); diff --git a/demo/src/test/java/cc/carm/lib/easysql/tests/QueryFutureTest.java b/demo/src/test/java/cc/carm/lib/easysql/tests/QueryFutureTest.java index 164ea88..96b46f8 100644 --- a/demo/src/test/java/cc/carm/lib/easysql/tests/QueryFutureTest.java +++ b/demo/src/test/java/cc/carm/lib/easysql/tests/QueryFutureTest.java @@ -15,9 +15,9 @@ public class QueryFutureTest extends TestHandler { Future future = sqlManager.createQuery() - .inTable("test_user_table") + .fromTable("test_user_table") .orderBy("id", false) - .setLimit(1) + .limit(1) .build().executeFuture((query) -> { if (!query.getResultSet().next()) { return -1; diff --git a/demo/src/test/java/cc/carm/lib/easysql/tests/QueryNotCloseTest.java b/demo/src/test/java/cc/carm/lib/easysql/tests/QueryNotCloseTest.java index 3983d0d..8099bad 100644 --- a/demo/src/test/java/cc/carm/lib/easysql/tests/QueryNotCloseTest.java +++ b/demo/src/test/java/cc/carm/lib/easysql/tests/QueryNotCloseTest.java @@ -13,9 +13,9 @@ public class QueryNotCloseTest extends TestHandler { @Override public void onTest(SQLManager sqlManager) throws SQLException { SQLQuery query = sqlManager.createQuery() - .inTable("test_user_table") + .fromTable("test_user_table") .orderBy("id", false) - .setLimit(5) + .limit(5) .build().execute(); ResultSet resultSet = query.getResultSet(); diff --git a/demo/src/test/java/cc/carm/lib/easysql/tests/SQLUpdateBatchTests.java b/demo/src/test/java/cc/carm/lib/easysql/tests/SQLUpdateBatchTests.java index a04a07a..cada611 100644 --- a/demo/src/test/java/cc/carm/lib/easysql/tests/SQLUpdateBatchTests.java +++ b/demo/src/test/java/cc/carm/lib/easysql/tests/SQLUpdateBatchTests.java @@ -26,7 +26,7 @@ public class SQLUpdateBatchTests extends TestHandler { public void onTest(SQLManager sqlManager) throws SQLException { List updates = sqlManager.createInsertBatch("test_user_table") - .setColumnNames("uuid", "username", "age") + .columns("uuid", "username", "age") .setAllParams(generateParams()) .returnGeneratedKeys(Long.class) .execute(); diff --git a/demo/src/test/java/cc/carm/lib/easysql/tests/SQLUpdateReturnKeysTest.java b/demo/src/test/java/cc/carm/lib/easysql/tests/SQLUpdateReturnKeysTest.java index bf1b45f..2a9641c 100644 --- a/demo/src/test/java/cc/carm/lib/easysql/tests/SQLUpdateReturnKeysTest.java +++ b/demo/src/test/java/cc/carm/lib/easysql/tests/SQLUpdateReturnKeysTest.java @@ -12,7 +12,7 @@ public class SQLUpdateReturnKeysTest extends SQLUpdateBatchTests { @Override public void onTest(SQLManager sqlManager) throws SQLException { List generatedKeys = sqlManager.createInsertBatch("test_user_table") - .setColumnNames("uuid", "username", "age") + .columns("uuid", "username", "age") .setAllParams(generateParams()) .returnGeneratedKeys(Integer.class) .execute(); diff --git a/impl/src/main/java/cc/carm/lib/easysql/action/PreparedSQLUpdateActionImpl.java b/impl/src/main/java/cc/carm/lib/easysql/action/PreparedSQLUpdateActionImpl.java index 092b181..c4b8fd3 100644 --- a/impl/src/main/java/cc/carm/lib/easysql/action/PreparedSQLUpdateActionImpl.java +++ b/impl/src/main/java/cc/carm/lib/easysql/action/PreparedSQLUpdateActionImpl.java @@ -46,19 +46,19 @@ public class PreparedSQLUpdateActionImpl } @Override - public PreparedSQLUpdateActionImpl setParams(Object... params) { + public PreparedSQLUpdateActionImpl params(Object... params) { this.params = params; return this; } @Override - public PreparedSQLUpdateActionImpl setParams(@Nullable Iterable params) { + public PreparedSQLUpdateActionImpl params(@Nullable Iterable params) { if (params == null) { - return setParams((Object[]) null); + return params((Object[]) null); } else { List paramsList = new ArrayList<>(); params.forEach(paramsList::add); - return setParams(paramsList.toArray()); + return params(paramsList.toArray()); } } diff --git a/impl/src/main/java/cc/carm/lib/easysql/builder/impl/AbstractConditionalBuilder.java b/impl/src/main/java/cc/carm/lib/easysql/builder/impl/AbstractConditionalBuilder.java index 9c8f974..685b78e 100644 --- a/impl/src/main/java/cc/carm/lib/easysql/builder/impl/AbstractConditionalBuilder.java +++ b/impl/src/main/java/cc/carm/lib/easysql/builder/impl/AbstractConditionalBuilder.java @@ -27,7 +27,7 @@ public abstract class AbstractConditionalBuilder(); this.conditionParams = new ArrayList<>(); if (condition != null) this.conditionSQLs.add(condition); @@ -35,7 +35,7 @@ public abstract class AbstractConditionalBuilder conditions ) { conditions.forEach(this::addCondition); @@ -119,7 +119,7 @@ public abstract class AbstractConditionalBuilder columnData) { + public UpdateBuilder setAll(LinkedHashMap columnData) { this.columnData = columnData; return this; } @Override - public UpdateBuilder setColumnValues(@NotNull String[] columnNames, @Nullable Object[] columnValues) { + public UpdateBuilder setAll(@NotNull String[] columnNames, @Nullable Object[] columnValues) { Objects.requireNonNull(columnNames, "columnName could not be null"); if (columnNames.length != columnValues.length) { throw new RuntimeException("columnNames are not match with columnValues"); @@ -78,7 +78,7 @@ public class UpdateBuilderImpl for (int i = 0; i < columnNames.length; i++) { columnData.put(columnNames[i], columnValues[i]); } - return setColumnValues(columnData); + return setAll(columnData); } diff --git a/impl/src/main/java/cc/carm/lib/easysql/manager/SQLManagerImpl.java b/impl/src/main/java/cc/carm/lib/easysql/manager/SQLManagerImpl.java index 4178b42..7b10e3e 100644 --- a/impl/src/main/java/cc/carm/lib/easysql/manager/SQLManagerImpl.java +++ b/impl/src/main/java/cc/carm/lib/easysql/manager/SQLManagerImpl.java @@ -203,7 +203,7 @@ public class SQLManagerImpl implements SQLManager { public InsertBuilder> createInsertBatch(@NotNull String tableName) { return new InsertBuilderImpl>(this, tableName) { @Override - public PreparedSQLUpdateBatchAction setColumnNames(List columnNames) { + public PreparedSQLUpdateBatchAction columns(List columnNames) { return new PreparedSQLBatchUpdateActionImpl<>(getManager(), Integer.class, buildSQL(getTableName(), columnNames)); } }; @@ -213,7 +213,7 @@ public class SQLManagerImpl implements SQLManager { public InsertBuilder> createInsert(@NotNull String tableName) { return new InsertBuilderImpl>(this, tableName) { @Override - public PreparedSQLUpdateAction setColumnNames(List columnNames) { + public PreparedSQLUpdateAction columns(List columnNames) { return new PreparedSQLUpdateActionImpl<>(getManager(), Integer.class, buildSQL(getTableName(), columnNames)); } }; @@ -223,7 +223,7 @@ public class SQLManagerImpl implements SQLManager { public ReplaceBuilder> createReplaceBatch(@NotNull String tableName) { return new ReplaceBuilderImpl>(this, tableName) { @Override - public PreparedSQLUpdateBatchAction setColumnNames(List columnNames) { + public PreparedSQLUpdateBatchAction columns(List columnNames) { return new PreparedSQLBatchUpdateActionImpl<>(getManager(), Integer.class, buildSQL(getTableName(), columnNames)); } }; @@ -233,7 +233,7 @@ public class SQLManagerImpl implements SQLManager { public ReplaceBuilder> createReplace(@NotNull String tableName) { return new ReplaceBuilderImpl>(this, tableName) { @Override - public PreparedSQLUpdateAction setColumnNames(List columnNames) { + public PreparedSQLUpdateAction columns(List columnNames) { return new PreparedSQLUpdateActionImpl<>(getManager(), Integer.class, buildSQL(getTableName(), columnNames)); } };