Browse Source

优化DDL执行脚本

hubin 2 years ago
parent
commit
c97e6794f9

+ 13 - 21
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/ddl/DdlHelper.java

@@ -19,7 +19,10 @@ 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.PostgresDdlGenerator;
+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.toolkit.JdbcUtils;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.ibatis.jdbc.ScriptRunner;
 import org.apache.ibatis.jdbc.SqlRunner;
@@ -53,9 +56,8 @@ public class DdlHelper {
      * @throws Exception
      */
     public static void runScript(IDdlGenerator ddlGenerator, DataSource dataSource, List<String> sqlFiles, boolean autoCommit) {
-        try {
+        try (Connection connection = dataSource.getConnection()) {
             // 执行自定义 DDL 信息
-            Connection connection = dataSource.getConnection();
             final String jdbcUrl = connection.getMetaData().getURL();
             final String schema = DdlHelper.getDatabase(jdbcUrl);
             SqlRunner sqlRunner = new SqlRunner(connection);
@@ -114,25 +116,15 @@ public class DdlHelper {
         return scriptRunner;
     }
 
-    protected static IDdlGenerator getDdlGenerator(String jdbcUrl) throws Exception {
-        jdbcUrl = jdbcUrl.toLowerCase();
-        if (jdbcUrl.contains(":mysql:")
-                || jdbcUrl.contains(":mariadb:")
-                || jdbcUrl.contains(":gbase:")
-                || jdbcUrl.contains(":oscar:")
-                || jdbcUrl.contains(":xugu:")
-                || jdbcUrl.contains(":clickhouse:")
-                || jdbcUrl.contains(":oceanbase:")
-                || jdbcUrl.contains(":cobar:")) {
+    protected static IDdlGenerator getDdlGenerator(String jdbcUrl) throws RuntimeException {
+        IDialect dialect = DialectFactory.getDialect(JdbcUtils.getDbType(jdbcUrl));
+        if (dialect instanceof MySqlDialect) {
             return MysqlDdlGenerator.newInstance();
-        } else if (jdbcUrl.contains(":postgresql:")
-                || jdbcUrl.contains(":h2:")
-                || jdbcUrl.contains(":sqlite:")
-                || jdbcUrl.contains(":hsqldb:")
-                || jdbcUrl.contains(":kingbase\\d*:")
-                || jdbcUrl.contains(":phoenix:")) {
-            return PostgresDdlGenerator.newInstance();
-        } else if (jdbcUrl.contains(":oracle:")) {
+        }
+        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");

+ 5 - 3
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/ddl/history/PostgresDdlGenerator.java → mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/ddl/history/PostgreDdlGenerator.java

@@ -19,17 +19,19 @@ import org.apache.commons.lang3.StringUtils;
 
 import java.util.function.Function;
 
+
 /**
- * Mysql DDL 生成器
+ * Postgres DDL 生成器
  *
  * @author hubin
  * @since 2021-06-22
  */
-public class PostgresDdlGenerator implements IDdlGenerator {
+public class PostgreDdlGenerator implements IDdlGenerator {
 
     public static IDdlGenerator newInstance() {
-        return new PostgresDdlGenerator();
+        return new PostgreDdlGenerator();
     }
+
     @Override
     public boolean existTable(String databaseName, Function<String, Boolean> executeFunction) {
         StringBuffer sql = new StringBuffer();