miemie 4 tahun lalu
induk
melakukan
086de162ae

+ 13 - 0
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/conditions/BaseWrapperTest.java

@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.core.toolkit.Constants;
 import com.baomidou.mybatisplus.core.toolkit.StringPool;
 import lombok.Data;
+import org.assertj.core.api.Assertions;
 
 import static org.assertj.core.api.Assertions.assertThat;
 
@@ -20,6 +21,18 @@ class BaseWrapperTest {
         });
     }
 
+    void logSqlSet(String explain, AbstractWrapper<?, ?, ?> wrapper, String targetSql) {
+        System.out.printf(" ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓   ->(%s)<-   ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓%n", explain);
+        System.out.println(wrapper.getSqlSet());
+        Assertions.assertThat(wrapper.getSqlSet().trim()).isEqualTo(targetSql);
+    }
+
+    void logSqlWhere(String explain, AbstractWrapper<?, ?, ?> wrapper, String targetSql) {
+        System.out.printf(" ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓   ->(%s)<-   ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓%n", explain);
+        System.out.println(wrapper.getSqlSegment());
+        assertThat(wrapper.getTargetSql().trim()).isEqualTo(targetSql);
+    }
+
     @Data
     protected static class Entity {
         private Integer id;

+ 34 - 89
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/conditions/QueryWrapperTest.java

@@ -2,7 +2,6 @@ package com.baomidou.mybatisplus.core.conditions;
 
 import com.baomidou.mybatisplus.core.MybatisConfiguration;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
-import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.TableInfoHelper;
 import org.apache.ibatis.builder.MapperBuilderAssistant;
 import org.junit.jupiter.api.Test;
@@ -10,127 +9,75 @@ import org.junit.jupiter.api.Test;
 import java.time.LocalDate;
 import java.util.*;
 
-import static org.assertj.core.api.Assertions.assertThat;
-
 /**
  * @author miemie
  * @since 2021-01-27
  */
 class QueryWrapperTest extends BaseWrapperTest {
 
-    private void log(String message) {
-        System.out.println(message);
-    }
-
-    private void logSqlSegment(String explain, Wrapper<?> wrapper, String targetSql) {
-        System.out.printf(" ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓   ->(%s)<-   ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓%n", explain);
-        System.out.println(wrapper.getSqlSegment());
-        System.out.println(wrapper.getTargetSql());
-        assertThat(wrapper.getTargetSql().trim()).isEqualTo(targetSql);
-    }
-
     @Test
-    void test() {
-        try {
-            Wrapper<Entity> wrapper = new QueryWrapper<Entity>().lambda().eq(Entity::getName, 123)
-                .or(c -> c.eq(Entity::getRoleId, 1).eq(Entity::getId, 2))
-                .eq(Entity::getId, 1);
-            log(wrapper.getSqlSegment());
-        } catch (Exception e) {
-            log(e.getMessage());
-        }
-    }
-
-    @Test
-    void test1() {
-        QueryWrapper<Entity> ew = new QueryWrapper<Entity>() {
-            /**
-             * serialVersionUID
-             */
-            private static final long serialVersionUID = 4719966531503901490L;
-
-            {
-                eq("xxx", 123);
-                and(i -> i.eq("andx", 65444).le("ande", 66666));
-                ne("xxx", 222);
-            }
-        };
-        log(ew.getSqlSegment());
-        log(ew.getSqlSegment());
-        ew.gt("x22", 333);
-        log(ew.getSqlSegment());
-        log(ew.getSqlSegment());
-        ew.orderByAsc("column");
-        log(ew.getSqlSegment());
-        log(ew.getSqlSegment());
-        ew.getParamNameValuePairs().forEach((k, v) -> System.out.println("key = " + k + " ; value = " + v));
-    }
-
-    @Test
-    void test2() {
-        UpdateWrapper<Entity> ew = new UpdateWrapper<Entity>()
-            .set("name", "三毛").set("id", 1)
+    void testCacheSqlSegment() {
+        QueryWrapper<Entity> ew = new QueryWrapper<Entity>()
             .eq("xxx", 123)
             .and(i -> i.eq("andx", 65444).le("ande", 66666))
             .ne("xxx", 222);
-        log(ew.getSqlSet());
-        log(ew.getSqlSegment());
-    }
-
-    @Test
-    void test3() {
-        UpdateWrapper<Entity> ew = new UpdateWrapper<Entity>()
-            .setSql("abc=1,def=2").set("sets", 1111).eq("id", 1).ge("age", 3);
-        log(ew.getSqlSet());
-        log(ew.getSqlSegment());
+        logSqlWhere("xx",ew,"(xxx = ? AND (andx = ? AND ande <= ?) AND xxx <> ?)");
+        logSqlWhere("xx",ew,"(xxx = ? AND (andx = ? AND ande <= ?) AND xxx <> ?)");
+        ew.gt("x22", 333);
+        logSqlWhere("xx",ew,"(xxx = ? AND (andx = ? AND ande <= ?) AND xxx <> ? AND x22 > ?)");
+        logSqlWhere("xx",ew,"(xxx = ? AND (andx = ? AND ande <= ?) AND xxx <> ? AND x22 > ?)");
+        ew.orderByAsc("column");
+        logSqlWhere("xx",ew,"(xxx = ? AND (andx = ? AND ande <= ?) AND xxx <> ? AND x22 > ?) ORDER BY column ASC");
+        logSqlWhere("xx",ew,"(xxx = ? AND (andx = ? AND ande <= ?) AND xxx <> ? AND x22 > ?) ORDER BY column ASC");
+        logParams(ew);
     }
 
     @Test
     void testQueryWrapper() {
-        logSqlSegment("去除第一个 or,以及自动拼接 and,以及手动拼接 or,以及去除最后的多个or", new QueryWrapper<Entity>().or()
+        logSqlWhere("去除第一个 or,以及自动拼接 and,以及手动拼接 or,以及去除最后的多个or", new QueryWrapper<Entity>().or()
                 .ge("age", 3).or().ge("age", 3).ge("age", 3).or().or().or().or(),
             "(age >= ? OR age >= ? AND age >= ?)");
 
-        logSqlSegment("多个 or 相连接,去除多余的 or", new QueryWrapper<Entity>()
+        logSqlWhere("多个 or 相连接,去除多余的 or", new QueryWrapper<Entity>()
                 .ge("age", 3).or().or().or().ge("age", 3).or().or().ge("age", 3),
             "(age >= ? OR age >= ? OR age >= ?)");
 
-        logSqlSegment("嵌套,正常嵌套", new QueryWrapper<Entity>()
+        logSqlWhere("嵌套,正常嵌套", new QueryWrapper<Entity>()
                 .nested(i -> i.eq("id", 1)).eq("id", 1),
             "((id = ?) AND id = ?)");
 
-        logSqlSegment("嵌套,第一个套外的 and 自动消除", new QueryWrapper<Entity>()
+        logSqlWhere("嵌套,第一个套外的 and 自动消除", new QueryWrapper<Entity>()
                 .and(i -> i.eq("id", 1)).eq("id", 1),
             "((id = ?) AND id = ?)");
 
-        logSqlSegment("嵌套,多层嵌套", new QueryWrapper<Entity>()
+        logSqlWhere("嵌套,多层嵌套", new QueryWrapper<Entity>()
                 .and(i -> i.eq("id", 1).and(j -> j.eq("id", 2))),
             "((id = ? AND (id = ?)))");
 
-        logSqlSegment("嵌套,第一个套外的 or 自动消除", new QueryWrapper<Entity>()
+        logSqlWhere("嵌套,第一个套外的 or 自动消除", new QueryWrapper<Entity>()
                 .or(i -> i.eq("id", 1)).eq("id", 1),
             "((id = ?) AND id = ?)");
 
-        logSqlSegment("嵌套,套内外自动拼接 and", new QueryWrapper<Entity>()
+        logSqlWhere("嵌套,套内外自动拼接 and", new QueryWrapper<Entity>()
                 .eq("id", 11).and(i -> i.eq("id", 1)).eq("id", 1),
             "(id = ? AND (id = ?) AND id = ?)");
 
-        logSqlSegment("嵌套,套内外手动拼接 or,去除套内第一个 or", new QueryWrapper<Entity>()
+        logSqlWhere("嵌套,套内外手动拼接 or,去除套内第一个 or", new QueryWrapper<Entity>()
                 .eq("id", 11).or(i -> i.or().eq("id", 1)).or().eq("id", 1),
             "(id = ? OR (id = ?) OR id = ?)");
 
-        logSqlSegment("多个 order by 和 group by 拼接,自动优化顺序,last方法拼接在最后", new QueryWrapper<Entity>()
+        logSqlWhere("多个 order by 和 group by 拼接,自动优化顺序,last方法拼接在最后", new QueryWrapper<Entity>()
                 .eq("id", 11)
                 .last("limit 1")
                 .orderByAsc("id", "name", "sex").orderByDesc("age", "txl")
                 .groupBy("id", "name", "sex").groupBy("id", "name"),
             "(id = ?) GROUP BY id,name,sex,id,name ORDER BY id ASC,name ASC,sex ASC,age DESC,txl DESC limit 1");
 
-        logSqlSegment("只存在 order by", new QueryWrapper<Entity>()
+        logSqlWhere("只存在 order by", new QueryWrapper<Entity>()
                 .orderByAsc("id", "name", "sex").orderByDesc("age", "txl"),
             "ORDER BY id ASC,name ASC,sex ASC,age DESC,txl DESC");
 
-        logSqlSegment("只存在 group by", new QueryWrapper<Entity>()
+        logSqlWhere("只存在 group by", new QueryWrapper<Entity>()
                 .groupBy("id", "name", "sex").groupBy("id", "name"),
             "GROUP BY id,name,sex,id,name");
     }
@@ -145,7 +92,7 @@ class QueryWrapperTest extends BaseWrapperTest {
             .or().between("id", 1, 2).notBetween("id", 1, 3)
             .like("id", 1).notLike("id", 1)
             .or().likeLeft("id", 1).likeRight("id", 1);
-        logSqlSegment("测试 Compare 下的方法", queryWrapper, "(column1 = ? AND column0 = ? AND nullColumn IS NULL AND column1 = ? AND column0 = ? AND nullColumn IS NULL AND id = ? AND id <> ? OR id > ? AND id >= ? AND id < ? AND id <= ? OR id BETWEEN ? AND ? AND id NOT BETWEEN ? AND ? AND id LIKE ? AND id NOT LIKE ? OR id LIKE ? AND id LIKE ?)");
+        logSqlWhere("测试 Compare 下的方法", queryWrapper, "(column1 = ? AND column0 = ? AND nullColumn IS NULL AND column1 = ? AND column0 = ? AND nullColumn IS NULL AND id = ? AND id <> ? OR id > ? AND id >= ? AND id < ? AND id <= ? OR id BETWEEN ? AND ? AND id NOT BETWEEN ? AND ? AND id LIKE ? AND id NOT LIKE ? OR id LIKE ? AND id LIKE ?)");
         logParams(queryWrapper);
     }
 
@@ -159,7 +106,7 @@ class QueryWrapperTest extends BaseWrapperTest {
             .in("inArray").notIn("notInArray", 5, 6, 7)
             .inSql("inSql", "1,2,3,4,5").notInSql("inSql", "1,2,3,4,5")
             .having("sum(age) > {0}", 1).having("id is not null");
-        logSqlSegment("测试 Func 下的方法", queryWrapper, "(nullColumn IS NULL OR notNullColumn IS NOT NULL AND inColl IN (?,?) OR notInColl NOT IN (?,?) AND inArray IN () AND notInArray NOT IN (?,?,?) AND inSql IN (1,2,3,4,5) AND inSql NOT IN (1,2,3,4,5)) GROUP BY id,name,id2,name2 HAVING sum(age) > ? AND id is not null ORDER BY id ASC,name DESC,name2 DESC");
+        logSqlWhere("测试 Func 下的方法", queryWrapper, "(nullColumn IS NULL OR notNullColumn IS NOT NULL AND inColl IN (?,?) OR notInColl NOT IN (?,?) AND inArray IN () AND notInArray NOT IN (?,?,?) AND inSql IN (1,2,3,4,5) AND inSql NOT IN (1,2,3,4,5)) GROUP BY id,name,id2,name2 HAVING sum(age) > ? AND id is not null ORDER BY id ASC,name DESC,name2 DESC");
         logParams(queryWrapper);
     }
 
@@ -171,7 +118,7 @@ class QueryWrapperTest extends BaseWrapperTest {
             .apply("date_format(column,'%Y-%m-%d') = {0}", LocalDate.now())
             .or().exists("select id from table where age = 1")
             .or().notExists("select id from table where age = 1");
-        logSqlSegment("测试 Join 下的方法", queryWrapper, "(date_format(column,'%Y-%m-%d') = '2008-08-08' AND date_format(column,'%Y-%m-%d') = ? OR EXISTS (select id from table where age = 1) OR NOT EXISTS (select id from table where age = 1)) limit 1");
+        logSqlWhere("测试 Join 下的方法", queryWrapper, "(date_format(column,'%Y-%m-%d') = '2008-08-08' AND date_format(column,'%Y-%m-%d') = ? OR EXISTS (select id from table where age = 1) OR NOT EXISTS (select id from table where age = 1)) limit 1");
         logParams(queryWrapper);
     }
 
@@ -182,7 +129,7 @@ class QueryWrapperTest extends BaseWrapperTest {
             .or(i -> i.eq("id", 1).and(j -> j.ne("id", 2)))
             .nested(i -> i.eq("id", 1).or(j -> j.ne("id", 2)))
             .not(i -> i.eq("id", 1).or(j -> j.ne("id", 2)));
-        logSqlSegment("测试 Nested 下的方法", queryWrapper, "((id = ? AND (id <> ?)) OR (id = ? AND (id <> ?)) AND (id = ? OR (id <> ?)) AND NOT (id = ? OR (id <> ?)))");
+        logSqlWhere("测试 Nested 下的方法", queryWrapper, "((id = ? AND (id <> ?)) OR (id = ? AND (id <> ?)) AND (id = ? OR (id <> ?)) AND NOT (id = ? OR (id <> ?)))");
         logParams(queryWrapper);
     }
 
@@ -192,27 +139,25 @@ class QueryWrapperTest extends BaseWrapperTest {
         QueryWrapper<Entity> queryWrapper = new QueryWrapper<>();
         queryWrapper.lambda().eq(Entity::getName, "sss");
         queryWrapper.lambda().eq(Entity::getName, "sss2");
-        logSqlSegment("测试 PluralLambda", queryWrapper, "(username = ? AND username = ?)");
+        logSqlWhere("测试 PluralLambda", queryWrapper, "(username = ? AND username = ?)");
         logParams(queryWrapper);
     }
 
     @Test
     void testInEmptyColl() {
         QueryWrapper<Entity> queryWrapper = new QueryWrapper<Entity>().in("xxx", Collections.emptyList());
-        logSqlSegment("测试 empty 的 coll", queryWrapper, "(xxx IN ())");
+        logSqlWhere("测试 empty 的 coll", queryWrapper, "(xxx IN ())");
     }
 
     @Test
     void testExistsValue() {
-        QueryWrapper<Entity> wrapper = new QueryWrapper<>();
-        wrapper.eq("a", "b");
-        wrapper.exists("select 1 from xxx where id = {0} and name = {1}", 1, "Bob");
-        logSqlSegment("testExistsValue", wrapper, "(a = ? AND EXISTS (select 1 from xxx where id = ? and name = ?))");
+        QueryWrapper<Entity> wrapper = new QueryWrapper<Entity>().eq("a", "b")
+            .exists("select 1 from xxx where id = {0} and name = {1}", 1, "Bob");
+        logSqlWhere("testExistsValue", wrapper, "(a = ? AND EXISTS (select 1 from xxx where id = ? and name = ?))");
         logParams(wrapper);
-        wrapper = new QueryWrapper<>();
-        wrapper.eq("a", "b");
-        wrapper.notExists("select 1 from xxx where id = {0} and name = {1}", 1, "Bob");
-        logSqlSegment("testNotExistsValue", wrapper, "(a = ? AND NOT EXISTS (select 1 from xxx where id = ? and name = ?))");
+        wrapper = new QueryWrapper<Entity>().eq("a", "b")
+            .notExists("select 1 from xxx where id = {0} and name = {1}", 1, "Bob");
+        logSqlWhere("testNotExistsValue", wrapper, "(a = ? AND NOT EXISTS (select 1 from xxx where id = ? and name = ?))");
         logParams(wrapper);
     }
 

+ 0 - 8
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/conditions/UpdateWrapperTest.java

@@ -1,11 +1,9 @@
 package com.baomidou.mybatisplus.core.conditions;
 
-import com.baomidou.mybatisplus.core.conditions.update.Update;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.test.User;
 import org.apache.ibatis.type.JdbcType;
 import org.apache.ibatis.type.StringTypeHandler;
-import org.assertj.core.api.Assertions;
 import org.junit.jupiter.api.Test;
 
 /**
@@ -14,12 +12,6 @@ import org.junit.jupiter.api.Test;
  */
 class UpdateWrapperTest extends BaseWrapperTest {
 
-    private void logSqlSet(String explain, Update<?, ?> wrapper, String targetSql) {
-        System.out.printf(" ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓   ->(%s)<-   ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓ ↓%n", explain);
-        System.out.println(wrapper.getSqlSet());
-        Assertions.assertThat(wrapper.getSqlSet().trim()).isEqualTo(targetSql);
-    }
-
     @Test
     void test1() {
         UpdateWrapper<User> wrapper = new UpdateWrapper<User>()