Browse Source

Sql生成错误问题(普通注入Group,Having,Order)

Caratacus 8 years ago
parent
commit
ddcd9f5496

+ 10 - 0
src/main/java/com/baomidou/mybatisplus/MybatisAbstractSQL.java

@@ -20,6 +20,7 @@ import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.List;
 
+import com.baomidou.mybatisplus.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.toolkit.StringUtils;
 
 /**
@@ -108,6 +109,15 @@ public abstract class MybatisAbstractSQL<T> implements Serializable {
         return sb.toString();
     }
 
+    /**
+     * 查看构造器where是否为空
+     *
+     * @return
+     */
+    public boolean isEmptyOfWhere() {
+        return CollectionUtils.isEmpty(sql().where);
+    }
+
     /**
      * SQL连接器
      */

+ 2 - 1
src/main/java/com/baomidou/mybatisplus/mapper/AutoSqlInjector.java

@@ -519,9 +519,10 @@ public class AutoSqlInjector implements ISqlInjector {
             where.append(convertIfTag(fieldInfo, true));
         }
         where.append("\n</if>");
-        where.append("\n<if test=\"ew.sqlSegment!=null\">\n${ew.sqlSegment}\n</if>");
+        where.append("\n<if test=\"ew!=null and ew.sqlSegment!=null and ew.notEmptyOfWhere\">\n${ew.sqlSegment}\n</if>");
         where.append("\n</if>");
         where.append("\n</where>");
+        where.append("\n<if test=\"ew!=null and ew.sqlSegment!=null and ew.emptyOfWhere\">\n${ew.sqlSegment}\n</if>");
         return where.toString();
     }
 

+ 18 - 0
src/main/java/com/baomidou/mybatisplus/mapper/Wrapper.java

@@ -85,6 +85,24 @@ public abstract class Wrapper<T> implements Serializable {
         return null;
     }
 
+    /**
+     * 查看where构造是否为空
+     *
+     * @return
+     */
+    public boolean isEmptyOfWhere() {
+        return sql.isEmptyOfWhere();
+    }
+
+    /**
+     * 查看where构造是否不为空
+     *
+     * @return
+     */
+    public boolean isNotEmptyOfWhere() {
+        return !isEmptyOfWhere();
+    }
+
     public String getSqlSelect() {
         return StringUtils.isEmpty(sqlSelect) ? null : stripSqlInjection(sqlSelect);
     }

+ 8 - 1
src/test/java/com/baomidou/mybatisplus/test/GlobalConfigurationTest.java

@@ -23,6 +23,7 @@ import org.apache.ibatis.session.SqlSession;
 import org.junit.Assert;
 
 import com.baomidou.mybatisplus.mapper.Condition;
+import com.baomidou.mybatisplus.mapper.Wrapper;
 import com.baomidou.mybatisplus.test.mysql.entity.NotPK;
 import com.baomidou.mybatisplus.test.mysql.entity.Test;
 import com.baomidou.mybatisplus.test.mysql.mapper.NotPKMapper;
@@ -62,7 +63,11 @@ public class GlobalConfigurationTest extends CrudTest {
         Assert.assertTrue(num > 0);
         NotPK notPK1 = pkMapper.selectOne(notPK);
         Assert.assertNotNull(notPK1);
-        pkMapper.selectPage(RowBounds.DEFAULT, Condition.create().eq("type", 12121212));
+        Wrapper type = Condition.create().eq("type", 12121212);
+        Assert.assertFalse(type.isEmptyOfWhere());
+        System.out.println(type.getSqlSegment());
+        Assert.assertFalse(type.isEmptyOfWhere());
+        pkMapper.selectPage(RowBounds.DEFAULT, type);
         NotPK notPK2 = null;
         try {
             notPK2 = pkMapper.selectById("1");
@@ -71,6 +76,8 @@ public class GlobalConfigurationTest extends CrudTest {
         }
         Assert.assertNull(notPK2);
         int count = pkMapper.selectCount(Condition.EMPTY);
+        pkMapper.selectList(Condition.create().orderBy("uuid"));
+        pkMapper.selectList(Condition.create().eq("uuid", "uuid").orderBy("uuid"));
         Assert.assertTrue(count > 0);
         int deleteCount = pkMapper.delete(null);
         Assert.assertTrue(deleteCount > 0);

+ 1 - 1
src/test/java/com/baomidou/mybatisplus/test/h2/H2LogicDeleteTest.java

@@ -100,7 +100,7 @@ public class H2LogicDeleteTest extends H2Test {
         userService.insert(user);
         Long id = user.getId();
         Assert.assertNotNull(id);
-
+        Assert.assertNotNull(userService.selectList(Condition.create().orderBy("age")));
         H2UserLogicDelete userFromDB = userService.selectById(user.getId());
         Assert.assertNull(userFromDB);
     }