Просмотр исходного кода

修复ChainWrapper模式下GroupBy生成多的逗号.

https://github.com/baomidou/mybatis-plus/issues/5801
nieqiurong 1 год назад
Родитель
Сommit
d1c1fef145

+ 1 - 1
mybatis-plus-core/src/main/java/com/baomidou/mybatisplus/core/conditions/AbstractWrapper.java

@@ -362,7 +362,7 @@ public abstract class AbstractWrapper<T, R, Children extends AbstractWrapper<T,
                 one = columnToString(column);
             }
             if (CollectionUtils.isNotEmpty(columns)) {
-                one += (StringPool.COMMA + columnsToString(columns));
+                one += column != null ? StringPool.COMMA + columnsToString(columns) : columnsToString(columns);
             }
             final String finalOne = one;
             appendSqlSegments(GROUP_BY, () -> finalOne);

+ 11 - 0
mybatis-plus-core/src/test/java/com/baomidou/mybatisplus/core/conditions/QueryWrapperTest.java

@@ -176,6 +176,17 @@ class QueryWrapperTest extends BaseWrapperTest {
         Assertions.assertThrows(MybatisPlusException.class, () -> qw.getCustomSqlSegment());
     }
 
+    @Test
+    void testGroupBy(){
+        Assertions.assertEquals("GROUP BY id", new QueryWrapper<Entity>().groupBy("id").getSqlSegment().trim());
+        Assertions.assertEquals("GROUP BY id,name", new QueryWrapper<Entity>().groupBy(Arrays.asList("id", "name")).getSqlSegment().trim());
+        Assertions.assertEquals("GROUP BY id,name", new QueryWrapper<Entity>().groupBy(List.of("id", "name")).getSqlSegment().trim());
+        Assertions.assertEquals("GROUP BY id,name", new QueryWrapper<Entity>().groupBy(new ArrayList<>() {{
+            add("id");
+            add("name");
+        }}).getSqlSegment().trim());
+    }
+
     private List<Object> getList() {
         List<Object> list = new ArrayList<>();
         for (int i = 0; i < 2; i++) {

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

@@ -24,6 +24,9 @@ public class ChainWrapperTest extends BaseDbTest<EntityMapper> {
             .nested(j -> j.isNotNull(id))
             .not(j -> j.isNull(id))
             .list());
+        doTest(i -> i.queryChain().groupBy("id").list());
+        doTest(i -> i.queryChain().groupBy(List.of("id")).list());
+        doTest(i -> i.queryChain().groupBy(List.of("id", "name")).list());
     }
 
     @Override