diff --git a/.documentation/README.md b/.documentation/README.md index 5bc3fa1..cb85193 100644 --- a/.documentation/README.md +++ b/.documentation/README.md @@ -5,10 +5,19 @@ ## 目录 -- [Bob的EasySQL之旅(HikariCP)](USAGE-HIKARI.md) `@Ghost-Chu` +### 文章 + +- [Bob的EasySQL之旅(HikariCP)](USAGE-HIKARI.md) `by @Ghost-Chu` +- [在**小项目中**推荐使用的**数据库表**实现方案](USAGE-TABLE.md) `by @CarmJos` + +### 视频 + +- [EasySql快速操作Mysql数据库:我的世界插件开发](https://www.bilibili.com/video/BV1w34y1p7Xs) `by @Shinyoki` ## 实例项目 以下是一些实例项目,可供各位参考。 - UltraDepository 超级仓库插件 `@CarmJos` - [storage/MySQLStorage](https://github.com/CarmJos/UltraDepository/blob/master/src/main/java/cc/carm/plugin/ultradepository/storage/impl/MySQLStorage.java) +- QuickShop-Hikari 快速商店插件 `@Ghost-Chu` + - [database/](https://github.com/Ghost-chu/QuickShop-Hikari/tree/hikari/quickshop-bukkit/src/main/java/com/ghostchu/quickshop/database) \ No newline at end of file diff --git a/demo/src/main/java/DataTables1.java b/demo/src/main/java/DataTables1.java new file mode 100644 index 0000000..1a6135e --- /dev/null +++ b/demo/src/main/java/DataTables1.java @@ -0,0 +1,52 @@ +import cc.carm.lib.easysql.api.SQLManager; +import cc.carm.lib.easysql.api.SQLTable; +import cc.carm.lib.easysql.api.enums.IndexType; +import cc.carm.lib.easysql.api.enums.NumberType; +import cc.carm.lib.easysql.api.table.NamedSQLTable; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.sql.SQLException; + +public enum DataTables1 { + + DATA(SQLTable.of("data", (table) -> { + table.addAutoIncrementColumn("id", true); + table.addColumn("user", "INT UNSIGNED NOT NULL"); + table.addColumn("content", "TEXT NOT NULL"); + table.addColumn("time", "DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP"); + })), + + USER(SQLTable.of("user", (table) -> { + table.addAutoIncrementColumn("id", NumberType.INT, true, true); + table.addColumn("uuid", "VARCHAR(32) NOT NULL UNIQUE KEY"); + table.addColumn("username", "VARCHAR(16) NOT NULL"); + table.addColumn("age", "TINYINT NOT NULL DEFAULT 1"); + table.addColumn("email", "VARCHAR(32)"); + table.addColumn("phone", "VARCHAR(16)"); + table.addColumn("registerTime", "DATETIME NOT NULL"); + table.setIndex("username", IndexType.UNIQUE_KEY); // 添加唯一索引 + table.setIndex(IndexType.INDEX, "contact", "email", "phone"); //添加联合索引 (示例) + })); + + private final NamedSQLTable table; + + DataTables1(NamedSQLTable table) { + this.table = table; + } + + public NamedSQLTable get() { + return this.table; + } + + public static void initialize(@NotNull SQLManager manager, @Nullable String tablePrefix) { + for (DataTables1 value : values()) { + try { + value.get().create(manager, tablePrefix); + } catch (SQLException e) { + // 提示异常 + } + } + } + +} \ No newline at end of file diff --git a/demo/src/main/java/DataTables2.java b/demo/src/main/java/DataTables2.java new file mode 100644 index 0000000..dcac4d9 --- /dev/null +++ b/demo/src/main/java/DataTables2.java @@ -0,0 +1,69 @@ +import cc.carm.lib.easysql.api.SQLManager; +import cc.carm.lib.easysql.api.SQLTable; +import cc.carm.lib.easysql.api.builder.TableCreateBuilder; +import cc.carm.lib.easysql.api.enums.IndexType; +import cc.carm.lib.easysql.api.enums.NumberType; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import java.sql.SQLException; +import java.util.function.Consumer; + +public enum DataTables2 implements SQLTable { + + USER((table) -> { + table.addAutoIncrementColumn("id", NumberType.INT, true, true); + table.addColumn("uuid", "VARCHAR(32) NOT NULL UNIQUE KEY"); + table.addColumn("username", "VARCHAR(16) NOT NULL"); + table.addColumn("age", "TINYINT NOT NULL DEFAULT 1"); + table.addColumn("email", "VARCHAR(32)"); + table.addColumn("phone", "VARCHAR(16)"); + table.addColumn("registerTime", "DATETIME NOT NULL"); + table.setIndex("username", IndexType.UNIQUE_KEY); // 添加唯一索引 + table.setIndex(IndexType.INDEX, "contact", "email", "phone"); //添加联合索引 (示例) + }); + + private final Consumer builder; + private @Nullable String tablePrefix; + private @Nullable SQLManager manager; + + DataTables2(Consumer builder) { + this.builder = builder; + } + + @Override + public @Nullable SQLManager getSQLManager() { + return this.manager; + } + + @Override + public @NotNull String getTableName() { + // 这里直接选择用枚举的名称作为table的主名称 + return (tablePrefix != null ? tablePrefix : "") + name().toLowerCase(); + } + + @Override + public boolean create(SQLManager sqlManager) throws SQLException { + return create(sqlManager, null); + } + + public boolean create(@NotNull SQLManager sqlManager, @Nullable String tablePrefix) throws SQLException { + if (this.manager == null) this.manager = sqlManager; + this.tablePrefix = tablePrefix; + + TableCreateBuilder tableBuilder = sqlManager.createTable(getTableName()); + if (builder != null) builder.accept(tableBuilder); + return tableBuilder.build().executeFunction(l -> l > 0, false); + } + + public static void initialize(@NotNull SQLManager manager, @Nullable String tablePrefix) { + for (DataTables2 value : values()) { + try { + value.create(manager, tablePrefix); + } catch (SQLException e) { + // 提示异常 + } + } + } + +} \ No newline at end of file