miemie 5 年之前
父节点
当前提交
d9de7947d6

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

@@ -200,7 +200,7 @@ public class PaginationInnerInterceptor implements InnerInterceptor {
         });
     }
 
-    public String autoCountSql(boolean optimizeCountSql, String sql) {
+    protected String autoCountSql(boolean optimizeCountSql, String sql) {
         if (!optimizeCountSql) {
             return SqlParserUtils.getOriginalCountSql(sql);
         }

+ 41 - 0
mybatis-plus-extension/src/test/java/com/baomidou/mybatisplus/extension/plugins/inner/PaginationInnerInterceptorTest.java

@@ -0,0 +1,41 @@
+package com.baomidou.mybatisplus.extension.plugins.inner;
+
+import org.junit.jupiter.api.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+/**
+ * @author miemie
+ * @since 2020-06-28
+ */
+class PaginationInnerInterceptorTest {
+
+    private final PaginationInnerInterceptor interceptor = new PaginationInnerInterceptor();
+
+    @Test
+    void autoCountSql() {
+        /* 能进行优化的 SQL */
+        asserts("select * from user u LEFT JOIN role r ON r.id = u.role_id",
+            "SELECT COUNT(1) FROM user u");
+
+        asserts("select * from user u LEFT JOIN role r ON r.id = u.role_id WHERE u.xx = ?",
+            "SELECT COUNT(1) FROM user u WHERE u.xx = ?");
+
+        asserts("select * from user u LEFT JOIN role r ON r.id = u.role_id LEFT JOIN permission p on p.id = u.per_id",
+            "SELECT COUNT(1) FROM user u");
+
+        asserts("select * from user u LEFT JOIN role r ON r.id = u.role_id LEFT JOIN permission p on p.id = u.per_id WHERE u.xx = ?",
+            "SELECT COUNT(1) FROM user u WHERE u.xx = ?");
+
+        /* 不能进行优化的 SQL */
+        asserts("select * from user u LEFT JOIN role r ON r.id = u.role_id AND r.name = ? where u.xx = ?",
+            "SELECT COUNT(1) FROM user u LEFT JOIN role r ON r.id = u.role_id AND r.name = ? WHERE u.xx = ?");
+
+        asserts("select * from user u LEFT JOIN role r ON r.id = u.role_id WHERE u.xax = ? AND r.cc = ? AND r.qq = ?",
+            "SELECT COUNT(1) FROM user u LEFT JOIN role r ON r.id = u.role_id WHERE u.xax = ? AND r.cc = ? AND r.qq = ?");
+    }
+
+    void asserts(String sql, String targetSql) {
+        assertThat(interceptor.autoCountSql(true, sql)).isEqualTo(targetSql);
+    }
+}