Author: cbegin
Date: Mon May 18 04:21:48 2009
New Revision: 775803

URL: http://svn.apache.org/viewvc?rev=775803&view=rev
Log:
automatically wrapped lists and arrays in map.

Modified:
    ibatis/trunk/java/ibatis-3/TODO
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/session/defaults/DefaultSqlSession.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BindingTest.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundAuthorMapper.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundAuthorMapper.xml

Modified: ibatis/trunk/java/ibatis-3/TODO
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/TODO?rev=775803&r1=775802&r2=775803&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/TODO (original)
+++ ibatis/trunk/java/ibatis-3/TODO Mon May 18 04:21:48 2009
@@ -4,7 +4,6 @@
 
 Required:
 
-* Wrap collection parameter objects in a map automatically
 * Allow lazy loading across connection boundaries
 
 Nice to Have:

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/session/defaults/DefaultSqlSession.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/session/defaults/DefaultSqlSession.java?rev=775803&r1=775802&r2=775803&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/session/defaults/DefaultSqlSession.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/session/defaults/DefaultSqlSession.java
 Mon May 18 04:21:48 2009
@@ -7,6 +7,7 @@
 import org.apache.ibatis.session.*;
 
 import java.util.List;
+import java.util.HashMap;
 
 public class DefaultSqlSession implements SqlSession {
 
@@ -46,7 +47,7 @@
   public List selectList(String statement, Object parameter, int offset, int 
limit) {
     try {
       MappedStatement ms = configuration.getMappedStatement(statement);
-      return executor.query(ms, parameter, offset, limit, 
Executor.NO_RESULT_HANDLER);
+      return executor.query(ms, wrapCollection(parameter), offset, limit, 
Executor.NO_RESULT_HANDLER);
     } catch (Exception e) {
       throw ExceptionFactory.wrapException("Error querying database.  Cause: " 
+ e, e);
     }
@@ -59,7 +60,7 @@
   public void select(String statement, Object parameter, int offset, int 
limit, ResultHandler handler) {
     try {
       MappedStatement ms = configuration.getMappedStatement(statement);
-      executor.query(ms, parameter, offset, limit, handler);
+      executor.query(ms, wrapCollection(parameter), offset, limit, handler);
     } catch (Exception e) {
       throw ExceptionFactory.wrapException("Error querying database.  Cause: " 
+ e, e);
     }
@@ -82,7 +83,7 @@
       //TODO: Need commitRequired option at the statement level
       dirty = true;
       MappedStatement ms = configuration.getMappedStatement(statement);
-      return executor.update(ms, parameter);
+      return executor.update(ms, wrapCollection(parameter));
     } catch (Exception e) {
       throw ExceptionFactory.wrapException("Error updating database.  Cause: " 
+ e, e);
     }
@@ -93,7 +94,7 @@
   }
 
   public int delete(String statement, Object parameter) {
-    return update(statement, parameter);
+    return update(statement, wrapCollection(parameter));
   }
 
   public void commit() {
@@ -146,4 +147,17 @@
     return (!autoCommit && dirty) || force;
   }
 
+  private Object wrapCollection(final Object object) {
+    if (object instanceof List) {
+      return new HashMap() {{
+        put("list", object);
+      }};
+    } else if (object != null && object.getClass().isArray()) {
+      return new HashMap() {{
+        put("array", object);
+      }};
+    }
+    return object;
+  }
+
 }

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BindingTest.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BindingTest.java?rev=775803&r1=775802&r2=775803&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BindingTest.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BindingTest.java
 Mon May 18 04:21:48 2009
@@ -16,6 +16,37 @@
   }
 
   @Test
+  public void shouldFindPostsInList() throws Exception {
+    SqlSession session = sqlSessionFactory.openSession();
+    try {
+      BoundAuthorMapper mapper = session.getMapper(BoundAuthorMapper.class);
+      List<Post> posts = mapper.findPostsInList(new ArrayList<Integer>(){{
+        add(1);
+        add(3);
+        add(5);
+      }});
+      assertEquals(3,posts.size());
+      session.rollback();
+    } finally {
+      session.close();
+    }
+  }
+
+  @Test
+  public void shouldFindPostsInArray() throws Exception {
+    SqlSession session = sqlSessionFactory.openSession();
+    try {
+      BoundAuthorMapper mapper = session.getMapper(BoundAuthorMapper.class);
+      Integer[] params = new Integer[] {1,3,5};
+      List<Post> posts = mapper.findPostsInArray(params);
+      assertEquals(3,posts.size());
+      session.rollback();
+    } finally {
+      session.close();
+    }
+  }
+
+  @Test
   public void shouldInsertAuthorWithSelectKey() {
     SqlSession session = sqlSessionFactory.openSession();
     try {

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundAuthorMapper.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundAuthorMapper.java?rev=775803&r1=775802&r2=775803&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundAuthorMapper.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundAuthorMapper.java
 Mon May 18 04:21:48 2009
@@ -3,7 +3,17 @@
 import domain.blog.*;
 import static org.apache.ibatis.annotations.Annotations.*;
 
+import java.util.List;
+
 public interface BoundAuthorMapper {
+  
+  //======================================================
+
+  List<Post> findPostsInArray(Integer[] ids);
+
+  //======================================================
+
+  List<Post> findPostsInList(List<Integer> ids);
 
   //======================================================
 

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundAuthorMapper.xml
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundAuthorMapper.xml?rev=775803&r1=775802&r2=775803&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundAuthorMapper.xml
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundAuthorMapper.xml
 Mon May 18 04:21:48 2009
@@ -16,6 +16,15 @@
     )
   </insert>
 
+  <select id="findPostsInList" parameterType="list" 
resultType="domain.blog.Post">
+    select * from post
+    where id in (#{list[0]},#{list[1]},#{list[2]})
+  </select>
+
+  <select id="findPostsInArray" parameterType="list" 
resultType="domain.blog.Post">
+    select * from post
+    where id in (#{array[0]},#{array[1]},#{array[2]})
+  </select>
 
 
 </mapper>
\ No newline at end of file


Reply via email to