From 59d69a5f7bfb5031b1772dea31fbf674cd93e4bb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=91=86=E7=8C=AB?= Date: Mon, 1 Apr 2024 18:35:15 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20=E6=94=AF=E6=8C=81SQLite=E7=9A=84DD?= =?UTF-8?q?L=E8=87=AA=E5=8A=A8=E7=BB=B4=E6=8A=A4=E5=8A=9F=E8=83=BD=20?= =?UTF-8?q?=E4=BC=98=E5=8C=96getDdlGenerator=E7=9A=84=E6=96=B9=E6=B3=95=20?= =?UTF-8?q?=E4=B9=8B=E5=89=8D=E7=9A=84=E5=86=99=E6=B3=95=E4=BC=9A=E6=8A=8A?= =?UTF-8?q?SQLite=E5=BD=93=E5=81=9Apgsql=E8=BF=9B=E8=A1=8C=E5=A4=84?= =?UTF-8?q?=E7=90=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mybatisplus/extension/ddl/DdlHelper.java | 71 +++++++++++++++---- .../ddl/history/SQLiteDdlGenerator.java | 33 +++++++++ 2 files changed, 92 insertions(+), 12 deletions(-) create mode 100644 mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/ddl/history/SQLiteDdlGenerator.java diff --git a/mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/ddl/DdlHelper.java b/mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/ddl/DdlHelper.java index 4efc5e8daf..39e062ab6c 100644 --- a/mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/ddl/DdlHelper.java +++ b/mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/ddl/DdlHelper.java @@ -15,13 +15,14 @@ */ package com.baomidou.mybatisplus.extension.ddl; +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils; import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.baomidou.mybatisplus.extension.ddl.history.IDdlGenerator; import com.baomidou.mybatisplus.extension.ddl.history.MysqlDdlGenerator; import com.baomidou.mybatisplus.extension.ddl.history.OracleDdlGenerator; import com.baomidou.mybatisplus.extension.ddl.history.PostgreDdlGenerator; -import com.baomidou.mybatisplus.extension.plugins.pagination.DialectFactory; -import com.baomidou.mybatisplus.extension.plugins.pagination.dialects.*; +import com.baomidou.mybatisplus.extension.ddl.history.SQLiteDdlGenerator; import com.baomidou.mybatisplus.extension.toolkit.JdbcUtils; import lombok.extern.slf4j.Slf4j; import org.apache.ibatis.io.Resources; @@ -145,17 +146,63 @@ public static ScriptRunner getScriptRunner(Connection connection, boolean autoCo } protected static IDdlGenerator getDdlGenerator(String jdbcUrl) throws RuntimeException { - IDialect dialect = DialectFactory.getDialect(JdbcUtils.getDbType(jdbcUrl)); - if (dialect instanceof MySqlDialect) { - return MysqlDdlGenerator.newInstance(); + DbType dbType = JdbcUtils.getDbType(jdbcUrl); + switch (dbType) { + case OTHER: + throw ExceptionUtils.mpe("%s database not supported.", dbType.getDb()); + case MYSQL: + case MARIADB: + case GBASE: + case OSCAR: + case XU_GU: + case CLICK_HOUSE: + case OCEAN_BASE: + case CUBRID: + case SUNDB: + return MysqlDdlGenerator.newInstance(); + case ORACLE: + case DM: + case GAUSS: + case ORACLE_12C: + case FIREBIRD: + case SQL_SERVER: + return OracleDdlGenerator.newInstance(); + case SQLITE: + return SQLiteDdlGenerator.newInstance(); + case POSTGRE_SQL: + case H2: + case LEALONE: + case HSQL: + case KINGBASE_ES: + case PHOENIX: + case SAP_HANA: + case IMPALA: + case HIGH_GO: + case VERTICA: + case REDSHIFT: + case OPENGAUSS: + case TDENGINE: + case UXDB: + case GBASE8S_PG: + case GBASE_8C: + return PostgreDdlGenerator.newInstance(); + case DB2: + case SQL_SERVER2005: + case SYBASE: + case XCloud: + case GBASE_8S: + case GBASEDBT: + case GBASE_INFORMIX: + case SINODB: + case INFORMIX: + case TRINO: + case PRESTO: + throw ExceptionUtils.mpe("%s database not supported.", dbType.getDb()); + // 处理未知的数据库类型 + default: + throw ExceptionUtils.mpe("%s database not supported.", dbType.getDb()); } - if (dialect instanceof PostgreDialect) { - return PostgreDdlGenerator.newInstance(); - } - if (dialect instanceof OracleDialect || dialect instanceof Oracle12cDialect) { - return OracleDdlGenerator.newInstance(); - } - throw new RuntimeException("The database is not supported"); + } public static String getDatabase(String jdbcUrl) { diff --git a/mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/ddl/history/SQLiteDdlGenerator.java b/mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/ddl/history/SQLiteDdlGenerator.java new file mode 100644 index 0000000000..bcd180d169 --- /dev/null +++ b/mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/ddl/history/SQLiteDdlGenerator.java @@ -0,0 +1,33 @@ +package com.baomidou.mybatisplus.extension.ddl.history; + +import org.springframework.stereotype.Component; + +import java.util.function.Function; + + +@Component +public class SQLiteDdlGenerator implements IDdlGenerator { + + public static IDdlGenerator newInstance() { + return new SQLiteDdlGenerator(); + } + + @Override + public boolean existTable(String databaseName, Function executeFunction) { + StringBuffer sql = new StringBuffer(); + sql.append("SELECT count(1) FROM sqlite_master WHERE name='"); + sql.append(getDdlHistory()).append("' AND type='table'"); + return executeFunction.apply(sql.toString()); + } + + @Override + public String createDdlHistory() { + StringBuffer sql = new StringBuffer(); + sql.append("CREATE TABLE IF NOT EXISTS `").append(getDdlHistory()).append("` ("); + sql.append("script TEXT primary key,"); + sql.append("type TEXT,"); + sql.append("version TEXT"); + sql.append(");"); + return sql.toString(); + } +}