浏览代码

merge gitee pulls/100

hubin 5 年之前
父节点
当前提交
e5306594fb

+ 5 - 0
mybatis-plus-annotation/src/main/java/com/baomidou/mybatisplus/annotation/DbType.java

@@ -91,6 +91,11 @@ public enum DbType {
      */
     PHOENIX("phoenix", "Phoenix HBase数据库", "com.baomidou.mybatisplus.extension.plugins.pagination.dialects.PhoenixDialect"),
 
+    /**
+     * Gauss
+     */
+    GAUSS("zenith", "Gauss 数据库", "com.baomidou.mybatisplus.extension.plugins.pagination.dialects.GaussDialect"),
+
     /**
      * UNKONWN DB
      */

+ 1 - 1
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/dialects/DialectRegistry.java

@@ -13,7 +13,6 @@
  * License for the specific language governing permissions and limitations under
  * the License.
  */
-
 package com.baomidou.mybatisplus.extension.plugins.pagination.dialects;
 
 import com.baomidou.mybatisplus.annotation.DbType;
@@ -48,6 +47,7 @@ public class DialectRegistry {
         dialect_enum_map.put(DbType.XU_GU, new XuGuDialect());
         dialect_enum_map.put(DbType.KINGBASE_ES, new KingbaseDialect());
         dialect_enum_map.put(DbType.PHOENIX, new PhoenixDialect());
+        dialect_enum_map.put(DbType.GAUSS, new GaussDialect());
     }
 
     public IDialect getDialect(DbType dbType) {

+ 24 - 0
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/dialects/GaussDialect.java

@@ -0,0 +1,24 @@
+/*
+ * Copyright (c) 2011-2020, baomidou (jobob@qq.com).
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * <p>
+ * https://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.baomidou.mybatisplus.extension.plugins.pagination.dialects;
+
+/**
+ * @author lhx
+ * @since 2020/3/26
+ */
+public class GaussDialect extends OracleDialect {
+
+}

+ 2 - 0
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/toolkit/JdbcUtils.java

@@ -68,6 +68,8 @@ public class JdbcUtils {
             return DbType.KINGBASE_ES;
         } else if (url.contains(":phoenix:")) {
             return DbType.PHOENIX;
+        } else if (jdbcUrl.contains(":zenith:")) {
+            return DbType.GAUSS;
         } else {
             logger.warn("The jdbcUrl is " + jdbcUrl + ", Mybatis Plus Cannot Read Database type or The Database's Not Supported!");
             return DbType.OTHER;

+ 1 - 0
mybatis-plus-extension/src/test/java/com/baomidou/mybatisplus/extension/plugins/pagination/dialects/DialectRegistryTest.java

@@ -25,6 +25,7 @@ class DialectRegistryTest {
         Assertions.assertEquals(dialectRegistry.getDialect(DbType.XU_GU).getClass(), XuGuDialect.class);
         Assertions.assertEquals(dialectRegistry.getDialect(DbType.KINGBASE_ES).getClass(), KingbaseDialect.class);
         Assertions.assertEquals(dialectRegistry.getDialect(DbType.PHOENIX).getClass(), PhoenixDialect.class);
+        Assertions.assertEquals(dialectRegistry.getDialect(DbType.GAUSS).getClass(), GaussDialect.class);
         Assertions.assertNull(dialectRegistry.getDialect(DbType.OTHER));
     }
 

+ 4 - 0
mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/DataSourceConfig.java

@@ -125,6 +125,10 @@ public class DataSourceConfig {
             return DbType.H2;
         } else if (str.contains("kingbase") || str.contains("kingbase8")) {
             return DbType.KINGBASE_ES;
+        } else if (str.contains("dm")) {
+            return DbType.DM;
+        } else if (str.contains("zenith")) {
+            return DbType.GAUSS;
         } else {
             return DbType.OTHER;
         }

+ 131 - 0
mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/converts/GaussTypeConvert.java

@@ -0,0 +1,131 @@
+/*
+ * Copyright (c) 2011-2020, baomidou (jobob@qq.com).
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * <p>
+ * https://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.baomidou.mybatisplus.generator.config.converts;
+
+import com.baomidou.mybatisplus.generator.config.GlobalConfig;
+import com.baomidou.mybatisplus.generator.config.ITypeConvert;
+import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
+import com.baomidou.mybatisplus.generator.config.rules.IColumnType;
+
+/**
+ * GAUSS 字段类型转换
+ *
+ * @author halower
+ * @since 2019-06-27
+ */
+public class GaussTypeConvert implements ITypeConvert {
+
+    @Override
+    public IColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
+        String t = fieldType.toLowerCase();
+        return new BasicDataTypeHandler().getDbColumnType(t);
+    }
+
+    interface Handler {
+        DbColumnType getDbColumnType(String fieldType);
+    }
+
+    /**
+     * 常规数据类型
+     */
+    class BasicDataTypeHandler implements Handler {
+        @Override
+        public DbColumnType getDbColumnType(String fieldType) {
+            //字符数据类型: CHAR,CHARACTER,VARCHAR
+            if (fieldType.contains("char")) {
+                return DbColumnType.STRING;
+            }
+            /**
+             *  数值数据类型:
+             *  NUMERIC,DECIMAL,DEC,MONEY,BIT,BOOL,BOOLEAN,INTEGER,INT,BIGINT
+             *  TINYINT,BYTE,SMALLINT,BINARY,VARBINARY
+             */
+            else if (fieldType.contains("numeric")
+                || fieldType.contains("decimal")
+                || fieldType.contains("dec")
+                || fieldType.contains("money")) {
+                return DbColumnType.BIG_DECIMAL;
+            } else if (fieldType.contains("bit")
+                || fieldType.contains("bool")
+                || fieldType.contains("boolean")) {
+                return DbColumnType.BOOLEAN;
+            } else if (fieldType.contains("integer") || fieldType.contains("int")) {
+                return DbColumnType.INTEGER;
+            } else if (fieldType.contains("bigint")) {
+                return DbColumnType.BIG_INTEGER;
+            } else if (fieldType.contains("tinyint")
+                || fieldType.contains("byte")
+                || fieldType.contains("smallint")
+            ) {
+                return DbColumnType.INTEGER;
+            } else if (fieldType.contains("binary")
+                || fieldType.contains("varbinary")
+            ) {
+                return DbColumnType.BYTE_ARRAY;
+            }
+            /**
+             * 近似数值数据类型:
+             * FLOAT
+             */
+            else if (fieldType.contains("float")) {
+                return DbColumnType.FLOAT;
+            }
+            /**
+             * DOUBLE, DOUBLE PRECISION,REAL
+             */
+            else if (fieldType.contains("double") || fieldType.contains("real")) {
+                return DbColumnType.DOUBLE;
+            }
+            return new DateTimeDataTypeHandler().getDbColumnType(fieldType);
+        }
+    }
+
+    /**
+     * 日期时间数据类型
+     */
+    class DateTimeDataTypeHandler implements Handler {
+
+        @Override
+        public DbColumnType getDbColumnType(String fieldType) {
+            if (fieldType.contains("date")
+                || fieldType.contains("time")
+                || fieldType.contains("timestamp")) {
+                return DbColumnType.DATE;
+            }
+            return new MultimediaDataTypeHandler().getDbColumnType(fieldType);
+        }
+    }
+
+    /**
+     * 多媒体数据类型
+     * TEXT,LONGVARCHAR,CLOB,BLOB,IMAGE
+     */
+    class MultimediaDataTypeHandler implements Handler {
+        @Override
+        public DbColumnType getDbColumnType(String fieldType) {
+            if (fieldType.contains("text") || fieldType.contains("longvarchar")) {
+                return DbColumnType.STRING;
+            } else if (fieldType.contains("clob")) {
+                return DbColumnType.CLOB;
+            } else if (fieldType.contains("blob")) {
+                return DbColumnType.BLOB;
+            } else if (fieldType.contains("image")) {
+                return DbColumnType.BYTE_ARRAY;
+            }
+            return DbColumnType.STRING;
+        }
+    }
+}

+ 1 - 0
mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/converts/TypeConvertRegistry.java

@@ -40,6 +40,7 @@ public class TypeConvertRegistry {
         type_convert_enum_map.put(DbType.MARIADB, new MySqlTypeConvert());
         type_convert_enum_map.put(DbType.KINGBASE_ES, new KingbaseESTypeConvert());
         type_convert_enum_map.put(DbType.MYSQL, new MySqlTypeConvert());
+        type_convert_enum_map.put(DbType.GAUSS, new GaussTypeConvert());
     }
 
     public ITypeConvert getTypeConvert(DbType dbType) {

+ 1 - 0
mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/querys/DbQueryRegistry.java

@@ -41,6 +41,7 @@ public class DbQueryRegistry {
         db_query_enum_map.put(DbType.DM, new DMQuery());
         db_query_enum_map.put(DbType.KINGBASE_ES, new KingbaseESQuery());
         db_query_enum_map.put(DbType.MYSQL, new MySqlQuery());
+        db_query_enum_map.put(DbType.GAUSS, new GaussQuery());
     }
 
     public IDbQuery getDbQuery(DbType dbType) {

+ 77 - 0
mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/querys/GaussQuery.java

@@ -0,0 +1,77 @@
+/*
+ * Copyright (c) 2011-2020, baomidou (jobob@qq.com).
+ * <p>
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ * <p>
+ * https://www.apache.org/licenses/LICENSE-2.0
+ * <p>
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+package com.baomidou.mybatisplus.generator.config.querys;
+
+/**
+ * Gauss 表数据查询
+ *
+ * @author halower
+ * @since 2019-06-27
+ */
+public class GaussQuery extends AbstractDbQuery {
+
+    @Override
+    public String tablesSql() {
+        return "SELECT DISTINCT T1.TABLE_NAME,T2.COMMENTS AS TABLE_COMMENT FROM USER_TAB_COLUMNS T1 " +
+            "LEFT JOIN USER_TAB_COMMENTS T2 ON T1.TABLE_NAME = T2.TABLE_NAME WHERE 1=1 ";
+    }
+
+    @Override
+    public String tableFieldsSql() {
+        return
+            "SELECT T1.COLUMN_NAME,T2.COMMENTS,T1.DATA_TYPE," +
+                "CASE WHEN CONSTRAINT_TYPE='P' THEN 'PRI' END AS KEY " +
+                "FROM USER_TAB_COLUMNS T1 " +
+                "LEFT JOIN USER_COL_COMMENTS T2 ON " +
+                "(T1.TABLE_NAME = T2.TABLE_NAME AND T1.COLUMN_NAME = T2.COLUMN_NAME) " +
+                "LEFT JOIN (" +
+                "SELECT T4.TABLE_NAME,T4.COLUMN_NAME,T5.CONSTRAINT_TYPE FROM USER_CONS_COLUMNS T4,USER_CONSTRAINTS T5 " +
+                "WHERE T4.CONSTRAINT_NAME = T5.CONSTRAINT_NAME AND T5.CONSTRAINT_TYPE = 'P'" +
+                ")T3 ON (T1.TABLE_NAME = T3.TABLE_NAME AND T1.COLUMN_NAME = T3.COLUMN_NAME) " +
+                "WHERE T1.TABLE_NAME = '%s' " +
+                "ORDER BY T1.TABLE_NAME,T1.COLUMN_ID";
+    }
+
+    @Override
+    public String tableName() {
+        return "TABLE_NAME";
+    }
+
+    @Override
+    public String tableComment() {
+        return "TABLE_COMMENT";
+    }
+
+    @Override
+    public String fieldName() {
+        return "COLUMN_NAME";
+    }
+
+    @Override
+    public String fieldType() {
+        return "DATA_TYPE";
+    }
+
+    @Override
+    public String fieldComment() {
+        return "COMMENTS";
+    }
+
+    @Override
+    public String fieldKey() {
+        return "KEY";
+    }
+}