Browse Source

EntityWrapper IN 提供 Collection 支持 , fix issus #91

Caratacus 8 years ago
parent
commit
968c8f1388

+ 4 - 4
mybatis-plus/src/main/java/com/baomidou/mybatisplus/mapper/EntityWrapper.java

@@ -21,7 +21,7 @@ import com.baomidou.mybatisplus.toolkit.StringUtils;
 import java.io.Serializable;
 import java.text.MessageFormat;
 import java.util.Arrays;
-import java.util.List;
+import java.util.Collection;
 
 /**
  * <p>
@@ -384,7 +384,7 @@ public class EntityWrapper<T> implements Serializable {
 	 *            匹配值 List集合
 	 * @return this
 	 */
-	public EntityWrapper<T> in(String column, List<?> value) {
+	public EntityWrapper<T> in(String column, Collection<?> value) {
 		sql.IN(column, value);
 		return this;
 	}
@@ -398,7 +398,7 @@ public class EntityWrapper<T> implements Serializable {
 	 *            匹配值 List集合
 	 * @return this
 	 */
-	public EntityWrapper<T> notIn(String column, List<?> value) {
+	public EntityWrapper<T> notIn(String column, Collection<?> value) {
 		sql.NOT_IN(column, value);
 		return this;
 	}
@@ -412,7 +412,7 @@ public class EntityWrapper<T> implements Serializable {
 	 *            匹配值 object数组
 	 * @return this
 	 */
-	public EntityWrapper<T> in(String column, Object... value) {
+	public EntityWrapper<T> in(String column, Object[] value) {
 		sql.IN(column, Arrays.asList(value));
 		return this;
 	}

+ 10 - 6
mybatis-plus/src/main/java/com/baomidou/mybatisplus/mapper/TSqlPlus.java

@@ -20,7 +20,8 @@ import com.baomidou.mybatisplus.toolkit.CollectionUtil;
 import com.baomidou.mybatisplus.toolkit.StringUtils;
 
 import java.text.MessageFormat;
-import java.util.List;
+import java.util.Collection;
+import java.util.Iterator;
 
 /**
  * <p>
@@ -126,7 +127,7 @@ public class TSqlPlus extends MybatisAbstractSQL<TSqlPlus> {
      *            List集合
      * @return
      */
-    public TSqlPlus IN(String column, List<?> value) {
+    public TSqlPlus IN(String column, Collection<?> value) {
         handerIn(column, value, false);
         return this;
     }
@@ -140,7 +141,7 @@ public class TSqlPlus extends MybatisAbstractSQL<TSqlPlus> {
      *            List集合
      * @return
      */
-    public TSqlPlus NOT_IN(String column, List<?> value) {
+    public TSqlPlus NOT_IN(String column, Collection<?> value) {
         handerIn(column, value, true);
         return this;
     }
@@ -223,7 +224,7 @@ public class TSqlPlus extends MybatisAbstractSQL<TSqlPlus> {
      * @param isNot
      *            是否为NOT IN操作
      */
-    private void handerIn(String column, List<?> value, boolean isNot) {
+    private void handerIn(String column, Collection<?> value, boolean isNot) {
         if (StringUtils.isNotEmpty(column) && CollectionUtil.isNotEmpty(value)) {
             StringBuilder inSql = new StringBuilder();
             inSql.append(column);
@@ -232,14 +233,17 @@ public class TSqlPlus extends MybatisAbstractSQL<TSqlPlus> {
             }
             inSql.append(" IN (");
             int _size = value.size();
-            for (int i = 0; i < _size; i++) {
-                String tempVal = StringUtils.quotaMark(value.get(i));
+            int i = 0;
+            Iterator<?> iterator = value.iterator();
+            while(iterator.hasNext()) {
+                String tempVal = StringUtils.quotaMark(iterator.next());
                 if (i + 1 == _size) {
                     inSql.append(tempVal);
                 } else {
                     inSql.append(tempVal);
                     inSql.append(",");
                 }
+                i++;
             }
             inSql.append(")");
             WHERE(inSql.toString());

+ 17 - 1
mybatis-plus/src/test/java/com/baomidou/mybatisplus/test/EntityWrapperTest.java

@@ -23,6 +23,8 @@ import org.junit.Test;
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Set;
+import java.util.TreeSet;
 
 /**
  * <p>
@@ -204,7 +206,7 @@ public class EntityWrapperTest {
 	 * 测试NOT IN
 	 */
 	@Test
-	public void testNul17() {
+	public void test17() {
 		List<String> list = new ArrayList<String>();
 		list.add("'1'");
 		list.add("'2'");
@@ -229,6 +231,20 @@ public class EntityWrapperTest {
 		System.out.println("sql ==> " + sqlPart);
 		Assert.assertEquals("WHERE (test_type IN (111111111,222222222,333333333))", sqlPart);
 	}
+	/**
+	 * 测试IN
+	 */
+	@Test
+	public void test18() {
+		Set<Long> list = new TreeSet<Long>();
+		list.add(111111111L);
+		list.add(222222222L);
+		list.add(333333333L);
+		ew.in("test_type", list);
+		String sqlPart = ew.getSqlSegment();
+		System.out.println("sql ==> " + sqlPart);
+		Assert.assertEquals("WHERE (test_type IN (111111111,222222222,333333333))", sqlPart);
+	}
 
 	/**
 	 * 测试BETWEEN AND