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