Browse Source

DbType 以及 IDialect 实现类的清理

miemie 3 years ago
parent
commit
253574dfc7

+ 1 - 1
build.gradle

@@ -87,7 +87,7 @@ subprojects {
         mavenLocal()
         maven { url "https://maven.aliyun.com/repository/public" }
         maven { url "https://oss.sonatype.org/content/repositories/snapshots/" }
-        jcenter()
+        mavenCentral()
     }
 
     dependencies {

+ 1 - 0
changelog-temp.md

@@ -0,0 +1 @@
+- 枚举处理器优化-现在无需在配置文件里指定枚举包

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

@@ -100,7 +100,23 @@ public enum DbType {
      * GBase
      */
     GBASE("gbase", "南大通用(华库)数据库"),
+    /**
+     * GBase-8s
+     */
+    GBASE_8S("gbase-8s", "南大通用数据库 GBase 8s"),
+    /**
+     * use {@link  #GBASE_8S}
+     *
+     * @deprecated 2022-05-30
+     */
+    @Deprecated
     GBASEDBT("gbasedbt", "南大通用数据库"),
+    /**
+     * use {@link  #GBASE_8S}
+     *
+     * @deprecated 2022-05-30
+     */
+    @Deprecated
     GBASE_INFORMIX("gbase 8s", "南大通用数据库 GBase 8s"),
     /**
      * Oscar

+ 1 - 0
mybatis-plus-extension/build.gradle

@@ -17,4 +17,5 @@ dependencies {
     implementation "${lib.'mybatis-velocity'}"
     implementation "${lib.'mybatis-freemarker'}"
     testImplementation "com.github.pagehelper:pagehelper:5.1.11"
+    testImplementation "com.google.guava:guava:27.0.1-jre"
 }

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

@@ -68,22 +68,26 @@ public class DialectFactory {
                 || dbType == DbType.HIGH_GO
                 || dbType == DbType.VERTICA) {
                 dialect = new PostgreDialect();
-            } else if (dbType == DbType.ORACLE_12C) {
+            }
+            // other types
+            else if (dbType == DbType.ORACLE_12C) {
                 dialect = new Oracle12cDialect();
             } else if (dbType == DbType.DB2) {
                 dialect = new DB2Dialect();
             } else if (dbType == DbType.SQL_SERVER2005) {
                 dialect = new SQLServer2005Dialect();
             } else if (dbType == DbType.SQL_SERVER) {
-                dialect = new SQLServerDialect();
+                dialect = new Oracle12cDialect();
             } else if (dbType == DbType.SYBASE) {
                 dialect = new SybaseDialect();
+            } else if (dbType == DbType.GBASE_8S) {
+                dialect = new GBase8sDialect();
             } else if (dbType == DbType.GBASEDBT) {
-                dialect = new GBasedbtDialect();
+                dialect = new GBase8sDialect();
             } else if (dbType == DbType.GBASE_INFORMIX) {
-                dialect = new GBaseInfromixDialect();
+                dialect = new GBase8sDialect();
             } else if (dbType == DbType.FIREBIRD) {
-                dialect = new FirebirdDialect();
+                dialect = new Oracle12cDialect();
             }
             DIALECT_ENUM_MAP.put(dbType, dialect);
         }

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

@@ -27,6 +27,8 @@ import java.util.function.Function;
 
 /**
  * 分页参数动态化所需 model
+ * <p>
+ * 动态入参的模式暂只支持在sql末端如: select * from x limit ?,?
  *
  * @author miemie
  * @since 2018-10-31

+ 3 - 9
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/dialects/FirebirdDialect.java

@@ -1,19 +1,13 @@
 package com.baomidou.mybatisplus.extension.plugins.pagination.dialects;
 
-import com.baomidou.mybatisplus.extension.plugins.pagination.DialectModel;
-
 /**
  * Firebird 数据库分页语句组装实现,SQL测试版本为4.0
  * 备注:The FIRST/SKIP and ROWS clause are non-standard alternatives
  *
  * @author cdtjj
  * @since 2022-04-26
+ * @deprecated 2022-05-30
  */
-public class FirebirdDialect implements IDialect {
-
-    @Override
-    public DialectModel buildPaginationSql(String originalSql, long offset, long limit) {
-        String sql = originalSql + " OFFSET " + FIRST_MARK + " ROWS FETCH NEXT " + SECOND_MARK + " ROWS ONLY";
-        return new DialectModel(sql, offset, limit).setConsumerChain();
-    }
+@Deprecated
+public class FirebirdDialect extends Oracle12cDialect {
 }

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

@@ -0,0 +1,35 @@
+/*
+ * Copyright (c) 2011-2022, baomidou (jobob@qq.com).
+ *
+ * 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
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * 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.extension.plugins.pagination.DialectModel;
+
+/**
+ * GBase 8s V8.8 数据库分页语句组装实现
+ * 通用分页版本
+ *
+ * @author liaojinqing
+ * @since 2021-07-20
+ */
+public class GBase8sDialect implements IDialect {
+
+    @Override
+    public DialectModel buildPaginationSql(String originalSql, long offset, long limit) {
+        StringBuilder sql = new StringBuilder(originalSql)
+            .insert(6, " SKIP " + offset + " FIRST " + limit);
+        return new DialectModel(sql.toString());
+    }
+}

+ 3 - 23
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/dialects/GBaseInfromixDialect.java

@@ -15,34 +15,14 @@
  */
 package com.baomidou.mybatisplus.extension.plugins.pagination.dialects;
 
-import com.baomidou.mybatisplus.extension.plugins.pagination.DialectModel;
-
 /**
  * GBase 8s V8.8 数据库分页语句组装实现
  * 通用分页版本
  *
  * @author lix lixhbs@163.com
  * @since 2022年03月28日19:25:46
+ * @deprecated 2022-05-30
  */
-public class GBaseInfromixDialect implements IDialect
-{
-
-    @Override
-    public DialectModel buildPaginationSql(String originalSql, long offset, long limit)
-    {
-        int slot = originalSql.toLowerCase().indexOf("select");
-        StringBuilder sql = new StringBuilder();
-        if (slot == 0)
-        {
-            sql.append("SELECT");
-            sql.append(" SKIP ").append(offset);
-            sql.append(" FIRST ").append(limit);
-            sql.append(originalSql.substring(6));
-            return new DialectModel(sql.toString());
-        } else
-        {
-            return null;
-        }
-
-    }
+@Deprecated
+public class GBaseInfromixDialect extends GBase8sDialect {
 }

+ 3 - 10
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/dialects/GBasedbtDialect.java

@@ -15,21 +15,14 @@
  */
 package com.baomidou.mybatisplus.extension.plugins.pagination.dialects;
 
-import com.baomidou.mybatisplus.extension.plugins.pagination.DialectModel;
-
 /**
  * GBase 8s V8.8 数据库分页语句组装实现
  * 通用分页版本
  *
  * @author liaojinqing
  * @since 2021-07-20
+ * @deprecated 2022-05-30
  */
-public class GBasedbtDialect implements IDialect {
-
-    @Override
-    public DialectModel buildPaginationSql(String originalSql, long offset, long limit) {
-        StringBuilder sql = new StringBuilder(originalSql)
-            .insert(6, " SKIP " + FIRST_MARK + " FIRST " + SECOND_MARK);
-        return new DialectModel(sql.toString(), offset, limit).setConsumerChain();
-    }
+@Deprecated
+public class GBasedbtDialect extends GBase8sDialect {
 }

+ 2 - 9
mybatis-plus-extension/src/main/java/com/baomidou/mybatisplus/extension/plugins/pagination/dialects/SQLServerDialect.java

@@ -15,19 +15,12 @@
  */
 package com.baomidou.mybatisplus.extension.plugins.pagination.dialects;
 
-import com.baomidou.mybatisplus.extension.plugins.pagination.DialectModel;
-
 /**
  * SQLServer 数据库分页语句组装实现
  *
  * @author hubin
  * @since 2016-03-23
  */
-public class SQLServerDialect implements IDialect {
-
-    @Override
-    public DialectModel buildPaginationSql(String originalSql, long offset, long limit) {
-        String sql = originalSql + " OFFSET " + FIRST_MARK + " ROWS FETCH NEXT " + SECOND_MARK + " ROWS ONLY";
-        return new DialectModel(sql, offset, limit).setConsumerChain();
-    }
+@Deprecated
+public class SQLServerDialect extends Oracle12cDialect {
 }

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

@@ -0,0 +1,51 @@
+package com.baomidou.mybatisplus.extension.plugins.pagination.dialects;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.DialectModel;
+import com.google.common.collect.Lists;
+import lombok.extern.slf4j.Slf4j;
+import org.junit.jupiter.api.Test;
+import org.junit.platform.commons.util.ReflectionUtils;
+
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.stream.Collectors;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * @author miemie
+ * @since 2022-05-30
+ */
+@Slf4j
+class IDialectTest {
+
+    /**
+     * 检查 IDialect 的实现类生成的sql不要老是有重复,同样实现类的sql类型只需要留一个
+     */
+    @Test
+    void singleRealize() {
+        List<Class<?>> classList = ReflectionUtils.findAllClassesInPackage(
+            "com.baomidou.mybatisplus.extension.plugins.pagination.dialects",
+            i -> !i.isInterface() && IDialect.class.isAssignableFrom(i), i -> true);
+
+        Map<String, List<Class<?>>> map = new ConcurrentHashMap<>();
+        classList.forEach(i -> {
+            IDialect o = (IDialect) ReflectionUtils.newInstance(i);
+            DialectModel model = o.buildPaginationSql("select * from table", 1, 10);
+            String sql = model.getDialectSql();
+            if (!map.containsKey(sql)) {
+                map.put(sql, Lists.newArrayList(i));
+            } else {
+                map.get(sql).add(i);
+            }
+        });
+        map.forEach((k, v) -> {
+            List<Class<?>> list = v.stream().filter(i -> i.getAnnotation(Deprecated.class) == null).collect(Collectors.toList());
+            assertThat(list.size()).as(() -> {
+                String s = list.stream().map(Class::getSimpleName).collect(Collectors.joining("与"));
+                return s + "的sql重复";
+            }).isEqualTo(1);
+        });
+    }
+}

+ 6 - 0
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/cache/page/PageCacheMapper.java

@@ -3,7 +3,9 @@ package com.baomidou.mybatisplus.test.cache.page;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.CacheNamespace;
+import org.apache.ibatis.annotations.ResultType;
 import org.apache.ibatis.annotations.Select;
+import org.apache.ibatis.session.ResultHandler;
 
 /**
  * @author miemie
@@ -15,6 +17,10 @@ public interface PageCacheMapper extends BaseMapper<PageCache> {
     @Select("<script>select * from page_cache where <if test=\"tj.name\">name is not null</if></script>")
     Page<PageCache> otherPage(Page<?> page, PageCacheTest.Tj tj);
 
+    @ResultType(PageCache.class)
+    @Select("<script>select * from page_cache where <if test=\"tj.name\">name is not null</if></script>")
+    void otherPageHandler(Page<?> page, PageCacheTest.Tj tj, ResultHandler handler);
+
     @Select("<script>select count(0) from page_cache where <if test=\"tj.name\">name is not null</if></script>")
     Long otherCount(PageCacheTest.Tj tj);
 }

+ 10 - 0
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/cache/page/PageCacheTest.java

@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.test.BaseDbTest;
 import lombok.Data;
 import org.apache.ibatis.cache.Cache;
+import org.apache.ibatis.executor.result.DefaultResultHandler;
 import org.apache.ibatis.plugin.Interceptor;
 import org.junit.jupiter.api.Test;
 
@@ -79,6 +80,15 @@ class PageCacheTest extends BaseDbTest<PageCacheMapper> {
         });
     }
 
+    @Test
+    void handlerTest() {
+        doTest(i -> {
+            Page<PageCache> page = new Page<>(1, 2);
+            i.otherPageHandler(page, new Tj(), new DefaultResultHandler());
+            System.out.println(page);
+        });
+    }
+
     @Override
     protected List<Interceptor> interceptors() {
         MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();