瀏覽代碼

过时DbType#dialect,IDbQuery#dbType.

聂秋秋 5 年之前
父節點
當前提交
8ed8bf9c02
共有 19 個文件被更改,包括 105 次插入93 次删除
  1. 10 12
      mybatis-plus-annotation/src/main/java/com/baomidou/mybatisplus/annotation/DbType.java
  2. 1 1
      mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/PaginationInterceptor.java
  3. 18 6
      mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/DialectFactory.java
  4. 55 0
      mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/dialects/DialectRegistry.java
  5. 1 0
      mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/toolkit/JdbcUtils.java
  6. 4 0
      mybatis-plus-extension/src/test/java/com/baomidou/mybatisplus/extension/plugins/pagination/DialectFactoryTest.java
  7. 6 2
      mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/IDbQuery.java
  8. 7 5
      mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/builder/ConfigBuilder.java
  9. 0 7
      mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/querys/DB2Query.java
  10. 0 4
      mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/querys/DMQuery.java
  11. 0 7
      mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/querys/H2Query.java
  12. 0 7
      mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/querys/KingbaseESQuery.java
  13. 0 7
      mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/querys/MariadbQuery.java
  14. 0 7
      mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/querys/MySqlQuery.java
  15. 0 7
      mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/querys/OracleQuery.java
  16. 0 7
      mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/querys/PostgreSqlQuery.java
  17. 0 7
      mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/querys/SqlServerQuery.java
  18. 0 7
      mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/querys/SqliteQuery.java
  19. 3 0
      mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/DbTypeTest.java

+ 10 - 12
mybatis-plus-annotation/src/main/java/com/baomidou/mybatisplus/annotation/DbType.java

@@ -15,9 +15,6 @@
  */
 package com.baomidou.mybatisplus.annotation;
 
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-
 import lombok.AllArgsConstructor;
 import lombok.Getter;
 
@@ -110,23 +107,24 @@ public enum DbType {
 
     /**
      * 分页方言
+     *
+     * @deprecated 3.3.1
      */
+    @Deprecated
     private String dialect;
 
-    private static Map<String,DbType> DB_CACHE_MAP = new ConcurrentHashMap<>();
-
-    static {
-        for (DbType dbType : DbType.values()) {
-            DB_CACHE_MAP.put(dbType.getDb().toLowerCase(), dbType);
-        }
-    }
-
     /**
      * 获取数据库类型
      *
      * @param dbType 数据库类型字符串
      */
     public static DbType getDbType(String dbType) {
-        return DB_CACHE_MAP.getOrDefault(dbType.toLowerCase(), OTHER);
+        for (DbType type : DbType.values()) {
+            if (type.db.equalsIgnoreCase(dbType)) {
+                return type;
+            }
+        }
+        return OTHER;
+
     }
 }

+ 1 - 1
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/PaginationInterceptor.java

@@ -221,7 +221,7 @@ public class PaginationInterceptor extends AbstractSqlParserHandler implements I
             }
         }
         DbType dbType = Optional.ofNullable(this.dbType).orElse(JdbcUtils.getDbType(connection.getMetaData().getURL()));
-        IDialect dialect = Optional.ofNullable(this.dialect).orElse(DialectFactory.getDialect(dbType.getDialect()));
+        IDialect dialect = Optional.ofNullable(this.dialect).orElse(DialectFactory.getDialect(dbType));
         String buildSql = concatOrderBy(originalSql, page);
         DialectModel model = dialect.buildPaginationSql(buildSql, page.offset(), page.getSize());
         Configuration configuration = mappedStatement.getConfiguration();

+ 18 - 6
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/DialectFactory.java

@@ -21,6 +21,7 @@ import com.baomidou.mybatisplus.core.toolkit.Assert;
 import com.baomidou.mybatisplus.core.toolkit.ClassUtils;
 import com.baomidou.mybatisplus.core.toolkit.ExceptionUtils;
 import com.baomidou.mybatisplus.core.toolkit.StringUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.dialects.DialectRegistry;
 import com.baomidou.mybatisplus.extension.plugins.pagination.dialects.IDialect;
 import org.apache.ibatis.session.RowBounds;
 
@@ -35,8 +36,10 @@ import java.util.concurrent.ConcurrentHashMap;
  */
 public class DialectFactory {
 
+    private static final DialectRegistry DIALECT_REGISTRY = new DialectRegistry();
+
     /**
-     * 方言缓存
+     * 自定义方言缓存
      */
     private static final Map<String, IDialect> DIALECT_CACHE = new ConcurrentHashMap<>();
 
@@ -49,6 +52,7 @@ public class DialectFactory {
      * @param dbType       数据类型
      * @param dialectClazz 数据库方言
      * @return 分页模型
+     * @deprecated 3.3.1
      */
     @Deprecated
     public static DialectModel buildPaginationSql(IPage<?> page, String buildSql, DbType dbType, String dialectClazz) {
@@ -66,8 +70,7 @@ public class DialectFactory {
      */
     @Deprecated
     private static IDialect getDialect(DbType dbType, String dialectClazz) {
-        String dialectClassName = StringUtils.isBlank(dialectClazz) ? dbType.getDialect() : dialectClazz;
-        return DIALECT_CACHE.computeIfAbsent(dialectClassName, DialectFactory::classToDialect);
+        return StringUtils.isBlank(dialectClazz) ? DIALECT_REGISTRY.getDialect(dbType) : DIALECT_CACHE.computeIfAbsent(dialectClazz, DialectFactory::classToDialect);
     }
 
     /**
@@ -81,18 +84,27 @@ public class DialectFactory {
         return DIALECT_CACHE.computeIfAbsent(dialectClazz, DialectFactory::classToDialect);
     }
 
+    public static IDialect getDialect(DbType dbType) {
+        return DIALECT_REGISTRY.getDialect(dbType);
+    }
+
+    private static IDialect newInstance(Class<? extends IDialect> dialectClazz) {
+        IDialect dialect = ClassUtils.newInstance(dialectClazz);
+        Assert.notNull(dialect, "The value of the dialect property in mybatis configuration.xml is not defined.");
+        return dialect;
+    }
+
+    @SuppressWarnings("unchecked")
     private static IDialect classToDialect(String dialectClazz){
         IDialect dialect = null;
         try {
             Class<?> clazz = Class.forName(dialectClazz);
             if (IDialect.class.isAssignableFrom(clazz)) {
-                dialect = (IDialect) ClassUtils.newInstance(clazz);
+                dialect = newInstance((Class<? extends IDialect>) clazz);
             }
         } catch (ClassNotFoundException e) {
             throw ExceptionUtils.mpe("Class : %s is not found", dialectClazz);
         }
-        /* 未配置方言则抛出异常 */
-        Assert.notNull(dialect, "The value of the dialect property in mybatis configuration.xml is not defined.");
         return dialect;
     }
 }

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

@@ -0,0 +1,55 @@
+/*
+ * 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;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+
+import java.util.EnumMap;
+import java.util.Map;
+
+/**
+ * @author nieqiuqiu
+ * @date 2020-01-09
+ * @since 3.3.1
+ */
+public class DialectRegistry {
+
+    private final Map<DbType, IDialect> dialect_enum_map = new EnumMap<>(DbType.class);
+
+    public DialectRegistry() {
+        dialect_enum_map.put(DbType.MYSQL, new MySqlDialect());
+        dialect_enum_map.put(DbType.MARIADB, new MariaDBDialect());
+        dialect_enum_map.put(DbType.ORACLE, new OracleDialect());
+        dialect_enum_map.put(DbType.ORACLE_12C, new Oracle12cDialect());
+        dialect_enum_map.put(DbType.DB2, new DB2Dialect());
+        dialect_enum_map.put(DbType.H2, new H2Dialect());
+        dialect_enum_map.put(DbType.HSQL, new HSQLDialect());
+        dialect_enum_map.put(DbType.SQLITE, new SQLiteDialect());
+        dialect_enum_map.put(DbType.POSTGRE_SQL, new PostgreDialect());
+        dialect_enum_map.put(DbType.SQL_SERVER2005, new SQLServer2005Dialect());
+        dialect_enum_map.put(DbType.SQL_SERVER, new SQLServerDialect());
+        dialect_enum_map.put(DbType.DM, new DmDialect());
+        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.OTHER, new UnknownDialect());
+    }
+
+    public IDialect getDialect(DbType dbType) {
+        return dialect_enum_map.get(dbType);
+    }
+}

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

@@ -72,4 +72,5 @@ public class JdbcUtils {
             return DbType.OTHER;
         }
     }
+
 }

+ 4 - 0
mybatis-plus-extension/src/test/java/com/baomidou/mybatisplus/extension/plugins/pagination/DialectFactoryTest.java

@@ -31,9 +31,13 @@ class DialectFactoryTest {
         DialectModel dialectModel;
         IPage<Object> page = new Page<>();
         //使用默认方言
+        dialectModel = DialectFactory.buildPaginationSql(page, "select * from test ", com.baomidou.mybatisplus.annotation.DbType.MYSQL, null);
+        Assertions.assertEquals(dialectModel.getDialectSql(), "select * from test  LIMIT ?,?");
         dialectModel = DialectFactory.buildPaginationSql(page, "select * from test ", DbType.MYSQL, null);
         Assertions.assertEquals(dialectModel.getDialectSql(), "select * from test  LIMIT ?,?");
         //使用默认自定义方言
+        dialectModel = DialectFactory.buildPaginationSql(page, "select * from test ", com.baomidou.mybatisplus.annotation.DbType.H2, MySqlDialect.class.getName());
+        Assertions.assertEquals(dialectModel.getDialectSql(), "select * from test  LIMIT ?,?");
         dialectModel = DialectFactory.buildPaginationSql(page, "select * from test ", DbType.H2, MySqlDialect.class.getName());
         Assertions.assertEquals(dialectModel.getDialectSql(), "select * from test  LIMIT ?,?");
     }

+ 6 - 2
mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/IDbQuery.java

@@ -28,11 +28,15 @@ import com.baomidou.mybatisplus.annotation.DbType;
  */
 public interface IDbQuery {
 
-
     /**
      * 数据库类型
+     *
+     * @deprecated 3.3.1 {@link DataSourceConfig#dbType}
      */
-    DbType dbType();
+    @Deprecated
+    default DbType dbType() {
+        return null;
+    }
 
 
     /**

+ 7 - 5
mybatis-plus-generator/src/main/java/com/baomidou/mybatisplus/generator/config/builder/ConfigBuilder.java

@@ -66,6 +66,7 @@ public class ConfigBuilder {
      * SQL语句类型
      */
     private IDbQuery dbQuery;
+    private DbType dbType;
     private String superEntityClass;
     private String superMapperClass;
     /**
@@ -275,6 +276,7 @@ public class ConfigBuilder {
      */
     private void handlerDataSource(DataSourceConfig config) {
         connection = config.getConn();
+        dbType = config.getDbType();
         dbQuery = config.getDbQuery();
     }
 
@@ -424,7 +426,7 @@ public class ConfigBuilder {
         Set<String> notExistTables = new HashSet<>();
         try {
             String tablesSql = dbQuery.tablesSql();
-            if (DbType.POSTGRE_SQL == dbQuery.dbType()) {
+            if (DbType.POSTGRE_SQL == this.dbType) {
                 String schema = dataSourceConfig.getSchemaName();
                 if (schema == null) {
                     //pg 默认 schema=public
@@ -432,7 +434,7 @@ public class ConfigBuilder {
                     dataSourceConfig.setSchemaName(schema);
                 }
                 tablesSql = String.format(tablesSql, schema);
-            } else if (DbType.KINGBASE_ES == dbQuery.dbType()) {
+            } else if (DbType.KINGBASE_ES == this.dbType) {
                 String schema = dataSourceConfig.getSchemaName();
                 if (schema == null) {
                     //kingbase 默认 schema=PUBLIC
@@ -440,7 +442,7 @@ public class ConfigBuilder {
                     dataSourceConfig.setSchemaName(schema);
                 }
                 tablesSql = String.format(tablesSql, schema);
-            } else if (DbType.DB2 == dbQuery.dbType()) {
+            } else if (DbType.DB2 == this.dbType) {
                 String schema = dataSourceConfig.getSchemaName();
                 if (schema == null) {
                     //db2 默认 schema=current schema
@@ -450,7 +452,7 @@ public class ConfigBuilder {
                 tablesSql = String.format(tablesSql, schema);
             }
             //oracle数据库表太多,出现最大游标错误
-            else if (DbType.ORACLE == dbQuery.dbType()) {
+            else if (DbType.ORACLE == this.dbType) {
                 String schema = dataSourceConfig.getSchemaName();
                 //oracle 默认 schema=username
                 if (schema == null) {
@@ -571,7 +573,7 @@ public class ConfigBuilder {
         boolean haveId = false;
         List<TableField> fieldList = new ArrayList<>();
         List<TableField> commonFieldList = new ArrayList<>();
-        DbType dbType = dbQuery.dbType();
+        DbType dbType = this.dbType;
         String tableName = tableInfo.getName();
         try {
             String tableFieldsSql = dbQuery.tableFieldsSql();

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

@@ -25,13 +25,6 @@ import com.baomidou.mybatisplus.annotation.DbType;
  */
 public class DB2Query extends AbstractDbQuery {
 
-
-    @Override
-    public DbType dbType() {
-        return DbType.DB2;
-    }
-
-
     @Override
     public String tablesSql() {
         return "SELECT * FROM SYSCAT.TABLES where tabschema=%s";

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

@@ -24,10 +24,6 @@ import com.baomidou.mybatisplus.annotation.DbType;
  * @since 2019-06-27
  */
 public class DMQuery  extends AbstractDbQuery{
-    @Override
-    public DbType dbType() {
-        return DbType.DM;
-    }
 
     @Override
     public String tablesSql() {

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

@@ -30,13 +30,6 @@ public class H2Query extends AbstractDbQuery {
 
     public static final String PK_QUERY_SQL = "select * from INFORMATION_SCHEMA.INDEXES WHERE TABLE_NAME = '%s'";
 
-
-    @Override
-    public DbType dbType() {
-        return DbType.H2;
-    }
-
-
     @Override
     public String tablesSql() {
         return "SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE 1=1 ";

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

@@ -25,13 +25,6 @@ import com.baomidou.mybatisplus.annotation.DbType;
  */
 public class KingbaseESQuery extends AbstractDbQuery {
 
-
-    @Override
-    public DbType dbType() {
-        return DbType.KINGBASE_ES;
-    }
-
-
     @Override
     public String tablesSql() {
         return "SELECT A.tablename, obj_description(relfilenode, 'sys_class') AS comments FROM sys_tables A, sys_class B WHERE A.schemaname='%s' AND A.tablename = B.relname";

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

@@ -28,13 +28,6 @@ import com.baomidou.mybatisplus.annotation.DbType;
  */
 public class MariadbQuery extends AbstractDbQuery {
 
-
-    @Override
-    public DbType dbType() {
-        return DbType.MARIADB;
-    }
-
-
     @Override
     public String tablesSql() {
         return "show table status WHERE 1=1 ";

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

@@ -28,13 +28,6 @@ import com.baomidou.mybatisplus.annotation.DbType;
  */
 public class MySqlQuery extends AbstractDbQuery {
 
-
-    @Override
-    public DbType dbType() {
-        return DbType.MYSQL;
-    }
-
-
     @Override
     public String tablesSql() {
         return "show table status WHERE 1=1 ";

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

@@ -25,13 +25,6 @@ import com.baomidou.mybatisplus.annotation.DbType;
  */
 public class OracleQuery extends AbstractDbQuery {
 
-
-    @Override
-    public DbType dbType() {
-        return DbType.ORACLE;
-    }
-
-
     @Override
     public String tablesSql() {
         return "SELECT * FROM ALL_TAB_COMMENTS WHERE OWNER='%s'";

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

@@ -25,13 +25,6 @@ import com.baomidou.mybatisplus.annotation.DbType;
  */
 public class PostgreSqlQuery extends AbstractDbQuery {
 
-
-    @Override
-    public DbType dbType() {
-        return DbType.POSTGRE_SQL;
-    }
-
-
     @Override
     public String tablesSql() {
         return "SELECT A.tablename, obj_description(relfilenode, 'pg_class') AS comments FROM pg_tables A, pg_class B WHERE A.schemaname='%s' AND A.tablename = B.relname";

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

@@ -28,13 +28,6 @@ import com.baomidou.mybatisplus.annotation.DbType;
  */
 public class SqlServerQuery extends AbstractDbQuery {
 
-
-    @Override
-    public DbType dbType() {
-        return DbType.SQL_SERVER;
-    }
-
-
     @Override
     public String tablesSql() {
         return "select cast(so.name as varchar(500)) as TABLE_NAME, " +

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

@@ -25,13 +25,6 @@ import com.baomidou.mybatisplus.annotation.DbType;
  */
 public class SqliteQuery extends AbstractDbQuery {
 
-
-    @Override
-    public DbType dbType() {
-        return DbType.SQLITE;
-    }
-
-
     @Override
     public String tablesSql() {
         return "select * from sqlite_master where type='table'";

+ 3 - 0
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/DbTypeTest.java

@@ -16,6 +16,7 @@
 package com.baomidou.mybatisplus.test;
 
 import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.extension.plugins.pagination.DialectFactory;
 import com.baomidou.mybatisplus.extension.plugins.pagination.dialects.*;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
@@ -55,6 +56,8 @@ class DbTypeTest {
         Assertions.assertEquals(values.length, DIALECT_MAP.size());
         for (DbType dbType : values) {
             Class<?> aClass = Class.forName(dbType.getDialect());
+            IDialect dialect = DialectFactory.getDialect(dbType);
+            Assertions.assertEquals(dialect.getClass(), aClass);
             Assertions.assertEquals(aClass, DIALECT_MAP.get(dbType));
         }
     }