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/02/22 06:48:19 UTC
svn commit: r746639 - in /ibatis/trunk/java/ibatis-3/ibatis-3-core/src:
main/java/org/apache/ibatis/binding/ main/java/org/apache/ibatis/parser/
test/java/org/apache/ibatis/binding/
Author: cbegin
Date: Sun Feb 22 05:48:19 2009
New Revision: 746639
URL: http://svn.apache.org/viewvc?rev=746639&view=rev
Log:
added selectOne test and refactoring
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperRegistry.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/MapperParser.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/SqlSourceParser.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/BoundBlogMapper.java
Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperRegistry.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperRegistry.java?rev=746639&r1=746638&r2=746639&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperRegistry.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperRegistry.java Sun Feb 22 05:48:19 2009
@@ -3,15 +3,11 @@
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.mapping.*;
import static org.apache.ibatis.annotations.Annotations.*;
-import org.apache.ibatis.reflection.MetaObject;
import org.apache.ibatis.cache.Cache;
-import org.apache.ibatis.parser.InlineSqlSource;
import org.apache.ibatis.parser.SqlSourceParser;
-import org.apache.ibatis.xml.GenericTokenParser;
import java.util.*;
import java.lang.reflect.Method;
-import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.TypeVariable;
import java.lang.annotation.Annotation;
@@ -75,45 +71,76 @@
private MappedStatement parseMappedStatement(Method method, Cache cache) {
Class annotationType = getSqlAnnotationType(method);
if (annotationType != null) {
- String sql = getSqlAnnotationValue(method, annotationType);
- String mappedStatementId = method.getDeclaringClass().getName() + "." + method.getName();
- SqlSource sqlSource = new BasicSqlSource(sql);
+ final String sql = getSqlAnnotationValue(method, annotationType);
+ final String mappedStatementId = method.getDeclaringClass().getName() + "." + method.getName();
+ final SqlSource sqlSource = new SqlSourceParser(config).parse(sql);
+
MappedStatement.Builder builder = new MappedStatement.Builder(config, mappedStatementId, sqlSource);
builder.resource(method.getDeclaringClass().getName().replace('.', '/') + ".java (best guess)");
-
- Options options = method.getAnnotation(Options.class);
- if (options != null) {
- builder.useCache(options.useCache());
- builder.flushCacheRequired(options.flushCache());
- builder.resultSetType(options.resultSetType());
- builder.statementType(options.statementType());
- builder.fetchSize(options.fetchSize());
- builder.timeout(options.timeout());
- }
-
builder.cache(cache);
-
- Class returnType = method.getReturnType();
- if (returnType.isAssignableFrom(Collection.class)) {
- TypeVariable<? extends Class<?>>[] returnTypeVariables = returnType.getTypeParameters();
- if (returnTypeVariables.length == 1) {
- returnType = returnTypeVariables[0].getGenericDeclaration();
- }
- }
-
- builder.parameterMap(new ParameterMap.Builder(config, "", Object.class, new ArrayList<ParameterMapping>()).build());
- final ResultMap resultMap = new ResultMap.Builder(config, "", returnType, new ArrayList<ResultMapping>()).build();
- builder.resultMaps(new ArrayList<ResultMap>() {
- {
- add(resultMap);
- }
- });
+ setOptions(method, builder);
+ setParameterMap(method, mappedStatementId, builder);
+ setResultMaps(method, mappedStatementId, builder);
return builder.build();
}
return null;
}
+ private void setResultMaps(Method method, final String mappedStatementId, MappedStatement.Builder builder) {
+ final Class returnType = getReturnType(method);
+ builder.resultMaps(new ArrayList<ResultMap>() {{
+ add(new ResultMap.Builder(
+ config,
+ mappedStatementId+"-BoundResultMap",
+ returnType,
+ new ArrayList<ResultMapping>()).build());
+ }});
+ }
+
+ private void setParameterMap(Method method, String mappedStatementId, MappedStatement.Builder builder) {
+ final Class parameterType = getParameterType(method);
+ builder.parameterMap(new ParameterMap.Builder(
+ config,
+ mappedStatementId+"-BoundParameterMap",
+ parameterType,
+ new ArrayList<ParameterMapping>()).build());
+ }
+
+ private void setOptions(Method method, MappedStatement.Builder builder) {
+ Options options = method.getAnnotation(Options.class);
+ if (options != null) {
+ builder.useCache(options.useCache());
+ builder.flushCacheRequired(options.flushCache());
+ builder.resultSetType(options.resultSetType());
+ builder.statementType(options.statementType());
+ builder.fetchSize(options.fetchSize());
+ builder.timeout(options.timeout());
+ }
+ }
+
+ private Class getParameterType(Method method) {
+ Class parameterType = null;
+ Class[] parameterTypes = method.getParameterTypes();
+ if (parameterTypes.length ==1 || parameterTypes.length == 3) {
+ // Methods with 1 or 3 parameters have a value parameter
+ // (the other two params are offset/limit parameters for multiple selects)
+ parameterType = parameterTypes[0];
+ }
+ return parameterType;
+ }
+
+ private Class getReturnType(Method method) {
+ Class returnType = method.getReturnType();
+ if (returnType.isAssignableFrom(Collection.class)) {
+ TypeVariable<? extends Class<?>>[] returnTypeVariables = returnType.getTypeParameters();
+ if (returnTypeVariables.length == 1) {
+ returnType = returnTypeVariables[0].getGenericDeclaration();
+ }
+ }
+ return returnType;
+ }
+
private String getSqlAnnotationValue(Method method, Class annotationType) {
Annotation annotation = method.getAnnotation(annotationType);
if (annotation != null) {
Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/MapperParser.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/MapperParser.java?rev=746639&r1=746638&r2=746639&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/MapperParser.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/MapperParser.java Sun Feb 22 05:48:19 2009
@@ -299,7 +299,7 @@
id = applyNamespace(id);
//String sql = context.getStringBody();
- SqlSource sqlSource = new SqlSourceParser(configuration).parse(context);
+ SqlSource sqlSource = new SqlSourceParser(configuration).parse(context.getStringBody());
MappedStatement.Builder statementBuilder = new MappedStatement.Builder(configuration, id, sqlSource);
statementBuilder.resource(resource);
Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/SqlSourceParser.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/SqlSourceParser.java?rev=746639&r1=746638&r2=746639&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/SqlSourceParser.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/SqlSourceParser.java Sun Feb 22 05:48:19 2009
@@ -5,7 +5,6 @@
import org.apache.ibatis.mapping.SqlSource;
import org.apache.ibatis.type.TypeHandler;
import org.apache.ibatis.xml.GenericTokenParser;
-import org.apache.ibatis.xml.NodeletContext;
import java.util.ArrayList;
import java.util.List;
@@ -19,10 +18,10 @@
this.typeHandlerRegistry = configuration.getTypeHandlerRegistry();
}
- public SqlSource parse(NodeletContext context) {
+ public SqlSource parse(String originalSql) {
ParameterMappingTokenHandler handler = new ParameterMappingTokenHandler();
GenericTokenParser parser = new GenericTokenParser("#{", "}", handler);
- String sql = parser.parse(context.getStringBody());
+ String sql = parser.parse(originalSql);
return new InlineSqlSource(sql, handler.getParameterMappings());
}
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=746639&r1=746638&r2=746639&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 Sun Feb 22 05:48:19 2009
@@ -17,7 +17,7 @@
}
@Test
- public void shouldExecuteBoundSelectStatement() {
+ public void shouldExecuteBoundSelectListStatement() {
SqlSession session = sqlSessionFactory.openSession();
try {
BoundBlogMapper mapper = session.getMapper(BoundBlogMapper.class);
@@ -29,5 +29,18 @@
}
+ @Test
+ public void shouldExecuteBoundSelectOneStatement() {
+ SqlSession session = sqlSessionFactory.openSession();
+ try {
+ BoundBlogMapper mapper = session.getMapper(BoundBlogMapper.class);
+ Blog blogs = mapper.selectBlog(1);
+ System.out.println(blogs.getId());
+ } finally {
+ session.close();
+ }
+
+ }
+
}
Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundBlogMapper.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundBlogMapper.java?rev=746639&r1=746638&r2=746639&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundBlogMapper.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundBlogMapper.java Sun Feb 22 05:48:19 2009
@@ -27,4 +27,8 @@
})
List<Blog> selectBlogs();
+ @Select("SELECT * FROM " +
+ "blog WHERE id = #{id}")
+ Blog selectBlog(int id);
+
}