You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ibatis.apache.org by cb...@apache.org on 2009/10/07 07:29:59 UTC
svn commit: r822591 - in /ibatis/java/ibatis-3/trunk/ibatis-3-core/src:
main/java/org/apache/ibatis/binding/ test/java/domain/blog/mappers/
test/java/org/apache/ibatis/binding/ test/java/org/apache/ibatis/session/
Author: cbegin
Date: Wed Oct 7 05:29:58 2009
New Revision: 822591
URL: http://svn.apache.org/viewvc?rev=822591&view=rev
Log:
Implemented multiple params with RowLimit support
Modified:
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperMethod.java
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/domain/blog/mappers/BlogMapper.java
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BindingTest.java
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundAuthorMapper.java
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundAuthorMapper.xml
ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/session/SqlSessionTest.java
Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperMethod.java
URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperMethod.java?rev=822591&r1=822590&r2=822591&view=diff
==============================================================================
--- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperMethod.java (original)
+++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperMethod.java Wed Oct 7 05:29:58 2009
@@ -1,6 +1,5 @@
package org.apache.ibatis.binding;
-import org.apache.ibatis.executor.Executor;
import org.apache.ibatis.executor.resultset.RowLimit;
import org.apache.ibatis.mapping.*;
import org.apache.ibatis.session.SqlSession;
@@ -8,6 +7,9 @@
import java.lang.reflect.Method;
import java.sql.SQLException;
import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+import java.util.HashMap;
public class MapperMethod {
@@ -18,20 +20,22 @@
private String commandName;
private Method method;
- private int argCount;
private boolean returnsList;
- private boolean hasListBounds;
- public MapperMethod(Method method, SqlSession sqlSession) {
+ private Integer rowLimitIndex;
+ private List<String> paramNames;
+ private List<Integer> paramPositions;
+ public MapperMethod(Method method, SqlSession sqlSession) {
+ paramNames = new ArrayList<String>();
+ paramPositions = new ArrayList<Integer>();
this.sqlSession = sqlSession;
this.method = method;
this.config = sqlSession.getConfiguration();
-
setupFields();
- determineSelectMethod();
- determineCommandType();
+ setupMethodSignature();
+ setupCommandType();
validateStatement();
}
@@ -56,27 +60,60 @@
} else {
throw new BindingException("Unkown execution method for: " + commandName);
}
+ return result;
+ }
+ private Object executeForList(Object[] args) throws SQLException {
+ Object result;
+ if (rowLimitIndex != null) {
+ Object param = getParam(args);
+ RowLimit rowLimit = (RowLimit) args[rowLimitIndex];
+ result = sqlSession.selectList(commandName, param, rowLimit);
+ } else {
+ Object param = getParam(args);
+ result = sqlSession.selectList(commandName, param);
+ }
return result;
}
+ private Object getParam(Object[] args) {
+ final int paramCount = paramPositions.size();
+ if (args == null || paramCount == 0) {
+ return null;
+ } else if (paramPositions.size() == 1) {
+ return args[paramPositions.get(0)];
+ } else {
+ Map param = new HashMap();
+ for (int i=0; i < paramCount; i++) {
+ param.put(paramNames.get(i), args[paramPositions.get(i)]);
+ }
+ return param;
+ }
+ }
+
+ // Setup //
+
private void setupFields() {
this.commandName = method.getDeclaringClass().getName() + "." + method.getName();
- this.argCount = method.getParameterTypes().length;
}
- private void determineSelectMethod() {
+ private void setupMethodSignature() {
if (List.class.isAssignableFrom(method.getReturnType())) {
returnsList = true;
- if (argCount == 2) {
- hasListBounds = true;
- } else if (argCount == 3) {
- hasListBounds = true;
+ }
+ final Class[] argTypes = method.getParameterTypes();
+ for (int i=0; i < argTypes.length; i++) {
+ if (RowLimit.class.isAssignableFrom(argTypes[i])) {
+ rowLimitIndex = i;
+ } else {
+ final String paramName = String.valueOf(paramPositions.size());
+ paramNames.add(paramName);
+ paramPositions.add(i);
}
}
}
- private void determineCommandType() {
+ private void setupCommandType() {
MappedStatement ms = config.getMappedStatement(commandName);
type = ms.getSqlCommandType();
if (type == SqlCommandType.UNKNOWN) {
@@ -92,29 +129,4 @@
}
}
- private Object executeForList(Object[] args) throws SQLException {
- Object result;
- if (hasListBounds) {
- Object param = getParam(args);
- RowLimit rowLimit = RowLimit.DEFAULT;
- if (args.length == 3) {
- rowLimit = new RowLimit((Integer) args[1], (Integer) args[2]);
- } else if (args.length == 2) {
- rowLimit = new RowLimit((Integer) args[0], (Integer) args[1]);
- }
- result = sqlSession.selectList(commandName, param, rowLimit);
- } else {
- Object param = getParam(args);
- result = sqlSession.selectList(commandName, param);
- }
- return result;
- }
-
- private Object getParam(Object[] args) {
- if (args == null) {
- return null;
- }
- return args.length == 1 || args.length == 3 ? args[0] : null;
- }
-
}
Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/domain/blog/mappers/BlogMapper.java
URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/domain/blog/mappers/BlogMapper.java?rev=822591&r1=822590&r2=822591&view=diff
==============================================================================
--- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/domain/blog/mappers/BlogMapper.java (original)
+++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/domain/blog/mappers/BlogMapper.java Wed Oct 7 05:29:58 2009
@@ -1,13 +1,15 @@
package domain.blog.mappers;
+import org.apache.ibatis.executor.resultset.RowLimit;
+
import java.util.*;
public interface BlogMapper {
- List<Map> selectAllPosts(Object param);
+ List<Map> selectAllPosts();
- List<Map> selectAllPosts(int offset, int limit);
+ List<Map> selectAllPosts(RowLimit rowLimit);
- List<Map> selectAllPosts(Object param, int offset, int limit);
+ List<Map> selectAllPosts(RowLimit rowLimit, Object param);
}
Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BindingTest.java
URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BindingTest.java?rev=822591&r1=822590&r2=822591&view=diff
==============================================================================
--- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BindingTest.java (original)
+++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BindingTest.java Wed Oct 7 05:29:58 2009
@@ -2,6 +2,7 @@
import domain.blog.*;
import org.apache.ibatis.session.*;
+import org.apache.ibatis.executor.resultset.RowLimit;
import static org.junit.Assert.*;
import org.junit.*;
@@ -65,6 +66,20 @@
}
@Test
+ public void shouldfindThreeSpecificPosts() throws Exception {
+ SqlSession session = sqlSessionFactory.openSession();
+ try {
+ BoundAuthorMapper mapper = session.getMapper(BoundAuthorMapper.class);
+ List<Post> posts = mapper.findThreeSpecificPosts(1,new RowLimit(1,1),3,5);
+ assertEquals(1,posts.size());
+ assertEquals(3,posts.get(0).getId());
+ session.rollback();
+ } finally {
+ session.close();
+ }
+ }
+
+ @Test
public void shouldInsertAuthorWithSelectKey() {
SqlSession session = sqlSessionFactory.openSession();
try {
Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundAuthorMapper.java
URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundAuthorMapper.java?rev=822591&r1=822590&r2=822591&view=diff
==============================================================================
--- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundAuthorMapper.java (original)
+++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundAuthorMapper.java Wed Oct 7 05:29:58 2009
@@ -2,6 +2,7 @@
import domain.blog.*;
import org.apache.ibatis.annotations.*;
+import org.apache.ibatis.executor.resultset.RowLimit;
import java.util.List;
@@ -63,4 +64,5 @@
//======================================================
+ List<Post> findThreeSpecificPosts(int one, RowLimit rowLimit, int two, int three);
}
Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundAuthorMapper.xml
URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundAuthorMapper.xml?rev=822591&r1=822590&r2=822591&view=diff
==============================================================================
--- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundAuthorMapper.xml (original)
+++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundAuthorMapper.xml Wed Oct 7 05:29:58 2009
@@ -26,5 +26,10 @@
where id in (#{array[0]},#{array[1]},#{array[2]})
</select>
+ <select id="findThreeSpecificPosts" parameterType="map" resultType="domain.blog.Post">
+ select * from post
+ where id in (#{0},#{1},#{2})
+ </select>
+
</mapper>
\ No newline at end of file
Modified: ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/session/SqlSessionTest.java
URL: http://svn.apache.org/viewvc/ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/session/SqlSessionTest.java?rev=822591&r1=822590&r2=822591&view=diff
==============================================================================
--- ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/session/SqlSessionTest.java (original)
+++ ibatis/java/ibatis-3/trunk/ibatis-3-core/src/test/java/org/apache/ibatis/session/SqlSessionTest.java Wed Oct 7 05:29:58 2009
@@ -3,6 +3,7 @@
import domain.blog.*;
import domain.blog.mappers.*;
import org.apache.ibatis.BaseDataTest;
+import org.apache.ibatis.executor.resultset.RowLimit;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.mapping.Configuration;
import static org.junit.Assert.*;
@@ -439,7 +440,7 @@
SqlSession session = sqlMapper.openSession();
try {
BlogMapper mapper = session.getMapper(BlogMapper.class);
- List<Map> posts = mapper.selectAllPosts(null);
+ List<Map> posts = mapper.selectAllPosts();
assertEquals(5, posts.size());
} finally {
session.close();
@@ -451,7 +452,7 @@
SqlSession session = sqlMapper.openSession();
try {
BlogMapper mapper = session.getMapper(BlogMapper.class);
- List<Map> posts = mapper.selectAllPosts(null, 0, 2);
+ List<Map> posts = mapper.selectAllPosts(new RowLimit(0, 2), null);
assertEquals(2, posts.size());
assertEquals(1, posts.get(0).get("ID"));
assertEquals(2, posts.get(1).get("ID"));
@@ -465,7 +466,7 @@
SqlSession session = sqlMapper.openSession();
try {
BlogMapper mapper = session.getMapper(BlogMapper.class);
- List<Map> posts = mapper.selectAllPosts(2, 3);
+ List<Map> posts = mapper.selectAllPosts(new RowLimit(2, 3));
assertEquals(3, posts.size());
assertEquals(3, posts.get(0).get("ID"));
assertEquals(4, posts.get(1).get("ID"));