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} 构建表,用于快速创建与该表相关的操作。
*
- * - 1. 调用 {@link SQLTable#of(String, String[])} 方法创建一个 SQLTable 对象;
- * - 2. 在应用初始化阶段调用 {@link SQLTable#create(SQLManager)} 方法初始化 SQLTable 对象;
- * - 3. 获取已创建的{@link SQLTable} 实例,直接调用对应方法进行关于表的相关操作。
+ * - 1. 调用 {@link NamedSQLTable#of(String, String[])} 方法创建一个 SQLTable 对象;
+ * - 2. 在应用初始化阶段调用 {@link NamedSQLTable#create(SQLManager)} 方法初始化 SQLTable 对象;
+ * - 3. 获取已创建的{@link NamedSQLTable} 实例,直接调用对应方法进行关于表的相关操作。
*
*
* @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