瀏覽代碼

注释修改,测试补充.

聂秋秋 5 年之前
父節點
當前提交
242dc0fde2

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

@@ -70,6 +70,7 @@ public class DialectFactory {
      */
     @Deprecated
     private static IDialect getDialect(DbType dbType, String dialectClazz) {
+        //这里需要注意一下,就的版本是把dbType和dialectClazz同时传进来的,所以会存在dbType是一定会有值,dialectClazz可能为空的情况,兼容需要先判断dialectClazz
         return StringUtils.isBlank(dialectClazz) ? DIALECT_REGISTRY.getDialect(dbType) : DIALECT_CACHE.computeIfAbsent(dialectClazz, DialectFactory::classToDialect);
     }
 

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

@@ -18,6 +18,8 @@ package com.baomidou.mybatisplus.extension.plugins.pagination.dialects;
 
 import com.baomidou.mybatisplus.annotation.DbType;
 
+import java.util.Collection;
+import java.util.Collections;
 import java.util.EnumMap;
 import java.util.Map;
 
@@ -52,4 +54,8 @@ public class DialectRegistry {
     public IDialect getDialect(DbType dbType) {
         return dialect_enum_map.get(dbType);
     }
+
+    public Collection<IDialect> getDialects() {
+        return Collections.unmodifiableCollection(dialect_enum_map.values());
+    }
 }

+ 1 - 1
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/service/impl/ServiceImpl.java

@@ -49,7 +49,7 @@ import java.util.function.Function;
 import java.util.stream.Collectors;
 
 /**
- * IService 实现类( 泛型:M 是 mapper 对象,T 是实体 , PK 是主键泛型 
+ * IService 实现类( 泛型:M 是 mapper 对象,T 是实体 )
  *
  * @author hubin
  * @since 2018-06-23

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

@@ -0,0 +1,31 @@
+package com.baomidou.mybatisplus.extension.plugins.pagination.dialects;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import org.junit.jupiter.api.Assertions;
+import org.junit.jupiter.api.Test;
+
+class DialectRegistryTest {
+
+    private DialectRegistry dialectRegistry = new DialectRegistry();
+
+    @Test
+    void test() {
+        Assertions.assertEquals(dialectRegistry.getDialect(DbType.MYSQL).getClass(), MySqlDialect.class);
+        Assertions.assertEquals(dialectRegistry.getDialect(DbType.MARIADB).getClass(), MariaDBDialect.class);
+        Assertions.assertEquals(dialectRegistry.getDialect(DbType.ORACLE).getClass(), OracleDialect.class);
+        Assertions.assertEquals(dialectRegistry.getDialect(DbType.ORACLE_12C).getClass(), Oracle12cDialect.class);
+        Assertions.assertEquals(dialectRegistry.getDialect(DbType.DB2).getClass(), DB2Dialect.class);
+        Assertions.assertEquals(dialectRegistry.getDialect(DbType.H2).getClass(), H2Dialect.class);
+        Assertions.assertEquals(dialectRegistry.getDialect(DbType.HSQL).getClass(), HSQLDialect.class);
+        Assertions.assertEquals(dialectRegistry.getDialect(DbType.SQLITE).getClass(), SQLiteDialect.class);
+        Assertions.assertEquals(dialectRegistry.getDialect(DbType.POSTGRE_SQL).getClass(), PostgreDialect.class);
+        Assertions.assertEquals(dialectRegistry.getDialect(DbType.SQL_SERVER2005).getClass(), SQLServer2005Dialect.class);
+        Assertions.assertEquals(dialectRegistry.getDialect(DbType.SQL_SERVER).getClass(), SQLServerDialect.class);
+        Assertions.assertEquals(dialectRegistry.getDialect(DbType.DM).getClass(), DmDialect.class);
+        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.OTHER).getClass(), UnknownDialect.class);
+    }
+
+}

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

@@ -21,44 +21,23 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.dialects.*;
 import org.junit.jupiter.api.Assertions;
 import org.junit.jupiter.api.Test;
 
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
 
 /**
  * @author nieqiuqiu
  */
 class DbTypeTest {
 
-    private static final Map<DbType, Class<? extends IDialect>> DIALECT_MAP = new ConcurrentHashMap<>();
-
-    static {
-        DIALECT_MAP.put(DbType.DB2, DB2Dialect.class);
-        DIALECT_MAP.put(DbType.DM, DmDialect.class);
-        DIALECT_MAP.put(DbType.H2, H2Dialect.class);
-        DIALECT_MAP.put(DbType.MYSQL, MySqlDialect.class);
-        DIALECT_MAP.put(DbType.MARIADB, MariaDBDialect.class);
-        DIALECT_MAP.put(DbType.ORACLE, OracleDialect.class);
-        DIALECT_MAP.put(DbType.ORACLE_12C, Oracle12cDialect.class);
-        DIALECT_MAP.put(DbType.POSTGRE_SQL, PostgreDialect.class);
-        DIALECT_MAP.put(DbType.PHOENIX, PhoenixDialect.class);
-        DIALECT_MAP.put(DbType.SQL_SERVER, SQLServerDialect.class);
-        DIALECT_MAP.put(DbType.SQL_SERVER2005, SQLServer2005Dialect.class);
-        DIALECT_MAP.put(DbType.SQLITE, SQLiteDialect.class);
-        DIALECT_MAP.put(DbType.HSQL, HSQLDialect.class);
-        DIALECT_MAP.put(DbType.XU_GU, XuGuDialect.class);
-        DIALECT_MAP.put(DbType.KINGBASE_ES, KingbaseDialect.class);
-        DIALECT_MAP.put(DbType.OTHER, UnknownDialect.class);
-    }
+    private DialectRegistry dialectRegistry = new DialectRegistry();
 
     @Test
     void test() throws ClassNotFoundException {
         DbType[] values = DbType.values();
-        Assertions.assertEquals(values.length, DIALECT_MAP.size());
+        Assertions.assertEquals(values.length, dialectRegistry.getDialects().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));
+            Assertions.assertEquals(aClass, dialectRegistry.getDialect(dbType).getClass());
         }
     }