From daa430cb14048b336a5880caa88b976e8afc9578 Mon Sep 17 00:00:00 2001 From: carm Date: Fri, 1 Jul 2022 22:14:37 +0800 Subject: [PATCH] =?UTF-8?q?[0.4.2]=20feat(table):=20=E4=BB=A4=20SQLTable?= =?UTF-8?q?=20=E5=8F=98=E4=B8=BA=E6=8E=A5=E5=8F=A3=EF=BC=8C=E9=A2=9D?= =?UTF-8?q?=E5=A4=96=E6=B7=BB=E5=8A=A0=20NamedSQLTable=20=E6=8A=BD?= =?UTF-8?q?=E8=B1=A1=E7=B1=BB=E7=94=A8=E4=BA=8E=E7=AE=80=E5=8D=95=E5=AE=9E?= =?UTF-8?q?=E7=8E=B0=20SQLTable=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit BREAKING-CHANGE: SQLTable的类型已转变,以往的代码可能失效。 --- .../{JAVADOC-README.md => javadoc/README.md} | 0 .../README.md} | 0 .github/workflows/deploy.yml | 4 +- api/pom.xml | 2 +- .../cc/carm/lib/easysql/api/SQLTable.java | 121 +++++++++--------- .../lib/easysql/api/table/NamedSQLTable.java | 50 ++++++++ demo/pom.xml | 2 +- impl/pom.xml | 2 +- pom.xml | 2 +- with-pool/beecp/pom.xml | 2 +- with-pool/hikaricp/pom.xml | 2 +- 11 files changed, 122 insertions(+), 65 deletions(-) rename .documentation/{JAVADOC-README.md => javadoc/README.md} (100%) rename .documentation/{REPOSITORY-README.md => repository/README.md} (100%) create mode 100644 api/src/main/java/cc/carm/lib/easysql/api/table/NamedSQLTable.java diff --git a/.documentation/JAVADOC-README.md b/.documentation/javadoc/README.md similarity index 100% rename from .documentation/JAVADOC-README.md rename to .documentation/javadoc/README.md diff --git a/.documentation/REPOSITORY-README.md b/.documentation/repository/README.md similarity index 100% rename from .documentation/REPOSITORY-README.md rename to .documentation/repository/README.md diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index d3c34bf..2c58315 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -83,14 +83,14 @@ jobs: rm -rf deploy mkdir -vp deploy cp -vrf $HOME/local-deploy/* deploy/ - cp -vrf .documentation/REPOSITORY-README.md deploy/README.md + cp -vrf .documentation/repository/README.md deploy/README.md - name: "Copy Javadoc" run: | rm -rf docs mkdir -vp docs cp -vrf api/target/apidocs/* docs/ - cp -vrf .documentation/JAVADOC-README.md docs/README.md + cp -vrf .documentation/javadoc/README.md docs/README.md - name: "Generate the Javadoc sitemap" id: sitemap diff --git a/api/pom.xml b/api/pom.xml index 916b790..76b6f99 100644 --- a/api/pom.xml +++ b/api/pom.xml @@ -5,7 +5,7 @@ cc.carm.lib easysql-parent - 0.4.1 + 0.4.2 4.0.0 diff --git a/api/src/main/java/cc/carm/lib/easysql/api/SQLTable.java b/api/src/main/java/cc/carm/lib/easysql/api/SQLTable.java index 9bdea78..61581d4 100644 --- a/api/src/main/java/cc/carm/lib/easysql/api/SQLTable.java +++ b/api/src/main/java/cc/carm/lib/easysql/api/SQLTable.java @@ -4,26 +4,28 @@ import cc.carm.lib.easysql.api.action.PreparedSQLUpdateAction; import cc.carm.lib.easysql.api.action.PreparedSQLUpdateBatchAction; import cc.carm.lib.easysql.api.builder.*; import cc.carm.lib.easysql.api.function.SQLHandler; +import cc.carm.lib.easysql.api.table.NamedSQLTable; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.sql.SQLException; +import java.util.Optional; /** * SQLTable 基于 {@link TableCreateBuilder} 构建表,用于快速创建与该表相关的操作。 * * * @author CarmJos * @since 0.3.10 */ -public abstract class SQLTable { +public interface SQLTable { - public static @NotNull SQLTable of(@NotNull String tableName, @Nullable SQLHandler table) { - return new SQLTable(tableName) { + static @NotNull NamedSQLTable of(@NotNull String tableName, @Nullable SQLHandler table) { + return new NamedSQLTable(tableName) { @Override public boolean create(@NotNull SQLManager sqlManager, String tablePrefix) throws SQLException { if (this.manager == null) this.manager = sqlManager; @@ -36,108 +38,113 @@ public abstract class SQLTable { }; } - public static @NotNull SQLTable of(@NotNull String tableName, @NotNull String[] columns) { + static @NotNull NamedSQLTable of(@NotNull String tableName, @NotNull String[] columns) { return of(tableName, columns, null); } - public static @NotNull SQLTable of(@NotNull String tableName, - @NotNull String[] columns, @Nullable String tableSettings) { + static @NotNull NamedSQLTable of(@NotNull String tableName, + @NotNull String[] columns, @Nullable String tableSettings) { return of(tableName, builder -> { builder.setColumns(columns); if (tableSettings != null) builder.setTableSettings(tableSettings); }); } - private final @NotNull String tableName; - - protected String tablePrefix; - protected SQLManager manager; + /** + * 以指定的 {@link SQLManager} 实例初始化并创建该表 + * + * @param sqlManager {@link SQLManager} 实例 + * @return 是否新创建了本表 (若已创建或创建失败则返回false) + * @throws SQLException 当数据库返回异常时抛出 + */ + boolean create(SQLManager sqlManager) throws SQLException; /** - * 请调用 {@link SQLTable} 下的静态方法进行对象的初始化。 + * 得到 {@link #create(SQLManager)} 用于初始化本实例的 {@link SQLManager} 实例 * - * @param tableName 该表的名称 + * @return {@link SQLManager} 实例 */ - private SQLTable(@NotNull String tableName) { - this.tableName = tableName; - } - - public @NotNull String getTableName() { - return (tablePrefix != null ? tablePrefix : "") + tableName; - } + @Nullable SQLManager getSQLManager(); /** - * 使用指定 SQLManager 进行本示例的初始化。 + * 得到本表表名,不得为空。 * - * @param sqlManager {@link SQLManager} - * @param tablePrefix 表名前缀 - * @return 本表是否为首次创建 - * @throws SQLException 出现任何错误时抛出 + * @return 本表表名 */ - public abstract boolean create(@NotNull SQLManager sqlManager, @Nullable String tablePrefix) throws SQLException; + @NotNull String getTableName(); - public boolean create(@NotNull SQLManager sqlManager) throws SQLException { - return create(manager, null); + default @NotNull TableQueryBuilder createQuery() { + return Optional.ofNullable(getSQLManager()).map(this::createQuery) + .orElseThrow(() -> new NullPointerException("This table doesn't have a SQLManger.")); } - public @NotNull TableQueryBuilder createQuery(@NotNull SQLManager sqlManager) { + default @NotNull TableQueryBuilder createQuery(@NotNull SQLManager sqlManager) { return sqlManager.createQuery().inTable(getTableName()); } - public @NotNull TableQueryBuilder createQuery() { - return createQuery(this.manager); + default @NotNull DeleteBuilder createDelete() { + return Optional.ofNullable(getSQLManager()).map(this::createDelete) + .orElseThrow(() -> new NullPointerException("This table doesn't have a SQLManger.")); } - public @NotNull DeleteBuilder createDelete() { - return createDelete(this.manager); - } - - public @NotNull DeleteBuilder createDelete(@NotNull SQLManager sqlManager) { + default @NotNull DeleteBuilder createDelete(@NotNull SQLManager sqlManager) { return sqlManager.createDelete(getTableName()); } - public @NotNull UpdateBuilder createUpdate() { - return createUpdate(this.manager); + default @NotNull UpdateBuilder createUpdate() { + return Optional.ofNullable(getSQLManager()).map(this::createUpdate) + .orElseThrow(() -> new NullPointerException("This table doesn't have a SQLManger.")); } - public @NotNull UpdateBuilder createUpdate(@NotNull SQLManager sqlManager) { + default @NotNull UpdateBuilder createUpdate(@NotNull SQLManager sqlManager) { return sqlManager.createUpdate(getTableName()); } - - public @NotNull InsertBuilder> createInsert() { - return createInsert(this.manager); + default @NotNull InsertBuilder> createInsert() { + return Optional.ofNullable(getSQLManager()).map(this::createInsert) + .orElseThrow(() -> new NullPointerException("This table doesn't have a SQLManger.")); } - public @NotNull InsertBuilder> createInsert(@NotNull SQLManager sqlManager) { + default @NotNull InsertBuilder> createInsert(@NotNull SQLManager sqlManager) { return sqlManager.createInsert(getTableName()); } - - public @NotNull InsertBuilder> createInsertBatch() { - return createInsertBatch(this.manager); + default @NotNull InsertBuilder> createInsertBatch() { + return Optional.ofNullable(getSQLManager()).map(this::createInsertBatch) + .orElseThrow(() -> new NullPointerException("This table doesn't have a SQLManger.")); } - public @NotNull InsertBuilder> createInsertBatch(@NotNull SQLManager sqlManager) { + default @NotNull InsertBuilder> createInsertBatch(@NotNull SQLManager sqlManager) { return sqlManager.createInsertBatch(getTableName()); } + default @NotNull ReplaceBuilder> createReplace() { + return Optional.ofNullable(getSQLManager()).map(this::createReplace) + .orElseThrow(() -> new NullPointerException("This table doesn't have a SQLManger.")); - public @NotNull ReplaceBuilder> createReplace() { - return createReplace(this.manager); } - public @NotNull ReplaceBuilder> createReplace(@NotNull SQLManager sqlManager) { - return sqlManager.createReplace(getTableName()); + default @NotNull ReplaceBuilder> createReplace(@NotNull SQLManager sqlManager) { + return Optional.ofNullable(getSQLManager()).map(this::createReplace) + .orElseThrow(() -> new NullPointerException("This table doesn't have a SQLManger.")); } - - public @NotNull ReplaceBuilder> createReplaceBatch() { - return createReplaceBatch(this.manager); + default @NotNull ReplaceBuilder> createReplaceBatch() { + return Optional.ofNullable(getSQLManager()).map(this::createReplaceBatch) + .orElseThrow(() -> new NullPointerException("This table doesn't have a SQLManger.")); } - public @NotNull ReplaceBuilder> createReplaceBatch(@NotNull SQLManager sqlManager) { + default @NotNull ReplaceBuilder> createReplaceBatch(@NotNull SQLManager sqlManager) { return sqlManager.createReplaceBatch(getTableName()); } + default @NotNull TableAlterBuilder alter() { + return Optional.ofNullable(getSQLManager()).map(this::alter) + .orElseThrow(() -> new NullPointerException("This table doesn't have a SQLManger.")); + } + + default @NotNull TableAlterBuilder alter(@NotNull SQLManager sqlManager) { + return sqlManager.alterTable(getTableName()); + } + } diff --git a/api/src/main/java/cc/carm/lib/easysql/api/table/NamedSQLTable.java b/api/src/main/java/cc/carm/lib/easysql/api/table/NamedSQLTable.java new file mode 100644 index 0000000..d038d54 --- /dev/null +++ b/api/src/main/java/cc/carm/lib/easysql/api/table/NamedSQLTable.java @@ -0,0 +1,50 @@ +package cc.carm.lib.easysql.api.table; + +import cc.carm.lib.easysql.api.SQLManager; +import cc.carm.lib.easysql.api.SQLTable; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.sql.SQLException; + + +public abstract class NamedSQLTable implements SQLTable { + + private final @NotNull String tableName; + + protected @Nullable String tablePrefix; + protected @Nullable SQLManager manager; + + /** + * 请调用 {@link NamedSQLTable} 下的静态方法进行对象的初始化。 + * + * @param tableName 该表的名称 + */ + public NamedSQLTable(@NotNull String tableName) { + this.tableName = tableName; + } + + public @NotNull String getTableName() { + return (tablePrefix != null ? tablePrefix : "") + tableName; + } + + @Override + public @Nullable SQLManager getSQLManager() { + return this.manager; + } + + /** + * 使用指定 SQLManager 进行本示例的初始化。 + * + * @param sqlManager {@link SQLManager} + * @param tablePrefix 表名前缀 + * @return 本表是否为首次创建 + * @throws SQLException 出现任何错误时抛出 + */ + public abstract boolean create(@NotNull SQLManager sqlManager, @Nullable String tablePrefix) throws SQLException; + + public boolean create(@NotNull SQLManager sqlManager) throws SQLException { + return create(sqlManager, null); + } + +} diff --git a/demo/pom.xml b/demo/pom.xml index ad2a8f4..4145142 100644 --- a/demo/pom.xml +++ b/demo/pom.xml @@ -5,7 +5,7 @@ easysql-parent cc.carm.lib - 0.4.1 + 0.4.2 4.0.0 diff --git a/impl/pom.xml b/impl/pom.xml index d0406bf..4ce3104 100644 --- a/impl/pom.xml +++ b/impl/pom.xml @@ -5,7 +5,7 @@ easysql-parent cc.carm.lib - 0.4.1 + 0.4.2 4.0.0 diff --git a/pom.xml b/pom.xml index d183637..a146f62 100644 --- a/pom.xml +++ b/pom.xml @@ -19,7 +19,7 @@ cc.carm.lib easysql-parent pom - 0.4.1 + 0.4.2 api diff --git a/with-pool/beecp/pom.xml b/with-pool/beecp/pom.xml index 62192f3..8835063 100644 --- a/with-pool/beecp/pom.xml +++ b/with-pool/beecp/pom.xml @@ -5,7 +5,7 @@ easysql-parent cc.carm.lib - 0.4.1 + 0.4.2 ../../pom.xml 4.0.0 diff --git a/with-pool/hikaricp/pom.xml b/with-pool/hikaricp/pom.xml index 797cb7d..8144fab 100644 --- a/with-pool/hikaricp/pom.xml +++ b/with-pool/hikaricp/pom.xml @@ -5,7 +5,7 @@ easysql-parent cc.carm.lib - 0.4.1 + 0.4.2 ../../pom.xml 4.0.0