From 864c2ac1280efc6f3046667a33562987d521422d Mon Sep 17 00:00:00 2001 From: carm Date: Sat, 8 Jan 2022 17:29:26 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E5=8D=8F=E8=AE=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .documentation/JAVADOC-README.md | 2 +- .github/ISSUE_TEMPLATE/bugs_report.md | 14 +- .github/ISSUE_TEMPLATE/feature_issues.md | 13 +- .github/workflows/codeql-analysis.yml | 50 +-- .github/workflows/sonar-analyze.yml | 2 +- README.md | 33 +- easysql-api/pom.xml | 8 +- .../cc/carm/lib/easysql/api/SQLAction.java | 234 ++++++------ .../cc/carm/lib/easysql/api/SQLBuilder.java | 12 +- .../cc/carm/lib/easysql/api/SQLManager.java | 242 ++++++------ .../api/action/PreparedSQLUpdateAction.java | 28 +- .../action/PreparedSQLUpdateBatchAction.java | 62 ++-- .../easysql/api/action/SQLUpdateAction.java | 39 +- .../api/action/SQLUpdateBatchAction.java | 42 +-- .../api/action/query/PreparedQueryAction.java | 44 +-- .../easysql/api/action/query/QueryAction.java | 34 +- .../easysql/api/action/query/SQLQuery.java | 62 ++-- .../api/builder/ConditionalBuilder.java | 36 +- .../easysql/api/builder/DeleteBuilder.java | 2 +- .../easysql/api/builder/InsertBuilder.java | 10 +- .../lib/easysql/api/builder/QueryBuilder.java | 48 +-- .../easysql/api/builder/ReplaceBuilder.java | 10 +- .../api/builder/TableCreateBuilder.java | 24 +- .../api/builder/TableQueryBuilder.java | 50 +-- .../easysql/api/builder/UpdateBuilder.java | 12 +- .../easysql/api/builder/UpsertBuilder.java | 4 +- .../lib/easysql/api/function/SQLFunction.java | 4 +- .../lib/easysql/api/util/TimeDateUtils.java | 178 ++++----- .../carm/lib/easysql/api/util/UUIDUtil.java | 14 +- easysql-beecp/pom.xml | 8 +- .../java/cc/carm/lib/easysql/EasySQL.java | 54 +-- easysql-demo/pom.xml | 8 +- easysql-demo/src/main/java/EasySQLDemo.java | 172 ++++----- easysql-hikaricp/pom.xml | 8 +- .../java/cc/carm/lib/easysql/EasySQL.java | 70 ++-- easysql-impl/pom.xml | 8 +- .../lib/easysql/action/AbstractSQLAction.java | 124 +++---- .../PreparedSQLBatchUpdateActionImpl.java | 96 ++--- .../action/PreparedSQLUpdateActionImpl.java | 100 ++--- .../easysql/action/SQLUpdateActionImpl.java | 62 ++-- .../action/SQLUpdateBatchActionImpl.java | 64 ++-- .../action/query/PreparedQueryActionImpl.java | 78 ++-- .../easysql/action/query/QueryActionImpl.java | 44 +-- .../easysql/builder/AbstractSQLBuilder.java | 16 +- .../impl/AbstractConditionalBuilder.java | 212 +++++------ .../builder/impl/DeleteBuilderImpl.java | 52 +-- .../builder/impl/InsertBuilderImpl.java | 54 +-- .../builder/impl/QueryBuilderImpl.java | 32 +- .../builder/impl/ReplaceBuilderImpl.java | 54 +-- .../builder/impl/TableCreateBuilderImpl.java | 88 ++--- .../builder/impl/TableQueryBuilderImpl.java | 122 +++---- .../builder/impl/UpdateBuilderImpl.java | 106 +++--- .../lib/easysql/manager/SQLManagerImpl.java | 264 +++++++------- .../carm/lib/easysql/query/SQLQueryImpl.java | 120 +++--- .../carm/lib/easysql/util/StatementUtil.java | 344 +++++++++--------- pom.xml | 38 +- 56 files changed, 1854 insertions(+), 1857 deletions(-) diff --git a/.documentation/JAVADOC-README.md b/.documentation/JAVADOC-README.md index c2a8846..3344ef1 100644 --- a/.documentation/JAVADOC-README.md +++ b/.documentation/JAVADOC-README.md @@ -4,6 +4,6 @@ ## 如何实现? -若您也想通过 [Github Actions](https://docs.github.com/en/actions/learn-github-actions) +若您也想通过 [Github Actions](https://docs.github.com/en/actions/learn-github-actions) 自动部署项目的Javadoc到 [Github Pages](https://pages.github.com/) , 可以参考我的文章 [《自动部署Javadoc到Github Pages》](https://pages.carm.cc/doc/javadoc-in-github.html) 。 \ No newline at end of file diff --git a/.github/ISSUE_TEMPLATE/bugs_report.md b/.github/ISSUE_TEMPLATE/bugs_report.md index ad8f90e..249e2b5 100644 --- a/.github/ISSUE_TEMPLATE/bugs_report.md +++ b/.github/ISSUE_TEMPLATE/bugs_report.md @@ -1,30 +1,34 @@ --- -name: 问题提交 -about: 描述问题并提交,帮助我们对其进行检查与修复。 -title: '' -labels: bug -assignees: '' +name: 问题提交 about: 描述问题并提交,帮助我们对其进行检查与修复。 title: '' +labels: bug assignees: '' --- ### **问题简述** + 用简短的话语描述一下大概问题。 ### **问题来源** + 描述一下通过哪些操作才发现的问题,如: + 1. 使用了 '...' 2. 输入了 '....' 3. 出现了报错 '....' ### **预期结果** (可选) + 如果问题不发生,应该是什么情况 ### **问题截图/问题报错** + 如果有报错或输出,请提供截图。 ### **操作环境** + - 系统环境: `Windows 10` / `Ubuntu` / `...` - Java版本: `JDK11` / `OPENJDK8` / `JRE8` / `...` ### **其他补充** + 如有其他补充,可以在这里描述。 diff --git a/.github/ISSUE_TEMPLATE/feature_issues.md b/.github/ISSUE_TEMPLATE/feature_issues.md index 2171186..b619f7c 100644 --- a/.github/ISSUE_TEMPLATE/feature_issues.md +++ b/.github/ISSUE_TEMPLATE/feature_issues.md @@ -1,20 +1,21 @@ --- -name: 功能需求 -about: 希望我们提供更多的功能。 -title: '' -labels: enhancement -assignees: '' +name: 功能需求 about: 希望我们提供更多的功能。 title: '' +labels: enhancement assignees: '' --- -### **功能简述** +### **功能简述** + 简单的描述一下你想要的功能 ### **需求来源** + 简单的描述一下为什么需要这个功能。 ### **功能参考**(可选) + 如果有相关功能的参考,如文本、截图,请提供给我们。 ### **附加内容** + 如果有什么小细节需要重点注意,请在这里告诉我们。 diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 5b79227..2371afe 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -37,34 +37,34 @@ jobs: # Learn more about CodeQL language support at https://git.io/codeql-language-support steps: - - name: Checkout repository - uses: actions/checkout@v2 + - name: Checkout repository + uses: actions/checkout@v2 - # Initializes the CodeQL tools for scanning. - - name: Initialize CodeQL - uses: github/codeql-action/init@v1 - with: - languages: ${{ matrix.language }} - # If you wish to specify custom queries, you can do so here or in a config file. - # By default, queries listed here will override any specified in a config file. - # Prefix the list here with "+" to use these queries and those in the config file. - # queries: ./path/to/local/query, your-org/your-repo/queries@main + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v1 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + # queries: ./path/to/local/query, your-org/your-repo/queries@main - # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). - # If this step fails, then you should remove it and run the build manually (see below) - - name: Autobuild - uses: github/codeql-action/autobuild@v1 + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v1 - # ℹ️ Command-line programs to run using the OS shell. - # 📚 https://git.io/JvXDl + # ℹ️ Command-line programs to run using the OS shell. + # 📚 https://git.io/JvXDl - # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines - # and modify them (or add more) to build your code if your project - # uses a compiled language + # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines + # and modify them (or add more) to build your code if your project + # uses a compiled language - #- run: | - # make bootstrap - # make release + #- run: | + # make bootstrap + # make release - - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v1 + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v1 diff --git a/.github/workflows/sonar-analyze.yml b/.github/workflows/sonar-analyze.yml index 609ad3c..dfb98dc 100644 --- a/.github/workflows/sonar-analyze.yml +++ b/.github/workflows/sonar-analyze.yml @@ -4,7 +4,7 @@ on: branches: - master pull_request: - types: [opened, synchronize, reopened] + types: [ opened, synchronize, reopened ] jobs: build: name: Build diff --git a/README.md b/README.md index 175f060..e1967c0 100644 --- a/README.md +++ b/README.md @@ -132,7 +132,7 @@ repositories { // 采用github依赖库,安全稳定,但需要配置 (推荐) maven { url 'https://maven.pkg.github.com/CarmJos/EasySQL' } - + // 采用我的私人依赖库,简单方便,但可能因为变故而无法使用 maven { url 'https://repo.carm.cc/repository/maven-public/' } } @@ -146,13 +146,13 @@ repositories { ```groovy dependencies { - + //对于需要提供公共接口的项目,可以仅打包API部分,方便他人调用 api "cc.carm.lib:easysql-api:[LATEST RELEASE]" //如需自定义连接池,则可以仅打包实现部分,自行创建SQLManager api "cc.carm.lib:easysql-impl:[LATEST RELEASE]" - + } ``` @@ -164,15 +164,16 @@ dependencies { ```groovy dependencies { - + //也可直接选择打包了连接池的版本 api "cc.carm.lib:easysql-beecp:[LATEST RELEASE]" api "cc.carm.lib:easysql-hikaricp:[LATEST RELEASE]" - + } ``` + ## 支持与捐赠 @@ -185,22 +186,20 @@ dependencies { ## 开源协议 -本项目源码采用 [GNU General Public License v3.0](https://opensource.org/licenses/GPL-3.0) 开源协议。 +本项目源码采用 [The MIT License](https://opensource.org/licenses/MIT) 开源协议。
-关于 GPL 协议 +关于 MIT 协议 -> GNU General Public Licence (GPL) 有可能是开源界最常用的许可模式。GPL 保证了所有开发者的权利,同时为使用者提供了足够的复制,分发,修改的权利: +> MIT 协议可能是几大开源协议中最宽松的一个,核心条款是: > -> #### 可自由复制 -> 你可以将软件复制到你的电脑,你客户的电脑,或者任何地方。复制份数没有任何限制。 -> #### 可自由分发 -> 在你的网站提供下载,拷贝到U盘送人,或者将源代码打印出来从窗户扔出去(环保起见,请别这样做)。 -> #### 可以用来盈利 -> 你可以在分发软件的时候收费,但你必须在收费前向你的客户提供该软件的 GNU GPL 许可协议,以便让他们知道,他们可以从别的渠道免费得到这份软件,以及你收费的理由。 -> #### 可自由修改 -> 如果你想添加或删除某个功能,没问题,如果你想在别的项目中使用部分代码,也没问题,唯一的要求是,使用了这段代码的项目也必须使用 GPL 协议。 +> 该软件及其相关文档对所有人免费,可以任意处置,包括使用,复制,修改,合并,发表,分发,再授权,或者销售。唯一的限制是,软件中必须包含上述版 权和许可提示。 > -> 需要注意的是,分发的时候,需要明确提供源代码和二进制文件,另外,用于某些程序的某些协议有一些问题和限制,你可以看一下 @PierreJoye 写的 Practical Guide to GPL Compliance 一文。使用 GPL 协议,你必须在源代码代码中包含相应信息,以及协议本身。 +> 这意味着: +> - 你可以自由使用,复制,修改,可以用于自己的项目。 +> - 可以免费分发或用来盈利。 +> - 唯一的限制是必须包含许可声明。 +> +> MIT 协议是所有开源许可中最宽松的一个,除了必须包含许可声明外,再无任何限制。 > > *以上文字来自 [五种开源协议GPL,LGPL,BSD,MIT,Apache](https://www.oschina.net/question/54100_9455) 。*
\ No newline at end of file diff --git a/easysql-api/pom.xml b/easysql-api/pom.xml index 5e5a5e7..0c9f4a8 100644 --- a/easysql-api/pom.xml +++ b/easysql-api/pom.xml @@ -1,6 +1,6 @@ - cc.carm.lib @@ -30,8 +30,8 @@ - GNU General Public License v3.0 - https://opensource.org/licenses/GPL-3.0 + The MIT License + https://opensource.org/licenses/MIT 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 63699f3..3fc43d5 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 @@ -29,138 +29,138 @@ import java.util.function.Consumer; */ 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 BiConsumer> exceptionHandler) { - return execute(t -> t, exceptionHandler); - } + /** + * 执行语句并返回值 + * + * @param exceptionHandler 异常处理器 默认为 {@link #defaultExceptionHandler()} + * @return 指定类型数据 + */ + @Nullable + default T execute(@Nullable BiConsumer> exceptionHandler) { + return execute(t -> t, exceptionHandler); + } - /** - * 执行语句并处理返回值 - * - * @param function 处理方法 - * @param 需要返回的内容 - * @return 指定类型数据 - * @throws SQLException 当SQL操作出现问题时抛出 - */ - @Nullable - default R executeFunction(@NotNull SQLFunction function) throws SQLException { - try { - T value = execute(); - return function.apply(value); - } catch (SQLException exception) { - throw new SQLException(exception); - } - } + /** + * 执行语句并处理返回值 + * + * @param function 处理方法 + * @param 需要返回的内容 + * @return 指定类型数据 + * @throws SQLException 当SQL操作出现问题时抛出 + */ + @Nullable + default R executeFunction(@NotNull SQLFunction function) throws SQLException { + try { + T value = execute(); + return function.apply(value); + } catch (SQLException exception) { + throw new SQLException(exception); + } + } - /** - * 执行语句并处理返回值 - * - * @param function 处理方法 - * @param exceptionHandler 异常处理器 默认为 {@link #defaultExceptionHandler()} - * @param 需要返回的内容 - * @return 指定类型数据 - */ - @Nullable - default R execute(@NotNull SQLFunction function, - @Nullable BiConsumer> exceptionHandler) { - try { - return executeFunction(function); - } catch (SQLException exception) { - handleException(exceptionHandler, exception); - return null; - } - } + /** + * 执行语句并处理返回值 + * + * @param function 处理方法 + * @param exceptionHandler 异常处理器 默认为 {@link #defaultExceptionHandler()} + * @param 需要返回的内容 + * @return 指定类型数据 + */ + @Nullable + default R execute(@NotNull SQLFunction function, + @Nullable BiConsumer> exceptionHandler) { + try { + return executeFunction(function); + } catch (SQLException exception) { + handleException(exceptionHandler, exception); + return null; + } + } - /** - * 异步执行SQL语句,采用默认异常处理,无需返回值。 - */ - default void executeAsync() { - executeAsync(null); - } + /** + * 异步执行SQL语句,采用默认异常处理,无需返回值。 + */ + default void executeAsync() { + executeAsync(null); + } - /** - * 异步执行SQL语句 - * - * @param success 成功时的操作 - */ - default void executeAsync(@Nullable Consumer success) { - executeAsync(success, null); - } + /** + * 异步执行SQL语句 + * + * @param success 成功时的操作 + */ + default void executeAsync(@Nullable Consumer success) { + executeAsync(success, null); + } - /** - * 异步执行SQL语句 - * - * @param success 成功时的操作 - * @param failure 异常处理器 默认为 {@link SQLAction#defaultExceptionHandler()} - */ - void executeAsync(@Nullable Consumer success, @Nullable BiConsumer> failure); + /** + * 异步执行SQL语句 + * + * @param success 成功时的操作 + * @param failure 异常处理器 默认为 {@link SQLAction#defaultExceptionHandler()} + */ + void executeAsync(@Nullable Consumer success, @Nullable BiConsumer> failure); - default void handleException(@Nullable BiConsumer> handler, SQLException exception) { - if (handler == null) handler = defaultExceptionHandler(); - handler.accept(exception, this); - } + default void handleException(@Nullable BiConsumer> handler, SQLException exception) { + if (handler == null) handler = defaultExceptionHandler(); + handler.accept(exception, this); + } - /** - * @return 默认的异常处理器 - */ - default BiConsumer> defaultExceptionHandler() { - return (exception, action) -> { - getManager().getLogger().severe("Error when execute [" + action.getSQLContent() + "]"); - getManager().getLogger().severe(exception.getLocalizedMessage()); - exception.printStackTrace(); - }; - } + /** + * @return 默认的异常处理器 + */ + default BiConsumer> defaultExceptionHandler() { + return (exception, action) -> { + getManager().getLogger().severe("Error when execute [" + action.getSQLContent() + "]"); + getManager().getLogger().severe(exception.getLocalizedMessage()); + exception.printStackTrace(); + }; + } } 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 f49f8c6..48f74f1 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,11 +11,11 @@ import org.jetbrains.annotations.NotNull; */ public interface SQLBuilder { - /** - * 得到承载该Builder的对应{@link SQLManager} - * - * @return {@link SQLManager} - */ - @NotNull SQLManager getManager(); + /** + * 得到承载该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 0ac0ece..c38acce 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,145 +19,145 @@ import java.util.logging.Logger; public interface SQLManager { - Logger getLogger(); + Logger getLogger(); - boolean isDebugMode(); + boolean isDebugMode(); - void setDebugMode(boolean enable); + void setDebugMode(boolean 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); - /** - * 新建一个查询 - * - * @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/action/PreparedSQLUpdateAction.java b/easysql-api/src/main/java/cc/carm/lib/easysql/api/action/PreparedSQLUpdateAction.java index 34b9141..6a7732e 100644 --- a/easysql-api/src/main/java/cc/carm/lib/easysql/api/action/PreparedSQLUpdateAction.java +++ b/easysql-api/src/main/java/cc/carm/lib/easysql/api/action/PreparedSQLUpdateAction.java @@ -4,20 +4,20 @@ import org.jetbrains.annotations.Nullable; public interface PreparedSQLUpdateAction extends SQLUpdateAction { - /** - * 设定SQL语句中所有 ? 对应的参数 - * - * @param params 参数内容 - * @return {@link PreparedSQLUpdateAction} - */ - PreparedSQLUpdateAction setParams(Object... params); + /** + * 设定SQL语句中所有 ? 对应的参数 + * + * @param params 参数内容 + * @return {@link PreparedSQLUpdateAction} + */ + PreparedSQLUpdateAction setParams(Object... params); - /** - * 设定SQL语句中所有 ? 对应的参数 - * - * @param params 参数内容 - * @return {@link PreparedSQLUpdateAction} - */ - PreparedSQLUpdateAction setParams(@Nullable Iterable params); + /** + * 设定SQL语句中所有 ? 对应的参数 + * + * @param params 参数内容 + * @return {@link PreparedSQLUpdateAction} + */ + PreparedSQLUpdateAction setParams(@Nullable Iterable params); } 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 48d75d9..da998a7 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,39 +6,39 @@ 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} - */ - PreparedSQLUpdateBatchAction setKeyIndex(int keyColumnIndex); + /** + * 设定自增主键的序列 + * + * @param keyColumnIndex 自增主键的序列 + *
若该值 > 0,则 {@link #execute()} 返回自增主键数值 + *
若该值 ≤ 0,则 {@link #execute()} 返回变更的行数 + * @return {@link PreparedSQLUpdateBatchAction} + */ + PreparedSQLUpdateBatchAction setKeyIndex(int keyColumnIndex); - /** - * 默认主键序列的数值为 -1 (≤0) ,即默认返回发生变更的行数。 - * - * @return 默认主键序列 - */ - default PreparedSQLUpdateBatchAction defaultKeyIndex() { - return setKeyIndex(-1); // will return changed lines number - } + /** + * 默认主键序列的数值为 -1 (≤0) ,即默认返回发生变更的行数。 + * + * @return 默认主键序列 + */ + default PreparedSQLUpdateBatchAction defaultKeyIndex() { + return setKeyIndex(-1); // will return changed lines number + } } 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 c79fe64..5b91f39 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 @@ -2,31 +2,26 @@ package cc.carm.lib.easysql.api.action; import cc.carm.lib.easysql.api.SQLAction; -import java.sql.SQLException; -import java.util.List; -import java.util.function.BiConsumer; - public interface SQLUpdateAction extends SQLAction { - /** - * 设定自增主键的序列 - * - * @param keyColumnIndex 自增主键的序列 - *
若该值 > 0,则 {@link #execute()} 返回自增主键数值 - *
若该值 ≤ 0,则 {@link #execute()} 返回变更的行数 - * @return {@link SQLUpdateAction} - */ - SQLUpdateAction setKeyIndex(int keyColumnIndex); - - /** - * 默认主键序列的数值为 -1 (≤0) ,即默认返回发生变更的行数。 - * - * @return 默认主键序列 - */ - default SQLUpdateAction defaultKeyIndex() { - return setKeyIndex(-1); // will return changed lines number - } + /** + * 设定自增主键的序列 + * + * @param keyColumnIndex 自增主键的序列 + *
若该值 > 0,则 {@link #execute()} 返回自增主键数值 + *
若该值 ≤ 0,则 {@link #execute()} 返回变更的行数 + * @return {@link SQLUpdateAction} + */ + SQLUpdateAction setKeyIndex(int keyColumnIndex); + /** + * 默认主键序列的数值为 -1 (≤0) ,即默认返回发生变更的行数。 + * + * @return 默认主键序列 + */ + default SQLUpdateAction defaultKeyIndex() { + return setKeyIndex(-1); // will return changed lines number + } } 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 1296025..179dfa4 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 @@ -9,28 +9,28 @@ import java.util.function.BiConsumer; 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); - List getSQLContents(); + List getSQLContents(); - @Override - default BiConsumer>> defaultExceptionHandler() { - return (exception, action) -> { - getManager().getLogger().severe("Error when execute SQLs : "); - int i = 1; - for (String content : getSQLContents()) { - getManager().getLogger().severe("#" + i + " [" + content + "]"); - i++; - } - getManager().getLogger().severe(exception.getLocalizedMessage()); - exception.printStackTrace(); - }; - } + @Override + default BiConsumer>> defaultExceptionHandler() { + return (exception, action) -> { + getManager().getLogger().severe("Error when execute SQLs : "); + int i = 1; + for (String content : getSQLContents()) { + getManager().getLogger().severe("#" + i + " [" + content + "]"); + i++; + } + getManager().getLogger().severe(exception.getLocalizedMessage()); + exception.printStackTrace(); + }; + } } diff --git a/easysql-api/src/main/java/cc/carm/lib/easysql/api/action/query/PreparedQueryAction.java b/easysql-api/src/main/java/cc/carm/lib/easysql/api/action/query/PreparedQueryAction.java index d7da7d5..beb5ece 100644 --- a/easysql-api/src/main/java/cc/carm/lib/easysql/api/action/query/PreparedQueryAction.java +++ b/easysql-api/src/main/java/cc/carm/lib/easysql/api/action/query/PreparedQueryAction.java @@ -7,29 +7,29 @@ import java.util.function.Consumer; public interface PreparedQueryAction extends QueryAction { - /** - * 设定SQL语句中所有 ? 对应的参数 - * - * @param params 参数内容 - * @return {@link PreparedQueryAction} - */ - PreparedQueryAction setParams(@Nullable Object... params); + /** + * 设定SQL语句中所有 ? 对应的参数 + * + * @param params 参数内容 + * @return {@link PreparedQueryAction} + */ + PreparedQueryAction setParams(@Nullable Object... params); - /** - * 设定SQL语句中所有 ? 对应的参数 - * - * @param params 参数内容 - * @return {@link PreparedQueryAction} - */ - PreparedQueryAction setParams(@Nullable Iterable params); + /** + * 设定SQL语句中所有 ? 对应的参数 + * + * @param params 参数内容 + * @return {@link PreparedQueryAction} + */ + PreparedQueryAction setParams(@Nullable Iterable params); - /** - * 直接对 {@link PreparedStatement} 进行处理 - * - * @param statement {@link Consumer} 处理操作 - * 若为空则不进行处理 - * @return {@link PreparedQueryAction} - */ - PreparedQueryAction handleStatement(@Nullable Consumer statement); + /** + * 直接对 {@link PreparedStatement} 进行处理 + * + * @param statement {@link Consumer} 处理操作 + * 若为空则不进行处理 + * @return {@link PreparedQueryAction} + */ + PreparedQueryAction handleStatement(@Nullable Consumer statement); } 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 670ff7c..30ee919 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 @@ -30,22 +30,22 @@ import java.util.function.Consumer; */ public interface QueryAction extends SQLAction { - /** - * 执行语句并处理返回值 - * - * @param function 处理方法 - * @param 需要返回的内容 - * @return 指定类型数据 - * @throws SQLException 当SQL操作出现问题时抛出 - */ - @Nullable - default R executeFunction(@NotNull SQLFunction function) - throws SQLException { - try (SQLQuery value = execute()) { - return function.apply(value); - } catch (SQLException exception) { - throw new SQLException(exception); - } - } + /** + * 执行语句并处理返回值 + * + * @param function 处理方法 + * @param 需要返回的内容 + * @return 指定类型数据 + * @throws SQLException 当SQL操作出现问题时抛出 + */ + @Nullable + default R executeFunction(@NotNull SQLFunction function) + throws SQLException { + try (SQLQuery value = execute()) { + return function.apply(value); + } catch (SQLException exception) { + throw new SQLException(exception); + } + } } diff --git a/easysql-api/src/main/java/cc/carm/lib/easysql/api/action/query/SQLQuery.java b/easysql-api/src/main/java/cc/carm/lib/easysql/api/action/query/SQLQuery.java index 8e57bf9..fd13c3e 100644 --- a/easysql-api/src/main/java/cc/carm/lib/easysql/api/action/query/SQLQuery.java +++ b/easysql-api/src/main/java/cc/carm/lib/easysql/api/action/query/SQLQuery.java @@ -8,43 +8,43 @@ 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(); - /** - * 关闭所有内容 - */ - void close(); + /** + * 关闭所有内容 + */ + void close(); - Statement getStatement(); + Statement getStatement(); - Connection getConnection(); + Connection getConnection(); } diff --git a/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/ConditionalBuilder.java b/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/ConditionalBuilder.java index 4d23a12..775b466 100644 --- a/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/ConditionalBuilder.java +++ b/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/ConditionalBuilder.java @@ -9,34 +9,34 @@ import java.util.LinkedHashMap; public interface ConditionalBuilder, T> extends SQLBuilder { - T build(); + T build(); - B setLimit(int limit); + B setLimit(int limit); - B setConditions(@Nullable String condition); + B setConditions(@Nullable String condition); - B setConditions(LinkedHashMap<@NotNull String, @Nullable Object> conditionSQLs); + B setConditions(LinkedHashMap<@NotNull String, @Nullable Object> conditionSQLs); - B addCondition(@Nullable String condition); + B addCondition(@Nullable String condition); - B addCondition(@NotNull String queryName, @NotNull String operator, @Nullable Object queryValue); + B addCondition(@NotNull String queryName, @NotNull String operator, @Nullable Object queryValue); - default B addCondition(@NotNull String queryName, @Nullable Object queryValue) { - return addCondition(queryName, "=", queryValue); - } + default B addCondition(@NotNull String queryName, @Nullable Object queryValue) { + return addCondition(queryName, "=", queryValue); + } - B addCondition(@NotNull String[] queryNames, @Nullable Object[] queryValues); + B addCondition(@NotNull String[] queryNames, @Nullable Object[] queryValues); - B addNotNullCondition(@NotNull String queryName); + B addNotNullCondition(@NotNull String queryName); - default B addTimeCondition(@NotNull String queryName, long startMillis, long endMillis) { - return addTimeCondition(queryName, - startMillis > 0 ? new Date(startMillis) : null, - endMillis > 0 ? new Date(endMillis) : null - ); - } + default B addTimeCondition(@NotNull String queryName, long startMillis, long endMillis) { + return addTimeCondition(queryName, + startMillis > 0 ? new Date(startMillis) : null, + endMillis > 0 ? new Date(endMillis) : null + ); + } - B addTimeCondition(@NotNull String queryName, @Nullable java.util.Date startDate, @Nullable java.util.Date endDate); + B addTimeCondition(@NotNull String queryName, @Nullable java.util.Date startDate, @Nullable java.util.Date endDate); } 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 b91cad7..8851563 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.action.PreparedSQLUpdateAction; public interface DeleteBuilder extends ConditionalBuilder { - String getTableName(); + String getTableName(); } diff --git a/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/InsertBuilder.java b/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/InsertBuilder.java index 46c0b5a..308b9b7 100644 --- a/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/InsertBuilder.java +++ b/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/InsertBuilder.java @@ -5,13 +5,13 @@ import java.util.List; public interface InsertBuilder { - 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/QueryBuilder.java b/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/QueryBuilder.java index 4908312..4e4dbd6 100644 --- a/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/QueryBuilder.java +++ b/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/QueryBuilder.java @@ -7,31 +7,31 @@ import org.jetbrains.annotations.NotNull; public interface QueryBuilder extends SQLBuilder { - /** - * 通过一条 SQL语句创建查询。 - * 该方法使用 Statement 实现,请注意SQL注入风险! - * - * @param sql SQL语句 - * @return {@link QueryAction} - * @deprecated 存在SQL注入风险,建议使用 {@link QueryBuilder#withPreparedSQL(String)} - */ - @Deprecated - QueryAction withSQL(@NotNull String sql); + /** + * 通过一条 SQL语句创建查询。 + * 该方法使用 Statement 实现,请注意SQL注入风险! + * + * @param sql SQL语句 + * @return {@link QueryAction} + * @deprecated 存在SQL注入风险,建议使用 {@link QueryBuilder#withPreparedSQL(String)} + */ + @Deprecated + QueryAction withSQL(@NotNull String sql); - /** - * 通过一条 SQL语句创建预查询 - * - * @param sql SQL语句 - * @return {@link PreparedQueryAction} - */ - PreparedQueryAction withPreparedSQL(@NotNull String sql); + /** + * 通过一条 SQL语句创建预查询 + * + * @param sql SQL语句 + * @return {@link PreparedQueryAction} + */ + PreparedQueryAction withPreparedSQL(@NotNull String sql); - /** - * 创建表查询 - * - * @param tableName 表名 - * @return {@link TableQueryBuilder} - */ - TableQueryBuilder inTable(@NotNull String tableName); + /** + * 创建表查询 + * + * @param tableName 表名 + * @return {@link TableQueryBuilder} + */ + TableQueryBuilder inTable(@NotNull String tableName); } 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 c01857e..16e2c3d 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 @@ -5,13 +5,13 @@ 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/TableCreateBuilder.java b/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/TableCreateBuilder.java index 4af1d34..3cc57b7 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 @@ -6,25 +6,25 @@ import org.jetbrains.annotations.NotNull; public interface TableCreateBuilder extends SQLBuilder { - @NotNull String getTableName(); + @NotNull String getTableName(); - @NotNull String getTableSettings(); + @NotNull String getTableSettings(); - TableCreateBuilder setTableSettings(@NotNull String settings); + TableCreateBuilder setTableSettings(@NotNull String settings); - SQLUpdateAction build(); + SQLUpdateAction build(); - default TableCreateBuilder addColumn(@NotNull String columnName, @NotNull String settings) { - return addColumn("`" + columnName + "` " + settings); - } + default TableCreateBuilder addColumn(@NotNull String columnName, @NotNull String settings) { + return addColumn("`" + columnName + "` " + settings); + } - TableCreateBuilder addColumn(@NotNull String column); + TableCreateBuilder addColumn(@NotNull String column); - TableCreateBuilder setColumns(@NotNull String... columns); + TableCreateBuilder setColumns(@NotNull String... columns); - default TableCreateBuilder defaultTablesSettings() { - return setTableSettings("ENGINE=InnoDB DEFAULT CHARSET=utf8"); - } + default TableCreateBuilder defaultTablesSettings() { + return setTableSettings("ENGINE=InnoDB DEFAULT CHARSET=utf8"); + } } diff --git a/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/TableQueryBuilder.java b/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/TableQueryBuilder.java index 0be6cbe..6348935 100644 --- a/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/TableQueryBuilder.java +++ b/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/TableQueryBuilder.java @@ -5,33 +5,33 @@ import org.jetbrains.annotations.NotNull; public interface TableQueryBuilder extends ConditionalBuilder { - @NotNull String getTableName(); + @NotNull String getTableName(); - /** - * 选定用于查询的列名 - * - * @param columnNames 列名 - * @return {@link TableQueryBuilder} - */ - TableQueryBuilder selectColumns(@NotNull String... columnNames); + /** + * 选定用于查询的列名 + * + * @param columnNames 列名 + * @return {@link TableQueryBuilder} + */ + TableQueryBuilder selectColumns(@NotNull String... columnNames); - /** - * 对结果进行排序 - * - * @param columnName 排序使用的列名 - * @param asc 是否为正序排序 (为false则倒序排序) - * @return {@link TableQueryBuilder} - */ - TableQueryBuilder orderBy(@NotNull String columnName, boolean asc); + /** + * 对结果进行排序 + * + * @param columnName 排序使用的列名 + * @param asc 是否为正序排序 (为false则倒序排序) + * @return {@link TableQueryBuilder} + */ + TableQueryBuilder orderBy(@NotNull String columnName, boolean asc); - /** - * 限制查询条数,用于分页查询。 - * - * @param start 开始数 - * @param end 结束条数 - * @return {@link TableQueryBuilder} - * @since 0.2.6 - */ - TableQueryBuilder setPageLimit(int start, int end); + /** + * 限制查询条数,用于分页查询。 + * + * @param start 开始数 + * @param end 结束条数 + * @return {@link TableQueryBuilder} + * @since 0.2.6 + */ + TableQueryBuilder setPageLimit(int start, int end); } diff --git a/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/UpdateBuilder.java b/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/UpdateBuilder.java index ca414b6..a5e3cf0 100644 --- a/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/UpdateBuilder.java +++ b/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/UpdateBuilder.java @@ -6,15 +6,15 @@ import java.util.LinkedHashMap; public interface UpdateBuilder extends ConditionalBuilder { - String getTableName(); + String getTableName(); - UpdateBuilder setColumnValues(LinkedHashMap columnData); + UpdateBuilder setColumnValues(LinkedHashMap columnData); - UpdateBuilder setColumnValues(String[] columnNames, Object[] columnValues); + UpdateBuilder setColumnValues(String[] columnNames, Object[] columnValues); - default UpdateBuilder setColumnValues(String columnName, Object columnValue) { - return setColumnValues(new String[]{columnName}, new Object[]{columnValue}); - } + default UpdateBuilder setColumnValues(String columnName, Object columnValue) { + return setColumnValues(new String[]{columnName}, new Object[]{columnValue}); + } } diff --git a/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/UpsertBuilder.java b/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/UpsertBuilder.java index cba0903..02c8768 100644 --- a/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/UpsertBuilder.java +++ b/easysql-api/src/main/java/cc/carm/lib/easysql/api/builder/UpsertBuilder.java @@ -2,8 +2,8 @@ package cc.carm.lib.easysql.api.builder; public interface UpsertBuilder { - String getTableName(); + String getTableName(); - UpsertBuilder setColumnNames(String[] columnNames, String updateColumn); + UpsertBuilder setColumnNames(String[] columnNames, String updateColumn); } 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 582371d..f23a8da 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 @@ -6,7 +6,7 @@ import java.sql.SQLException; public interface SQLFunction { - @Nullable - R apply(T t) throws SQLException; + @Nullable + R apply(T t) throws SQLException; } 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 be910fb..e34378b 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,103 +6,103 @@ 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 DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); - public TimeDateUtils() { - } + public TimeDateUtils() { + } - /** - * 得到当前时间文本。 - * - * @return 时间文本 格式{@link TimeDateUtils#getFormat()} - */ - public static String getCurrentTime() { - return getTimeString(System.currentTimeMillis()); - } + /** + * 得到当前时间文本。 + * + * @return 时间文本 格式{@link TimeDateUtils#getFormat()} + */ + public static String getCurrentTime() { + return getTimeString(System.currentTimeMillis()); + } - /** - * 得到一个时间戳的文本 - * - * @param timeMillis 时间戳 - * @return 时间文本 格式{@link TimeDateUtils#getFormat()} - */ - public static String getTimeString(long timeMillis) { - return getFormat().format(new Date(timeMillis)); - } + /** + * 得到一个时间戳的文本 + * + * @param timeMillis 时间戳 + * @return 时间文本 格式{@link TimeDateUtils#getFormat()} + */ + public static String getTimeString(long timeMillis) { + return getFormat().format(new Date(timeMillis)); + } - /** - * 得到一个日期时间的文本 - * - * @param time 日期时间 - * @return 时间文本 格式{@link TimeDateUtils#getFormat()} - */ - public static String getTimeString(Date time) { - return getFormat().format(time); - } + /** + * 得到一个日期时间的文本 + * + * @param time 日期时间 + * @return 时间文本 格式{@link TimeDateUtils#getFormat()} + */ + public static String getTimeString(Date time) { + return getFormat().format(time); + } - /** - * 得到一个时间文本的时间戳 - * - * @param timeString 时间文本 - * @return 时间戳 格式{@link TimeDateUtils#getFormat()} - */ - public static long parseTimeMillis(String timeString) { - if (timeString == null) { - return -1L; - } else { - try { - return format.parse(timeString).getTime(); - } catch (ParseException var2) { - return -1L; - } - } - } + /** + * 得到一个时间文本的时间戳 + * + * @param timeString 时间文本 + * @return 时间戳 格式{@link TimeDateUtils#getFormat()} + */ + public static long parseTimeMillis(String timeString) { + if (timeString == null) { + return -1L; + } else { + try { + return format.parse(timeString).getTime(); + } catch (ParseException var2) { + return -1L; + } + } + } - /** - * 得到一个时间文本的对应日期实例 - * - * @param timeString 时间文本 - * @return 日期实例 格式{@link TimeDateUtils#getFormat()} - */ - public static Date getTimeDate(String timeString) { - if (timeString == null) { - return null; - } else { - try { - return format.parse(timeString); - } catch (ParseException var2) { - return null; - } - } - } + /** + * 得到一个时间文本的对应日期实例 + * + * @param timeString 时间文本 + * @return 日期实例 格式{@link TimeDateUtils#getFormat()} + */ + public static Date getTimeDate(String timeString) { + if (timeString == null) { + return null; + } else { + try { + return format.parse(timeString); + } catch (ParseException var2) { + return null; + } + } + } - /** - * 将秒数转化为 DD:hh:mm:ss 格式 - * - * @param allSeconds 秒数 - * @return DD:hh:mm:ss格式文本 - */ - public static String toDHMSStyle(long allSeconds) { - long days = allSeconds / 86400L; - long hours = allSeconds % 86400L / 3600L; - long minutes = allSeconds % 3600L / 60L; - long seconds = allSeconds % 60L; - String DateTimes; - if (days > 0L) { - DateTimes = days + "天" + (hours > 0L ? hours + "小时" : "") + (minutes > 0L ? minutes + "分钟" : "") + (seconds > 0L ? seconds + "秒" : ""); - } else if (hours > 0L) { - DateTimes = hours + "小时" + (minutes > 0L ? minutes + "分钟" : "") + (seconds > 0L ? seconds + "秒" : ""); - } else if (minutes > 0L) { - DateTimes = minutes + "分钟" + (seconds > 0L ? seconds + "秒" : ""); - } else { - DateTimes = seconds + "秒"; - } + /** + * 将秒数转化为 DD:hh:mm:ss 格式 + * + * @param allSeconds 秒数 + * @return DD:hh:mm:ss格式文本 + */ + public static String toDHMSStyle(long allSeconds) { + long days = allSeconds / 86400L; + long hours = allSeconds % 86400L / 3600L; + long minutes = allSeconds % 3600L / 60L; + long seconds = allSeconds % 60L; + String DateTimes; + if (days > 0L) { + DateTimes = days + "天" + (hours > 0L ? hours + "小时" : "") + (minutes > 0L ? minutes + "分钟" : "") + (seconds > 0L ? seconds + "秒" : ""); + } else if (hours > 0L) { + DateTimes = hours + "小时" + (minutes > 0L ? minutes + "分钟" : "") + (seconds > 0L ? seconds + "秒" : ""); + } else if (minutes > 0L) { + DateTimes = minutes + "分钟" + (seconds > 0L ? seconds + "秒" : ""); + } else { + DateTimes = seconds + "秒"; + } - return DateTimes; - } + return DateTimes; + } - public static DateFormat getFormat() { - return format; - } + public static DateFormat getFormat() { + return format; + } } diff --git a/easysql-api/src/main/java/cc/carm/lib/easysql/api/util/UUIDUtil.java b/easysql-api/src/main/java/cc/carm/lib/easysql/api/util/UUIDUtil.java index 63b8241..ac18de2 100644 --- a/easysql-api/src/main/java/cc/carm/lib/easysql/api/util/UUIDUtil.java +++ b/easysql-api/src/main/java/cc/carm/lib/easysql/api/util/UUIDUtil.java @@ -4,12 +4,12 @@ import java.util.UUID; public class UUIDUtil { - public static UUID toUUID(String s) { - if (s.length() == 36) { - return UUID.fromString(s); - } else { - return UUID.fromString(s.substring(0, 8) + '-' + s.substring(8, 12) + '-' + s.substring(12, 16) + '-' + s.substring(16, 20) + '-' + s.substring(20)); - } - } + public static UUID toUUID(String s) { + if (s.length() == 36) { + return UUID.fromString(s); + } else { + return UUID.fromString(s.substring(0, 8) + '-' + s.substring(8, 12) + '-' + s.substring(12, 16) + '-' + s.substring(16, 20) + '-' + s.substring(20)); + } + } } diff --git a/easysql-beecp/pom.xml b/easysql-beecp/pom.xml index 1249eb9..62042df 100644 --- a/easysql-beecp/pom.xml +++ b/easysql-beecp/pom.xml @@ -1,6 +1,6 @@ - easysql-parent @@ -30,8 +30,8 @@ - GNU General Public License v3.0 - https://opensource.org/licenses/GPL-3.0 + The MIT License + https://opensource.org/licenses/MIT diff --git a/easysql-beecp/src/main/java/cc/carm/lib/easysql/EasySQL.java b/easysql-beecp/src/main/java/cc/carm/lib/easysql/EasySQL.java index 8f1c87b..6e2527e 100644 --- a/easysql-beecp/src/main/java/cc/carm/lib/easysql/EasySQL.java +++ b/easysql-beecp/src/main/java/cc/carm/lib/easysql/EasySQL.java @@ -11,36 +11,36 @@ import org.jetbrains.annotations.Nullable; public class EasySQL { - public static SQLManagerImpl createManager( - @NotNull String driver, @NotNull String url, - @NotNull String username, @Nullable String password) { - return createManager(new BeeDataSourceConfig(driver, url, username, password)); - } + public static SQLManagerImpl createManager( + @NotNull String driver, @NotNull String url, + @NotNull String username, @Nullable String password) { + return createManager(new BeeDataSourceConfig(driver, url, username, password)); + } - public static SQLManagerImpl createManager(@NotNull BeeDataSourceConfig config) { - return new SQLManagerImpl(new BeeDataSource(config)); - } + public static SQLManagerImpl createManager(@NotNull BeeDataSourceConfig config) { + return new SQLManagerImpl(new BeeDataSource(config)); + } - public static void shutdownManager(SQLManager manager, boolean forceClose, boolean outputActiveQuery) { - if (!manager.getActiveQuery().isEmpty()) { - manager.getLogger().severe("There are " + manager.getActiveQuery().size() + " connections still running"); - for (SQLQuery value : manager.getActiveQuery().values()) { - if (outputActiveQuery) { - manager.getLogger().severe("#" + value.getAction().getShortID() + " -> " + value.getSQLContent()); - manager.getLogger().severe("- execute at " + TimeDateUtils.getTimeString(value.getExecuteTime())); - } - if (forceClose) value.close(); - } - } - if (manager.getDataSource() instanceof BeeDataSource) { - //Close bee connection pool - ((BeeDataSource) manager.getDataSource()).close(); - } - } + public static void shutdownManager(SQLManager manager, boolean forceClose, boolean outputActiveQuery) { + if (!manager.getActiveQuery().isEmpty()) { + manager.getLogger().severe("There are " + manager.getActiveQuery().size() + " connections still running"); + for (SQLQuery value : manager.getActiveQuery().values()) { + if (outputActiveQuery) { + manager.getLogger().severe("#" + value.getAction().getShortID() + " -> " + value.getSQLContent()); + manager.getLogger().severe("- execute at " + TimeDateUtils.getTimeString(value.getExecuteTime())); + } + if (forceClose) value.close(); + } + } + if (manager.getDataSource() instanceof BeeDataSource) { + //Close bee connection pool + ((BeeDataSource) manager.getDataSource()).close(); + } + } - public static void shutdownManager(SQLManager manager) { - shutdownManager(manager, true, manager.isDebugMode()); - } + public static void shutdownManager(SQLManager manager) { + shutdownManager(manager, true, manager.isDebugMode()); + } } diff --git a/easysql-demo/pom.xml b/easysql-demo/pom.xml index 5e8343b..2bebd0c 100644 --- a/easysql-demo/pom.xml +++ b/easysql-demo/pom.xml @@ -1,6 +1,6 @@ - easysql-parent @@ -30,8 +30,8 @@ - GNU General Public License v3.0 - https://opensource.org/licenses/GPL-3.0 + The MIT License + https://opensource.org/licenses/MIT diff --git a/easysql-demo/src/main/java/EasySQLDemo.java b/easysql-demo/src/main/java/EasySQLDemo.java index 6354169..9a1dc15 100644 --- a/easysql-demo/src/main/java/EasySQLDemo.java +++ b/easysql-demo/src/main/java/EasySQLDemo.java @@ -9,100 +9,100 @@ import java.util.UUID; public class EasySQLDemo { - public void createTable(SQLManager sqlManager) { - // 同步创建表 - sqlManager.createTable("users") - .addColumn("id", "INT(11) AUTO_INCREMENT NOT NULL PRIMARY KEY") - .addColumn("uuid", "VARCHAR(32) NOT NULL UNIQUE KEY") - .addColumn("username", "VARCHAR(16) NOT NULL UNIQUE KEY") - .addColumn("age", "INT(3) NOT NULL DEFAULT 1") - .addColumn("email", "VARCHAR(32)") - .addColumn("phone", "VARCHAR(16)") - .addColumn("registerTime", "DATETIME NOT NULL") - .build().execute(null /* 不处理错误 */); - } + public void createTable(SQLManager sqlManager) { + // 同步创建表 + sqlManager.createTable("users") + .addColumn("id", "INT(11) AUTO_INCREMENT NOT NULL PRIMARY KEY") + .addColumn("uuid", "VARCHAR(32) NOT NULL UNIQUE KEY") + .addColumn("username", "VARCHAR(16) NOT NULL UNIQUE KEY") + .addColumn("age", "INT(3) NOT NULL DEFAULT 1") + .addColumn("email", "VARCHAR(32)") + .addColumn("phone", "VARCHAR(16)") + .addColumn("registerTime", "DATETIME NOT NULL") + .build().execute(null /* 不处理错误 */); + } - public void sqlQuery(SQLManager sqlManager) { - // 同步SQL查询 - try (SQLQuery query = sqlManager.createQuery() - .inTable("users") // 在users表中查询 - .selectColumns("id", "name") // 选中 id 与 name列 - .addCondition("age", ">", 18) // 限定 age 要大于5 - .addCondition("email", null) // 限定查询 email 字段为空 - .addNotNullCondition("phone") // 限定 phone 字段不为空 - .addTimeCondition("registerTime", // 时间字段 - System.currentTimeMillis() - 100000, //限制开始时间 - -1//不限制结束时间 - ).build().execute()) { - ResultSet resultSet = query.getResultSet(); - //do something + public void sqlQuery(SQLManager sqlManager) { + // 同步SQL查询 + try (SQLQuery query = sqlManager.createQuery() + .inTable("users") // 在users表中查询 + .selectColumns("id", "name") // 选中 id 与 name列 + .addCondition("age", ">", 18) // 限定 age 要大于5 + .addCondition("email", null) // 限定查询 email 字段为空 + .addNotNullCondition("phone") // 限定 phone 字段不为空 + .addTimeCondition("registerTime", // 时间字段 + System.currentTimeMillis() - 100000, //限制开始时间 + -1//不限制结束时间 + ).build().execute()) { + ResultSet resultSet = query.getResultSet(); + //do something - } catch (SQLException exception) { - exception.printStackTrace(); - } + } catch (SQLException exception) { + exception.printStackTrace(); + } - UUID userUUID = sqlManager.createQuery() - .inTable("users") // 在users表中查询 - .selectColumns("uuid") - .addCondition("id", 5) // 限定 id 为 5 - .setLimit(1) // 只取出一个数据 - .build().execute(query -> { - //可以直接进行数据处理 - ResultSet result = query.getResultSet(); - return result.next() ? UUIDUtil.toUUID(result.getString("uuid")) : null; - }, (exception, action) -> { - // 处理异常,不想处理直接填null - }); + UUID userUUID = sqlManager.createQuery() + .inTable("users") // 在users表中查询 + .selectColumns("uuid") + .addCondition("id", 5) // 限定 id 为 5 + .setLimit(1) // 只取出一个数据 + .build().execute(query -> { + //可以直接进行数据处理 + ResultSet result = query.getResultSet(); + return result.next() ? UUIDUtil.toUUID(result.getString("uuid")) : null; + }, (exception, action) -> { + // 处理异常,不想处理直接填null + }); - } + } - public void sqlQueryAsync(SQLManager sqlManager) { - // 异步SQL查询 - sqlManager.createQuery() - .inTable("users") // 在users表中查询 - .addCondition("id", 5) // 限定 id 为 5 - .setLimit(1) // 只取出一个数据 - .build().executeAsync(success -> { - ResultSet resultSet = success.getResultSet(); - try { - if (resultSet != null && resultSet.next()) { - String username = resultSet.getString("username"); - } - } catch (SQLException e) { - e.printStackTrace(); - } - }, (exception, action) -> { - //do something - long createTIme = action.getCreateTime(); - String shortID = action.getShortID(); - String sqlContent = action.getSQLContent(); - }); - } + public void sqlQueryAsync(SQLManager sqlManager) { + // 异步SQL查询 + sqlManager.createQuery() + .inTable("users") // 在users表中查询 + .addCondition("id", 5) // 限定 id 为 5 + .setLimit(1) // 只取出一个数据 + .build().executeAsync(success -> { + ResultSet resultSet = success.getResultSet(); + try { + if (resultSet != null && resultSet.next()) { + String username = resultSet.getString("username"); + } + } catch (SQLException e) { + e.printStackTrace(); + } + }, (exception, action) -> { + //do something + long createTIme = action.getCreateTime(); + String shortID = action.getShortID(); + String sqlContent = action.getSQLContent(); + }); + } - public void sqlInsert(SQLManager sqlManager) { - // 同步SQL插入 (不使用try-catch的情况下,返回的数值可能为空。) - Integer id = sqlManager.createInsert("users") - .setColumnNames("username", "phone", "email", "registerTime") - .setParams("CarmJos", "18888888888", "carm@carm.cc", TimeDateUtils.getCurrentTime()) - .setKeyIndex(1) // 设定自增主键的index,将会在后续返回自增主键 - .execute((exception, action) -> { - // 处理异常 - System.out.println("#" + action.getShortID() + " -> " + action.getSQLContent()); - exception.printStackTrace(); - }); + public void sqlInsert(SQLManager sqlManager) { + // 同步SQL插入 (不使用try-catch的情况下,返回的数值可能为空。) + Integer id = sqlManager.createInsert("users") + .setColumnNames("username", "phone", "email", "registerTime") + .setParams("CarmJos", "18888888888", "carm@carm.cc", TimeDateUtils.getCurrentTime()) + .setKeyIndex(1) // 设定自增主键的index,将会在后续返回自增主键 + .execute((exception, action) -> { + // 处理异常 + System.out.println("#" + action.getShortID() + " -> " + action.getSQLContent()); + exception.printStackTrace(); + }); - try { - Integer userID = sqlManager.createInsert("users") - .setColumnNames("username", "phone", "email", "registerTime") - .setParams("CarmJos", "18888888888", "carm@carm.cc", TimeDateUtils.getCurrentTime()) - .setKeyIndex(1) // 设定自增主键的index,将会在后续返回自增主键 - .execute(); + try { + Integer userID = sqlManager.createInsert("users") + .setColumnNames("username", "phone", "email", "registerTime") + .setParams("CarmJos", "18888888888", "carm@carm.cc", TimeDateUtils.getCurrentTime()) + .setKeyIndex(1) // 设定自增主键的index,将会在后续返回自增主键 + .execute(); - System.out.println("新用户的ID为 " + userID); + System.out.println("新用户的ID为 " + userID); - } catch (SQLException exception) { - exception.printStackTrace(); - } - } + } catch (SQLException exception) { + exception.printStackTrace(); + } + } } \ No newline at end of file diff --git a/easysql-hikaricp/pom.xml b/easysql-hikaricp/pom.xml index 3c57cd4..5007602 100644 --- a/easysql-hikaricp/pom.xml +++ b/easysql-hikaricp/pom.xml @@ -1,6 +1,6 @@ - easysql-parent @@ -29,8 +29,8 @@ - GNU General Public License v3.0 - https://opensource.org/licenses/GPL-3.0 + The MIT License + https://opensource.org/licenses/MIT diff --git a/easysql-hikaricp/src/main/java/cc/carm/lib/easysql/EasySQL.java b/easysql-hikaricp/src/main/java/cc/carm/lib/easysql/EasySQL.java index cee74a9..6572d05 100644 --- a/easysql-hikaricp/src/main/java/cc/carm/lib/easysql/EasySQL.java +++ b/easysql-hikaricp/src/main/java/cc/carm/lib/easysql/EasySQL.java @@ -13,44 +13,44 @@ import java.util.Properties; public class EasySQL { - public static SQLManagerImpl createManager( - @NotNull String driver, @NotNull String url, - @NotNull String username, @Nullable String password) { - HikariConfig config = new HikariConfig(); - config.setDriverClassName(driver); - config.setJdbcUrl(url); - config.setUsername(username); - config.setPassword(password); - return createManager(config); - } + public static SQLManagerImpl createManager( + @NotNull String driver, @NotNull String url, + @NotNull String username, @Nullable String password) { + HikariConfig config = new HikariConfig(); + config.setDriverClassName(driver); + config.setJdbcUrl(url); + config.setUsername(username); + config.setPassword(password); + return createManager(config); + } - public static SQLManagerImpl createManager(@NotNull Properties properties) { - return createManager(new HikariConfig(properties)); - } + public static SQLManagerImpl createManager(@NotNull Properties properties) { + return createManager(new HikariConfig(properties)); + } - public static SQLManagerImpl createManager(@NotNull HikariConfig config) { - return new SQLManagerImpl(new HikariDataSource(config)); - } + public static SQLManagerImpl createManager(@NotNull HikariConfig config) { + return new SQLManagerImpl(new HikariDataSource(config)); + } - public static void shutdownManager(SQLManager manager, boolean forceClose, boolean outputActiveQuery) { - if (!manager.getActiveQuery().isEmpty()) { - manager.getLogger().severe("There are " + manager.getActiveQuery().size() + " connections still running"); - for (SQLQuery value : manager.getActiveQuery().values()) { - if (outputActiveQuery) { - manager.getLogger().severe("#" + value.getAction().getShortID() + " -> " + value.getSQLContent()); - manager.getLogger().severe("- execute at " + TimeDateUtils.getTimeString(value.getExecuteTime())); - } - if (forceClose) value.close(); - } - } - if (manager.getDataSource() instanceof HikariDataSource) { - //Close hikari pool - ((HikariDataSource) manager.getDataSource()).close(); - } - } + public static void shutdownManager(SQLManager manager, boolean forceClose, boolean outputActiveQuery) { + if (!manager.getActiveQuery().isEmpty()) { + manager.getLogger().severe("There are " + manager.getActiveQuery().size() + " connections still running"); + for (SQLQuery value : manager.getActiveQuery().values()) { + if (outputActiveQuery) { + manager.getLogger().severe("#" + value.getAction().getShortID() + " -> " + value.getSQLContent()); + manager.getLogger().severe("- execute at " + TimeDateUtils.getTimeString(value.getExecuteTime())); + } + if (forceClose) value.close(); + } + } + if (manager.getDataSource() instanceof HikariDataSource) { + //Close hikari pool + ((HikariDataSource) manager.getDataSource()).close(); + } + } - public static void shutdownManager(SQLManager manager) { - shutdownManager(manager, true, manager.isDebugMode()); - } + public static void shutdownManager(SQLManager manager) { + shutdownManager(manager, true, manager.isDebugMode()); + } } diff --git a/easysql-impl/pom.xml b/easysql-impl/pom.xml index 03a04c0..ef17c3f 100644 --- a/easysql-impl/pom.xml +++ b/easysql-impl/pom.xml @@ -1,6 +1,6 @@ - easysql-parent @@ -30,8 +30,8 @@ - GNU General Public License v3.0 - https://opensource.org/licenses/GPL-3.0 + The MIT License + https://opensource.org/licenses/MIT 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 4b49b34..343b675 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 @@ -12,84 +12,84 @@ import java.util.function.Consumer; public abstract class AbstractSQLAction implements SQLAction { - private final @NotNull SQLManagerImpl sqlManager; + private final @NotNull SQLManagerImpl sqlManager; - private final @NotNull UUID uuid; - private final long createTime; + private final @NotNull UUID uuid; + private final long createTime; - protected @NotNull String sqlContent; + protected @NotNull String sqlContent; - protected @Nullable BiConsumer> exceptionHandler = null; + protected @Nullable BiConsumer> exceptionHandler = null; - public AbstractSQLAction(@NotNull SQLManagerImpl manager, @NotNull String sql) { - this(manager, sql, System.currentTimeMillis()); - } + public AbstractSQLAction(@NotNull SQLManagerImpl manager, @NotNull String sql) { + this(manager, sql, System.currentTimeMillis()); + } - 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, @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, 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) { + 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()); + } - public void handleException(SQLException exception) { - if (this.exceptionHandler == null) { - defaultExceptionHandler().accept(exception, this); - } else { - this.exceptionHandler.accept(exception, this); - } - } + public void handleException(SQLException exception) { + if (this.exceptionHandler == null) { + defaultExceptionHandler().accept(exception, this); + } else { + this.exceptionHandler.accept(exception, this); + } + } - @Override - public void executeAsync(Consumer success, BiConsumer> failure) { - getManager().getExecutorPool().submit(() -> { - try { - T returnedValue = execute(); - if (success != null) success.accept(returnedValue); - } catch (SQLException e) { - (failure == null ? defaultExceptionHandler() : failure).accept(e, this); - } - }); - } + @Override + public void executeAsync(Consumer success, BiConsumer> failure) { + getManager().getExecutorPool().submit(() -> { + try { + T returnedValue = execute(); + if (success != null) success.accept(returnedValue); + } catch (SQLException e) { + (failure == null ? defaultExceptionHandler() : failure).accept(e, this); + } + }); + } } 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 412361e..0f4891e 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 @@ -16,60 +16,60 @@ import java.util.stream.Collectors; public class PreparedSQLBatchUpdateActionImpl extends AbstractSQLAction> implements PreparedSQLUpdateBatchAction { - int keyIndex = -1; - List allParams; + int keyIndex = -1; + 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 setKeyIndex(int keyColumnIndex) { - this.keyIndex = keyColumnIndex; - return this; - } + @Override + public PreparedSQLUpdateBatchAction setKeyIndex(int keyColumnIndex) { + this.keyIndex = keyColumnIndex; + return this; + } - @Override - public @NotNull List execute() throws SQLException { - List returnedValues; - Connection connection = getManager().getConnection(); - PreparedStatement statement = StatementUtil.createPrepareStatementBatch( - connection, getSQLContent(), allParams, keyIndex > 0 - ); - outputDebugMessage(); - if (keyIndex > 0) { - statement.executeBatch(); - List generatedKeys = new ArrayList<>(); - ResultSet resultSet = statement.getGeneratedKeys(); - if (resultSet != null) { - while (resultSet.next()) generatedKeys.add(resultSet.getInt(keyIndex)); - resultSet.close(); - } - returnedValues = generatedKeys; - } else { - int[] executed = statement.executeBatch(); - returnedValues = Arrays.stream(executed).boxed().collect(Collectors.toList()); - } + @Override + public @NotNull List execute() throws SQLException { + List returnedValues; + Connection connection = getManager().getConnection(); + PreparedStatement statement = StatementUtil.createPrepareStatementBatch( + connection, getSQLContent(), allParams, keyIndex > 0 + ); + outputDebugMessage(); + if (keyIndex > 0) { + statement.executeBatch(); + List generatedKeys = new ArrayList<>(); + ResultSet resultSet = statement.getGeneratedKeys(); + if (resultSet != null) { + while (resultSet.next()) generatedKeys.add(resultSet.getInt(keyIndex)); + resultSet.close(); + } + returnedValues = generatedKeys; + } else { + int[] executed = statement.executeBatch(); + returnedValues = Arrays.stream(executed).boxed().collect(Collectors.toList()); + } - statement.close(); - connection.close(); + statement.close(); + connection.close(); - return returnedValues; - } + return returnedValues; + } } 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 4eff1f5..e1c3c2c 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 @@ -15,64 +15,64 @@ import java.util.List; public class PreparedSQLUpdateActionImpl 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 { - int value = -1; + @Override + public @NotNull Integer execute() throws SQLException { + int value = -1; - Connection connection = getManager().getConnection(); - PreparedStatement statement = StatementUtil.createPrepareStatement( - connection, getSQLContent(), params, keyIndex > 0 - ); - outputDebugMessage(); - if (keyIndex > 0) { - statement.executeUpdate(); - ResultSet resultSet = statement.getGeneratedKeys(); - if (resultSet != null) { - if (resultSet.next()) value = resultSet.getInt(keyIndex); - resultSet.close(); - } - } else { - value = statement.executeUpdate(); - } + Connection connection = getManager().getConnection(); + PreparedStatement statement = StatementUtil.createPrepareStatement( + connection, getSQLContent(), params, keyIndex > 0 + ); + outputDebugMessage(); + if (keyIndex > 0) { + statement.executeUpdate(); + ResultSet resultSet = statement.getGeneratedKeys(); + if (resultSet != null) { + if (resultSet.next()) value = resultSet.getInt(keyIndex); + resultSet.close(); + } + } else { + value = statement.executeUpdate(); + } - statement.close(); - connection.close(); + statement.close(); + connection.close(); - return value; - } + return value; + } } 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 4f31ddd..e7bbc11 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 @@ -11,42 +11,42 @@ import java.sql.Statement; public class SQLUpdateActionImpl extends AbstractSQLAction implements SQLUpdateAction { - int keyIndex = -1; + int keyIndex = -1; - 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 { - int returnedValue = -1; - Connection connection = getManager().getConnection(); - Statement statement = connection.createStatement(); - outputDebugMessage(); - if (keyIndex > 0) { - statement.executeUpdate(getSQLContent(), Statement.RETURN_GENERATED_KEYS); - ResultSet resultSet = statement.getGeneratedKeys(); - if (resultSet != null) { - if (resultSet.next()) { - returnedValue = resultSet.getInt(keyIndex); - } - resultSet.close(); - } - } else { - returnedValue = statement.executeUpdate(getSQLContent()); - } + @Override + public @NotNull Integer execute() throws SQLException { + int returnedValue = -1; + Connection connection = getManager().getConnection(); + Statement statement = connection.createStatement(); + outputDebugMessage(); + if (keyIndex > 0) { + statement.executeUpdate(getSQLContent(), Statement.RETURN_GENERATED_KEYS); + ResultSet resultSet = statement.getGeneratedKeys(); + if (resultSet != null) { + if (resultSet.next()) { + returnedValue = resultSet.getInt(keyIndex); + } + resultSet.close(); + } + } else { + returnedValue = statement.executeUpdate(getSQLContent()); + } - statement.close(); - connection.close(); + statement.close(); + connection.close(); - return returnedValue; - } + return returnedValue; + } - @Override - public SQLUpdateActionImpl setKeyIndex(int keyIndex) { - this.keyIndex = keyIndex; - return this; - } + @Override + public SQLUpdateActionImpl setKeyIndex(int keyIndex) { + this.keyIndex = keyIndex; + 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 6b3d875..847a37e 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,43 +14,43 @@ import java.util.stream.Collectors; public class SQLUpdateBatchActionImpl extends AbstractSQLAction> implements SQLUpdateBatchAction { - List sqlContents = new ArrayList<>(); + List sqlContents = new ArrayList<>(); - public SQLUpdateBatchActionImpl(@NotNull SQLManagerImpl manager, @NotNull String sql) { - super(manager, sql); - this.sqlContents.add(sql); - } + public SQLUpdateBatchActionImpl(@NotNull SQLManagerImpl manager, @NotNull String sql) { + super(manager, sql); + this.sqlContents.add(sql); + } - @Override - public @NotNull String getSQLContent() { - return this.sqlContents.get(0); - } + @Override + public @NotNull String getSQLContent() { + return this.sqlContents.get(0); + } - @Override - public @NotNull List getSQLContents() { - return this.sqlContents; - } + @Override + public @NotNull List getSQLContents() { + return this.sqlContents; + } - @Override - public SQLUpdateBatchAction addBatch(@NotNull String sql) { - this.sqlContents.add(sql); - return this; - } + @Override + public SQLUpdateBatchAction addBatch(@NotNull String sql) { + this.sqlContents.add(sql); + return this; + } - @Override - public @NotNull List execute() throws SQLException { - Connection connection = getManager().getConnection(); - Statement statement = connection.createStatement(); - outputDebugMessage(); - for (String content : this.sqlContents) { - statement.addBatch(content); - } - int[] executed = statement.executeBatch(); - List returnedValues = Arrays.stream(executed).boxed().collect(Collectors.toList()); + @Override + public @NotNull List execute() throws SQLException { + Connection connection = getManager().getConnection(); + Statement statement = connection.createStatement(); + outputDebugMessage(); + for (String content : this.sqlContents) { + statement.addBatch(content); + } + int[] executed = statement.executeBatch(); + List returnedValues = Arrays.stream(executed).boxed().collect(Collectors.toList()); - statement.close(); - connection.close(); + statement.close(); + connection.close(); - return returnedValues; - } + return returnedValues; + } } diff --git a/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 fdacb68..90822e7 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 @@ -17,51 +17,51 @@ 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 { - Connection connection = getManager().getConnection(); - getManager().debug("#" + getShortID() + " ->" + getSQLContent()); - PreparedStatement preparedStatement; - if (handler == null) { - preparedStatement = StatementUtil.createPrepareStatement(connection, getSQLContent(), this.params); - } else { - preparedStatement = connection.prepareStatement(getSQLContent()); - handler.accept(preparedStatement); - } + @Override + public @NotNull SQLQueryImpl execute() throws SQLException { + Connection connection = getManager().getConnection(); + getManager().debug("#" + getShortID() + " ->" + getSQLContent()); + PreparedStatement preparedStatement; + if (handler == null) { + preparedStatement = StatementUtil.createPrepareStatement(connection, getSQLContent(), this.params); + } else { + preparedStatement = connection.prepareStatement(getSQLContent()); + handler.accept(preparedStatement); + } - ResultSet resultSet = preparedStatement.executeQuery(); + ResultSet resultSet = preparedStatement.executeQuery(); - return new SQLQueryImpl(getManager(), this, connection, preparedStatement, resultSet); - } + return new SQLQueryImpl(getManager(), this, connection, preparedStatement, resultSet); + } } 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 f307c55..8083f59 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 @@ -2,8 +2,8 @@ package cc.carm.lib.easysql.action.query; import cc.carm.lib.easysql.action.AbstractSQLAction; import cc.carm.lib.easysql.api.SQLAction; -import cc.carm.lib.easysql.api.action.query.SQLQuery; import cc.carm.lib.easysql.api.action.query.QueryAction; +import cc.carm.lib.easysql.api.action.query.SQLQuery; import cc.carm.lib.easysql.manager.SQLManagerImpl; import cc.carm.lib.easysql.query.SQLQueryImpl; import org.jetbrains.annotations.NotNull; @@ -17,31 +17,31 @@ import java.util.function.Consumer; 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 { - Connection connection = getManager().getConnection(); - Statement statement = connection.createStatement(); + @Override + public @NotNull SQLQueryImpl execute() throws SQLException { + Connection connection = getManager().getConnection(); + Statement statement = connection.createStatement(); - outputDebugMessage(); + outputDebugMessage(); - ResultSet resultSet = statement.executeQuery(getSQLContent()); - SQLQueryImpl query = new SQLQueryImpl(getManager(), this, connection, statement, resultSet); - getManager().getActiveQuery().put(getActionUUID(), query); + ResultSet resultSet = statement.executeQuery(getSQLContent()); + SQLQueryImpl query = new SQLQueryImpl(getManager(), this, connection, statement, resultSet); + getManager().getActiveQuery().put(getActionUUID(), query); - return query; - } + return query; + } - @Override - public void executeAsync(Consumer success, BiConsumer> failure) { - try (SQLQueryImpl query = execute()) { - if (success != null) success.accept(query); - } catch (SQLException exception) { - (exceptionHandler == null ? defaultExceptionHandler() : exceptionHandler).accept(exception, this); - } - } + @Override + public void executeAsync(Consumer success, BiConsumer> failure) { + try (SQLQueryImpl query = execute()) { + if (success != null) success.accept(query); + } catch (SQLException exception) { + (exceptionHandler == null ? defaultExceptionHandler() : exceptionHandler).accept(exception, this); + } + } } 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 7d069b1..2b1943e 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 @@ -6,14 +6,14 @@ import org.jetbrains.annotations.NotNull; public abstract class AbstractSQLBuilder implements SQLBuilder { - @NotNull SQLManagerImpl sqlManager; + @NotNull SQLManagerImpl sqlManager; - public AbstractSQLBuilder(@NotNull SQLManagerImpl manager) { - this.sqlManager = manager; - } + public AbstractSQLBuilder(@NotNull SQLManagerImpl manager) { + this.sqlManager = manager; + } - @Override - public @NotNull SQLManagerImpl getManager() { - return this.sqlManager; - } + @Override + public @NotNull SQLManagerImpl getManager() { + return this.sqlManager; + } } 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 04e98d2..a779d61 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 @@ -14,131 +14,131 @@ import java.util.Iterator; import java.util.LinkedHashMap; public abstract class AbstractConditionalBuilder, T> - extends AbstractSQLBuilder implements ConditionalBuilder { + extends AbstractSQLBuilder implements ConditionalBuilder { - ArrayList conditionSQLs = new ArrayList<>(); - ArrayList conditionParams = new ArrayList<>(); - int limit = -1; + ArrayList conditionSQLs = new ArrayList<>(); + ArrayList conditionParams = new ArrayList<>(); + int limit = -1; - public AbstractConditionalBuilder(@NotNull SQLManagerImpl manager) { - super(manager); - } + public AbstractConditionalBuilder(@NotNull SQLManagerImpl manager) { + super(manager); + } - protected abstract B getThis(); + protected abstract B getThis(); - @Override - public B setConditions(@Nullable String condition) { - this.conditionSQLs = new ArrayList<>(); - this.conditionParams = new ArrayList<>(); - if (condition != null) this.conditionSQLs.add(condition); - return getThis(); - } + @Override + public B setConditions(@Nullable String condition) { + this.conditionSQLs = new ArrayList<>(); + this.conditionParams = new ArrayList<>(); + if (condition != null) this.conditionSQLs.add(condition); + return getThis(); + } - @Override - public B setConditions( - LinkedHashMap<@NotNull String, @Nullable Object> conditions - ) { - conditions.forEach(this::addCondition); - return getThis(); - } + @Override + public B setConditions( + LinkedHashMap<@NotNull String, @Nullable Object> conditions + ) { + conditions.forEach(this::addCondition); + return getThis(); + } - @Override - public B addCondition(@Nullable String condition) { - this.conditionSQLs.add(condition); - return getThis(); - } + @Override + public B addCondition(@Nullable String condition) { + this.conditionSQLs.add(condition); + return getThis(); + } - @Override - public B addCondition( - @NotNull String queryName, @NotNull String operator, @Nullable Object queryValue - ) { - addCondition("`" + queryName + "` " + operator + " ?"); - this.conditionParams.add(queryValue); - return getThis(); - } + @Override + public B addCondition( + @NotNull String queryName, @NotNull String operator, @Nullable Object queryValue + ) { + addCondition("`" + queryName + "` " + operator + " ?"); + this.conditionParams.add(queryValue); + return getThis(); + } - @Override - public B addCondition( - @NotNull String[] queryNames, @Nullable Object[] queryValues - ) { - if (queryNames.length != queryValues.length) { - throw new RuntimeException("queryNames are not match with queryValues"); - } - for (int i = 0; i < queryNames.length; i++) { - addCondition(queryNames[i], queryValues[i]); - } - return getThis(); - } + @Override + public B addCondition( + @NotNull String[] queryNames, @Nullable Object[] queryValues + ) { + if (queryNames.length != queryValues.length) { + throw new RuntimeException("queryNames are not match with queryValues"); + } + for (int i = 0; i < queryNames.length; i++) { + addCondition(queryNames[i], queryValues[i]); + } + return getThis(); + } - @Override - public B addNotNullCondition(@NotNull String queryName) { - return addCondition("`" + queryName + "` IS NOT NULL"); - } + @Override + public B addNotNullCondition(@NotNull String queryName) { + return addCondition("`" + queryName + "` IS NOT NULL"); + } - @Override - public B addTimeCondition( - @NotNull String queryName, @Nullable Date startDate, @Nullable Date endDate - ) { - if (startDate == null && endDate == null) return getThis(); // 都不限定时间,不用判断了 - if (startDate != null) { - addCondition("`" + queryName + "` BETWEEN ? AND ?"); - this.conditionParams.add(startDate); - if (endDate != null) { - this.conditionParams.add(endDate); - } else { - if (startDate instanceof java.sql.Date) { - this.conditionParams.add(new java.sql.Date(System.currentTimeMillis())); - } else if (startDate instanceof Time) { - this.conditionParams.add(new Time(System.currentTimeMillis())); - } else { - this.conditionParams.add(new Timestamp(System.currentTimeMillis())); - } - } - } else { - addCondition(queryName, "<=", endDate); - } - return getThis(); - } + @Override + public B addTimeCondition( + @NotNull String queryName, @Nullable Date startDate, @Nullable Date endDate + ) { + if (startDate == null && endDate == null) return getThis(); // 都不限定时间,不用判断了 + if (startDate != null) { + addCondition("`" + queryName + "` BETWEEN ? AND ?"); + this.conditionParams.add(startDate); + if (endDate != null) { + this.conditionParams.add(endDate); + } else { + if (startDate instanceof java.sql.Date) { + this.conditionParams.add(new java.sql.Date(System.currentTimeMillis())); + } else if (startDate instanceof Time) { + this.conditionParams.add(new Time(System.currentTimeMillis())); + } else { + this.conditionParams.add(new Timestamp(System.currentTimeMillis())); + } + } + } else { + addCondition(queryName, "<=", endDate); + } + return getThis(); + } - @Override - public B setLimit(int limit) { - this.limit = limit; - return getThis(); - } + @Override + public B setLimit(int limit) { + this.limit = limit; + return getThis(); + } - protected String buildConditionSQL() { + protected String buildConditionSQL() { - if (!conditionSQLs.isEmpty()) { - StringBuilder conditionBuilder = new StringBuilder(); - conditionBuilder.append("WHERE").append(" "); - Iterator iterator = conditionSQLs.iterator(); - while (iterator.hasNext()) { - conditionBuilder.append(iterator.next()); - if (iterator.hasNext()) conditionBuilder.append(" "); - } - return conditionBuilder.toString(); - } else { - return null; - } + if (!conditionSQLs.isEmpty()) { + StringBuilder conditionBuilder = new StringBuilder(); + conditionBuilder.append("WHERE").append(" "); + Iterator iterator = conditionSQLs.iterator(); + while (iterator.hasNext()) { + conditionBuilder.append(iterator.next()); + if (iterator.hasNext()) conditionBuilder.append(" "); + } + return conditionBuilder.toString(); + } else { + return null; + } - } + } - protected String buildLimitSQL() { - return limit > 0 ? "LIMIT " + limit : ""; - } + protected String buildLimitSQL() { + return limit > 0 ? "LIMIT " + limit : ""; + } - protected ArrayList getConditionParams() { - return conditionParams; - } + protected ArrayList getConditionParams() { + return conditionParams; + } - protected boolean hasConditions() { - return this.conditionSQLs != null && !this.conditionSQLs.isEmpty(); - } + protected boolean hasConditions() { + return this.conditionSQLs != null && !this.conditionSQLs.isEmpty(); + } - protected boolean hasConditionParams() { - return hasConditions() && getConditionParams() != null && !getConditionParams().isEmpty(); - } + protected boolean hasConditionParams() { + return hasConditions() && getConditionParams() != null && !getConditionParams().isEmpty(); + } } diff --git a/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/impl/DeleteBuilderImpl.java b/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/impl/DeleteBuilderImpl.java index 43e1832..fa1d466 100644 --- a/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/impl/DeleteBuilderImpl.java +++ b/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/impl/DeleteBuilderImpl.java @@ -7,41 +7,41 @@ import cc.carm.lib.easysql.manager.SQLManagerImpl; import org.jetbrains.annotations.NotNull; public class DeleteBuilderImpl - extends AbstractConditionalBuilder - implements DeleteBuilder { + extends AbstractConditionalBuilder + implements DeleteBuilder { - String tableName; + 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); + this.tableName = tableName; + } - @Override - public PreparedSQLUpdateAction build() { + @Override + public PreparedSQLUpdateAction build() { - StringBuilder sqlBuilder = new StringBuilder(); + StringBuilder sqlBuilder = new StringBuilder(); - sqlBuilder.append("DELETE FROM `").append(getTableName()).append("`"); + sqlBuilder.append("DELETE FROM `").append(getTableName()).append("`"); - 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 cac269d..7299318 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 @@ -10,37 +10,37 @@ import java.util.List; public abstract class InsertBuilderImpl extends AbstractSQLBuilder implements InsertBuilder { - String tableName; + String tableName; - public InsertBuilderImpl(@NotNull SQLManagerImpl manager, String tableName) { - super(manager); - this.tableName = tableName; - } + public InsertBuilderImpl(@NotNull SQLManagerImpl manager, 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) { + int valueLength = columnNames.size(); + StringBuilder sqlBuilder = new StringBuilder(); - sqlBuilder.append("INSERT IGNORE INTO `").append(tableName).append("`("); - Iterator iterator = columnNames.iterator(); - while (iterator.hasNext()) { - sqlBuilder.append("`").append(iterator.next()).append("`"); - if (iterator.hasNext()) sqlBuilder.append(", "); - } + sqlBuilder.append("INSERT IGNORE INTO `").append(tableName).append("`("); + Iterator iterator = columnNames.iterator(); + while (iterator.hasNext()) { + sqlBuilder.append("`").append(iterator.next()).append("`"); + if (iterator.hasNext()) sqlBuilder.append(", "); + } - sqlBuilder.append(") VALUES ("); + sqlBuilder.append(") VALUES ("); - for (int i = 0; i < valueLength; i++) { - sqlBuilder.append("?"); - if (i != valueLength - 1) { - sqlBuilder.append(", "); - } - } - sqlBuilder.append(")"); - return sqlBuilder.toString(); - } + for (int i = 0; i < valueLength; i++) { + sqlBuilder.append("?"); + if (i != valueLength - 1) { + sqlBuilder.append(", "); + } + } + sqlBuilder.append(")"); + return sqlBuilder.toString(); + } - public String getTableName() { - return tableName; - } + public String getTableName() { + return tableName; + } } diff --git a/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/impl/QueryBuilderImpl.java b/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/impl/QueryBuilderImpl.java index b6dfaa2..580d06a 100644 --- a/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/impl/QueryBuilderImpl.java +++ b/easysql-impl/src/main/java/cc/carm/lib/easysql/builder/impl/QueryBuilderImpl.java @@ -11,24 +11,24 @@ import cc.carm.lib.easysql.manager.SQLManagerImpl; import org.jetbrains.annotations.NotNull; public class QueryBuilderImpl extends AbstractSQLBuilder implements QueryBuilder { - public QueryBuilderImpl(@NotNull SQLManagerImpl manager) { - super(manager); - } + public QueryBuilderImpl(@NotNull SQLManagerImpl manager) { + super(manager); + } - @Override - @Deprecated - public QueryAction withSQL(@NotNull String sql) { - return new QueryActionImpl(getManager(), sql); - } + @Override + @Deprecated + public QueryAction withSQL(@NotNull String sql) { + return new QueryActionImpl(getManager(), sql); + } - @Override - public PreparedQueryAction withPreparedSQL(@NotNull String sql) { - return new PreparedQueryActionImpl(getManager(), sql); - } + @Override + public PreparedQueryAction withPreparedSQL(@NotNull String sql) { + return new PreparedQueryActionImpl(getManager(), sql); + } - @Override - public TableQueryBuilder inTable(@NotNull String tableName) { - return new TableQueryBuilderImpl(getManager(), tableName); - } + @Override + public TableQueryBuilder inTable(@NotNull String tableName) { + return new TableQueryBuilderImpl(getManager(), 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 363fd09..e169ee9 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 @@ -10,37 +10,37 @@ import java.util.List; public abstract class ReplaceBuilderImpl extends AbstractSQLBuilder implements ReplaceBuilder { - String tableName; + String tableName; - public ReplaceBuilderImpl(@NotNull SQLManagerImpl manager, String tableName) { - super(manager); - this.tableName = tableName; - } + public ReplaceBuilderImpl(@NotNull SQLManagerImpl manager, 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) { + int valueLength = columnNames.size(); + StringBuilder sqlBuilder = new StringBuilder(); - sqlBuilder.append("REPLACE INTO `").append(tableName).append("`("); - Iterator iterator = columnNames.iterator(); - while (iterator.hasNext()) { - sqlBuilder.append("`").append(iterator.next()).append("`"); - if (iterator.hasNext()) sqlBuilder.append(", "); - } + sqlBuilder.append("REPLACE INTO `").append(tableName).append("`("); + Iterator iterator = columnNames.iterator(); + while (iterator.hasNext()) { + sqlBuilder.append("`").append(iterator.next()).append("`"); + if (iterator.hasNext()) sqlBuilder.append(", "); + } - sqlBuilder.append(") VALUES ("); + sqlBuilder.append(") VALUES ("); - for (int i = 0; i < valueLength; i++) { - sqlBuilder.append("?"); - if (i != valueLength - 1) { - sqlBuilder.append(", "); - } - } - sqlBuilder.append(")"); - return sqlBuilder.toString(); - } + for (int i = 0; i < valueLength; i++) { + sqlBuilder.append("?"); + if (i != valueLength - 1) { + sqlBuilder.append(", "); + } + } + sqlBuilder.append(")"); + return sqlBuilder.toString(); + } - public String getTableName() { - return tableName; - } + public String getTableName() { + return tableName; + } } 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 12aa8e5..f0954bf 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 @@ -13,59 +13,59 @@ import java.util.List; public class TableCreateBuilderImpl extends AbstractSQLBuilder implements TableCreateBuilder { - String tableName; + String tableName; - List columns; + List columns; - String tableSettings; + String tableSettings; - public TableCreateBuilderImpl(SQLManagerImpl manager, String tableName) { - super(manager); - this.tableName = tableName; - this.columns = new ArrayList<>(); - defaultTablesSettings(); - } + public TableCreateBuilderImpl(SQLManagerImpl manager, String tableName) { + super(manager); + this.tableName = tableName; + this.columns = new ArrayList<>(); + defaultTablesSettings(); + } - @Override - public @NotNull String getTableName() { - return this.tableName; - } + @Override + public @NotNull String getTableName() { + return this.tableName; + } - @Override - public @NotNull String getTableSettings() { - return this.tableSettings; - } + @Override + public @NotNull String getTableSettings() { + return this.tableSettings; + } - @Override - public SQLUpdateAction build() { - StringBuilder createSQL = new StringBuilder(); - createSQL.append("CREATE TABLE IF NOT EXISTS `").append(tableName).append("`"); - createSQL.append("("); - for (int i = 0; i < columns.size(); i++) { - createSQL.append(columns.get(i)); - if (i != columns.size() - 1) createSQL.append(", "); - } - createSQL.append(") ").append(tableSettings); + @Override + public SQLUpdateAction build() { + StringBuilder createSQL = new StringBuilder(); + createSQL.append("CREATE TABLE IF NOT EXISTS `").append(tableName).append("`"); + createSQL.append("("); + for (int i = 0; i < columns.size(); i++) { + createSQL.append(columns.get(i)); + if (i != columns.size() - 1) createSQL.append(", "); + } + createSQL.append(") ").append(tableSettings); - return new SQLUpdateActionImpl(getManager(), createSQL.toString()); - } + return new SQLUpdateActionImpl(getManager(), createSQL.toString()); + } - @Override - public TableCreateBuilder addColumn(@NotNull String column) { - this.columns.add(column); - return this; - } + @Override + public TableCreateBuilder addColumn(@NotNull String column) { + this.columns.add(column); + return this; + } - @Override - public TableCreateBuilder setColumns(@NotNull String[] columns) { - this.columns = Arrays.asList(columns); - return this; - } + @Override + public TableCreateBuilder setColumns(@NotNull String[] columns) { + this.columns = Arrays.asList(columns); + return this; + } - @Override - public TableCreateBuilder setTableSettings(@NotNull String settings) { - this.tableSettings = settings; - return this; - } + @Override + public TableCreateBuilder setTableSettings(@NotNull String settings) { + this.tableSettings = settings; + 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 2d8e61a..5f38663 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 @@ -8,80 +8,80 @@ import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; public class TableQueryBuilderImpl - extends AbstractConditionalBuilder - implements TableQueryBuilder { + extends AbstractConditionalBuilder + implements TableQueryBuilder { - @NotNull String tableName; + @NotNull String tableName; - String[] columns; + String[] columns; - @Nullable String orderBy; + @Nullable String orderBy; - int[] pageLimit; + int[] pageLimit; - public TableQueryBuilderImpl(@NotNull SQLManagerImpl manager, @NotNull String tableName) { - super(manager); - this.tableName = tableName; - } + 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("`").append(name).append("`"); - if (i != columns.length - 1) { - sqlBuilder.append(","); - } - } - } + @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("`").append(name).append("`"); + if (i != columns.length - 1) { + sqlBuilder.append(","); + } + } + } - sqlBuilder.append(" ").append("FROM").append(" "); - sqlBuilder.append("`").append(tableName).append("`"); + sqlBuilder.append(" ").append("FROM").append(" "); + sqlBuilder.append("`").append(tableName).append("`"); - if (hasConditions()) sqlBuilder.append(" ").append(buildConditionSQL()); - - if (pageLimit != null && pageLimit.length == 2) { - sqlBuilder.append(" LIMIT ").append(pageLimit[0]).append(",").append(pageLimit[1]); - } else if (limit > 0) { - sqlBuilder.append(" ").append(buildLimitSQL()); - } + if (hasConditions()) sqlBuilder.append(" ").append(buildConditionSQL()); - if (orderBy != null) sqlBuilder.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); - } + if (orderBy != null) sqlBuilder.append(orderBy); - @Override - public @NotNull String getTableName() { - return tableName; - } + return new PreparedQueryActionImpl(getManager(), sqlBuilder.toString()) + .setParams(hasConditionParams() ? getConditionParams() : null); + } - @Override - public TableQueryBuilderImpl selectColumns(@NotNull String[] columnNames) { - this.columns = columnNames; - return this; - } + @Override + public @NotNull String getTableName() { + return tableName; + } - @Override - public TableQueryBuilder orderBy(@NotNull String columnName, boolean asc) { - this.orderBy = "ORDER BY `" + columnName + "` " + (asc ? "ASC" : "DESC"); - return this; - } + @Override + public TableQueryBuilderImpl selectColumns(@NotNull String[] columnNames) { + this.columns = columnNames; + return this; + } - @Override - public TableQueryBuilder setPageLimit(int start, int end) { - this.pageLimit = new int[]{start, end}; - return this; - } + @Override + public TableQueryBuilder orderBy(@NotNull String columnName, boolean asc) { + this.orderBy = "ORDER BY `" + columnName + "` " + (asc ? "ASC" : "DESC"); + return this; + } - @Override - protected TableQueryBuilderImpl getThis() { - 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 1c7117c..4216cab 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 @@ -9,72 +9,72 @@ import org.jetbrains.annotations.NotNull; import java.util.*; public class UpdateBuilderImpl - extends AbstractConditionalBuilder - implements UpdateBuilder { + extends AbstractConditionalBuilder + implements UpdateBuilder { - String tableName; + String tableName; - List columnNames; - List columnValues; + List columnNames; + List columnValues; - public UpdateBuilderImpl(@NotNull SQLManagerImpl manager, @NotNull String tableName) { - super(manager); - this.tableName = tableName; - } + public UpdateBuilderImpl(@NotNull SQLManagerImpl manager, @NotNull String tableName) { + super(manager); + this.tableName = tableName; + } - @Override - public PreparedSQLUpdateAction build() { + @Override + public PreparedSQLUpdateAction build() { - StringBuilder sqlBuilder = new StringBuilder(); + StringBuilder sqlBuilder = new StringBuilder(); - sqlBuilder.append("UPDATE `").append(getTableName()).append("` SET "); + sqlBuilder.append("UPDATE `").append(getTableName()).append("` SET "); - Iterator iterator = this.columnNames.iterator(); - while (iterator.hasNext()) { - sqlBuilder.append("`").append(iterator.next()).append("` = ?"); - if (iterator.hasNext()) sqlBuilder.append(" , "); - } - List allParams = new ArrayList<>(this.columnValues); + Iterator iterator = this.columnNames.iterator(); + while (iterator.hasNext()) { + sqlBuilder.append("`").append(iterator.next()).append("` = ?"); + if (iterator.hasNext()) sqlBuilder.append(" , "); + } + List allParams = new ArrayList<>(this.columnValues); - if (hasConditions()) { - sqlBuilder.append(" ").append(buildConditionSQL()); - allParams.addAll(getConditionParams()); - } + if (hasConditions()) { + sqlBuilder.append(" ").append(buildConditionSQL()); + allParams.addAll(getConditionParams()); + } - if (limit > 0) sqlBuilder.append(" ").append(buildLimitSQL()); + if (limit > 0) sqlBuilder.append(" ").append(buildLimitSQL()); - return new PreparedSQLUpdateActionImpl(getManager(), sqlBuilder.toString(), allParams); - } + return new PreparedSQLUpdateActionImpl(getManager(), sqlBuilder.toString(), allParams); + } - @Override - public String getTableName() { - return tableName; - } + @Override + public String getTableName() { + return tableName; + } - @Override - public UpdateBuilder setColumnValues(LinkedHashMap columnData) { - this.columnNames = new ArrayList<>(); - this.columnValues = new ArrayList<>(); - columnData.forEach((name, value) -> { - this.columnNames.add(name); - this.columnValues.add(value); - }); - return this; - } + @Override + public UpdateBuilder setColumnValues(LinkedHashMap columnData) { + this.columnNames = new ArrayList<>(); + this.columnValues = new ArrayList<>(); + columnData.forEach((name, value) -> { + this.columnNames.add(name); + this.columnValues.add(value); + }); + return this; + } - @Override - public UpdateBuilder setColumnValues(String[] columnNames, Object[] columnValues) { - if (columnNames.length != columnValues.length) { - throw new RuntimeException("columnNames are not match with columnValues"); - } - this.columnNames = Arrays.asList(columnNames); - this.columnValues = Arrays.asList(columnValues); - return this; - } + @Override + public UpdateBuilder setColumnValues(String[] columnNames, Object[] columnValues) { + if (columnNames.length != columnValues.length) { + throw new RuntimeException("columnNames are not match with columnValues"); + } + this.columnNames = Arrays.asList(columnNames); + this.columnValues = Arrays.asList(columnValues); + return this; + } - @Override - protected UpdateBuilder getThis() { - return this; - } + @Override + protected UpdateBuilder getThis() { + return this; + } } 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 1926cac..8e38ceb 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 @@ -25,164 +25,162 @@ import java.util.logging.Logger; public class SQLManagerImpl implements SQLManager { - private final Logger LOGGER; - private final DataSource dataSource; - ConcurrentHashMap activeQuery = new ConcurrentHashMap<>(); + private final Logger LOGGER; + private final DataSource dataSource; + protected ExecutorService executorPool; + ConcurrentHashMap activeQuery = new ConcurrentHashMap<>(); + boolean debug = false; - boolean debug = false; + public SQLManagerImpl(@NotNull DataSource dataSource) { + this(dataSource, null); + } - protected ExecutorService executorPool; + 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) { - this(dataSource, null); - } + @Override + public boolean isDebugMode() { + return this.debug; + } - 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 void setDebugMode(boolean enable) { + this.debug = enable; + } - @Override - public boolean isDebugMode() { - return this.debug; - } + public void debug(String msg) { + if (isDebugMode()) getLogger().info("[DEBUG] " + msg); + } - @Override - public void setDebugMode(boolean enable) { - this.debug = enable; - } + public Logger getLogger() { + return LOGGER; + } - public void debug(String msg) { - if (isDebugMode()) getLogger().info("[DEBUG] " + msg); - } + public ExecutorService getExecutorPool() { + return executorPool; + } - public Logger getLogger() { - return LOGGER; - } + @Override + public @NotNull DataSource getDataSource() { + return this.dataSource; + } - public ExecutorService getExecutorPool() { - return executorPool; - } + @Override + public @NotNull Connection getConnection() throws SQLException { + return getDataSource().getConnection(); + } - @Override - public @NotNull DataSource getDataSource() { - return this.dataSource; - } + @Override + public @NotNull Map getActiveQuery() { + return this.activeQuery; + } - @Override - public @NotNull Connection getConnection() throws SQLException { - return getDataSource().getConnection(); - } + @Override + public Integer executeSQL(String sql) { + return new SQLUpdateActionImpl(this, sql).execute(null); + } - @Override - public @NotNull Map getActiveQuery() { - return this.activeQuery; - } + @Override + public Integer executeSQL(String sql, Object[] params) { + return new PreparedSQLUpdateActionImpl(this, sql, params).execute(null); + } - @Override - public Integer executeSQL(String sql) { - return new SQLUpdateActionImpl(this, sql).execute(null); - } + @Override + public List executeSQLBatch(String sql, Iterable paramsBatch) { + return new PreparedSQLBatchUpdateActionImpl(this, sql) + .setAllParams(paramsBatch) + .execute(null); + } - @Override - public Integer executeSQL(String sql, Object[] params) { - return new PreparedSQLUpdateActionImpl(this, sql, params).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(String sql, Iterable paramsBatch) { - return new PreparedSQLBatchUpdateActionImpl(this, sql) - .setAllParams(paramsBatch) - .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 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); - } + SQLUpdateBatchAction action = new SQLUpdateBatchActionImpl(this, iterator.next()); + while (iterator.hasNext()) { + action.addBatch(iterator.next()); + } - @Override - public @Nullable List executeSQLBatch(@NotNull Iterable sqlBatch) { - Iterator iterator = sqlBatch.iterator(); - if (!iterator.hasNext()) return null; // PLEASE GIVE IT SOMETHING + return action.execute(null); + } - SQLUpdateBatchAction action = new SQLUpdateBatchActionImpl(this, iterator.next()); - while (iterator.hasNext()) { - action.addBatch(iterator.next()); - } + @Override + public TableCreateBuilder createTable(@NotNull String tableName) { + return new TableCreateBuilderImpl(this, tableName); + } - return action.execute(null); - } + @Override + public QueryBuilder createQuery() { + return new QueryBuilderImpl(this); + } - @Override - public TableCreateBuilder createTable(@NotNull String tableName) { - return new TableCreateBuilderImpl(this, tableName); - } + @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 QueryBuilder createQuery() { - return new QueryBuilderImpl(this); - } + @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 createInsertBatch(@NotNull String tableName) { - return new InsertBuilderImpl(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 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 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 createReplaceBatch(@NotNull String tableName) { - return new ReplaceBuilderImpl(this, tableName) { - @Override - public PreparedSQLUpdateBatchAction setColumnNames(List columnNames) { - return new PreparedSQLBatchUpdateActionImpl(getManager(), buildSQL(getTableName(), columnNames)); - } - }; - } + @Override + public UpdateBuilder createUpdate(@NotNull String tableName) { + return new UpdateBuilderImpl(this, tableName); + } - @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 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 5fc0ba4..f5138c4 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,77 +11,77 @@ import java.sql.Statement; public class SQLQueryImpl implements SQLQuery { - protected final long executeTime; + protected final long executeTime; - protected SQLManagerImpl sqlManager; - protected QueryActionImpl queryAction; + protected SQLManagerImpl sqlManager; + protected QueryActionImpl queryAction; - Connection connection; - Statement statement; + Connection connection; + Statement statement; - ResultSet resultSet; + ResultSet resultSet; - public SQLQueryImpl( - SQLManagerImpl sqlManager, QueryActionImpl queryAction, - Connection connection, Statement statement, ResultSet resultSet - ) { - this.executeTime = System.currentTimeMillis(); - 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.executeTime = System.currentTimeMillis(); + this.sqlManager = sqlManager; + this.queryAction = queryAction; + this.connection = connection; + this.statement = statement; + this.resultSet = resultSet; + } - @Override - public long getExecuteTime() { - return this.executeTime; - } + @Override + public long getExecuteTime() { + return this.executeTime; + } - @Override - public SQLManagerImpl getManager() { - return this.sqlManager; - } + @Override + public SQLManagerImpl getManager() { + return this.sqlManager; + } - @Override - public QueryActionImpl getAction() { - return this.queryAction; - } + @Override + public QueryActionImpl getAction() { + return this.queryAction; + } - @Override - public ResultSet getResultSet() { - return this.resultSet; - } + @Override + public ResultSet getResultSet() { + return this.resultSet; + } - @Override - public String getSQLContent() { - return getAction().getSQLContent(); - } + @Override + public String getSQLContent() { + return getAction().getSQLContent(); + } - @Override - public void close() { - try { - if (getResultSet() != null) getResultSet().close(); - if (getStatement() != null) getStatement().close(); - if (getConnection() != null) getConnection().close(); + @Override + public void close() { + try { + if (getResultSet() != null) getResultSet().close(); + if (getStatement() != null) getStatement().close(); + if (getConnection() != null) getConnection().close(); - getManager().debug("#" + getAction().getShortID() + - " -> finished after " + (System.currentTimeMillis() - getExecuteTime()) + " ms." - ); - getManager().getActiveQuery().remove(getAction().getActionUUID()); - } catch (SQLException e) { - getAction().handleException(e); - } - this.queryAction = null; - } + getManager().debug("#" + getAction().getShortID() + + " -> finished after " + (System.currentTimeMillis() - getExecuteTime()) + " ms." + ); + getManager().getActiveQuery().remove(getAction().getActionUUID()); + } catch (SQLException e) { + getAction().handleException(e); + } + this.queryAction = null; + } - @Override - public Statement getStatement() { - return this.statement; - } + @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 0596a7e..be4df55 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,195 +10,195 @@ 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) { - int sqlType = 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) { + int sqlType = Types.VARCHAR; - final ParameterMetaData pmd; - try { - pmd = statement.getParameterMetaData(); - sqlType = pmd.getParameterType(paramIndex); - } catch (SQLException ignore) { - } + final ParameterMetaData pmd; + try { + pmd = statement.getParameterMetaData(); + sqlType = pmd.getParameterType(paramIndex); + } catch (SQLException ignore) { + } - return sqlType; - } + return sqlType; + } - /** - * 为 {@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; + } - // 日期特殊处理,默认按照时间戳传入,避免毫秒丢失 - 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; - } - if (param instanceof BigInteger) { - // BigInteger转为BigDecimal - preparedStatement.setBigDecimal(paramIndex, new BigDecimal((BigInteger) param)); - return; - } - // 忽略其它数字类型,按照默认类型传入 - } + // 针对大数字类型的特殊处理 + if (param instanceof Number) { + if (param instanceof BigDecimal) { + // BigDecimal的转换交给JDBC驱动处理 + preparedStatement.setBigDecimal(paramIndex, (BigDecimal) param); + return; + } + if (param instanceof BigInteger) { + // BigInteger转为BigDecimal + preparedStatement.setBigDecimal(paramIndex, new BigDecimal((BigInteger) param)); + return; + } + // 忽略其它数字类型,按照默认类型传入 + } - // 其它参数类型直接插入 - preparedStatement.setObject(paramIndex, param); - } + // 其它参数类型直接插入 + preparedStatement.setObject(paramIndex, param); + } } diff --git a/pom.xml b/pom.xml index c3f9b38..ff73830 100644 --- a/pom.xml +++ b/pom.xml @@ -1,6 +1,6 @@ - 4.0.0 @@ -49,8 +49,8 @@ - GNU General Public License v3.0 - https://opensource.org/licenses/GPL-3.0 + The MIT License + https://opensource.org/licenses/MIT @@ -128,22 +128,22 @@ org.apache.maven.plugins maven-surefire-plugin - - - - - - - - - - - - - - + + + + + + + + + + + + + + - +