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/27 05:50:45 UTC
svn commit: r748391 - in /ibatis/trunk/java/ibatis-3/ibatis-3-core/src:
main/java/org/apache/ibatis/executor/resultset/
main/java/org/apache/ibatis/parser/ main/java/org/apache/ibatis/reflection/
test/java/domain/blog/ test/java/org/apache/ibatis/bindi...
Author: cbegin
Date: Fri Feb 27 04:50:44 2009
New Revision: 748391
URL: http://svn.apache.org/viewvc?rev=748391&view=rev
Log:
Fixed constructor support.
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/DefaultResultSetHandler.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/ibatis-mapper-3.dtd
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/reflection/DefaultObjectFactory.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/blog/Author.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/blog/ImmutableAuthor.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/executor/ExecutorTestHelper.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/parser/AuthorMapper.xml
Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/DefaultResultSetHandler.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/DefaultResultSetHandler.java?rev=748391&r1=748390&r2=748391&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/DefaultResultSetHandler.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/executor/resultset/DefaultResultSetHandler.java Fri Feb 27 04:50:44 2009
@@ -204,9 +204,9 @@
List<Class> argTypes = new ArrayList<Class>();
List<Object> argValues = new ArrayList<Object>();
for (ResultMapping resultMapping : rm.getConstructorResultMappings()) {
- processResult(rs, rm, resultMapping, null, constructorArgs);
+ Object value = processResult(rs, rm, resultMapping, null, constructorArgs);
argTypes.add(resultMapping.getJavaType());
- argValues.add(constructorArgs.get(resultMapping.getProperty()));
+ argValues.add(value);
}
resultObject = objectFactory.create(rm.getType(), argTypes, argValues);
} else {
@@ -259,10 +259,11 @@
private Object processSimpleResult(ResultSet rs, ResultMap rm, ResultMapping resultMapping, Object resultObject) throws SQLException {
MetaObject metaResultObject = MetaObject.forObject(resultObject);
Object value = getPrimitiveResultMappingValue(rs, resultMapping);
- if (typeHandlerRegistry.hasTypeHandler(rm.getType())) {
+ String property = resultMapping.getProperty();
+ if (typeHandlerRegistry.hasTypeHandler(rm.getType()) || property == null) {
resultObject = value;
} else if (value != null) {
- metaResultObject.setValue(resultMapping.getProperty(), value);
+ metaResultObject.setValue(property, value);
}
foundValues.set(value != null || foundValues.get());
return resultObject;
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=748391&r1=748390&r2=748391&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 Fri Feb 27 04:50:44 2009
@@ -111,7 +111,7 @@
// <constructor>
// <id column="" javaType="" jdbcType="" typeHandler=""/>
- @Nodelet("/mapper/resultMap/constructor/id")
+ @Nodelet("/mapper/resultMap/constructor/idArg")
public void resultMapConstructorIdElement(NodeletContext context) throws Exception {
buildResultMappingFromContext(context,
new ArrayList<ResultFlag>() {
@@ -124,7 +124,7 @@
// <constructor>
// <result column="" javaType="" jdbcType="" typeHandler=""/>
- @Nodelet("/mapper/resultMap/constructor/result")
+ @Nodelet("/mapper/resultMap/constructor/arg")
public void resultMapConstructorResultElement(NodeletContext context) throws Exception {
buildResultMappingFromContext(context, new ArrayList<ResultFlag>() {
{
Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/ibatis-mapper-3.dtd
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/ibatis-mapper-3.dtd?rev=748391&r1=748390&r2=748391&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/ibatis-mapper-3.dtd (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/parser/ibatis-mapper-3.dtd Fri Feb 27 04:50:44 2009
@@ -44,7 +44,7 @@
extends CDATA #IMPLIED
>
-<!ELEMENT constructor (id*,result*)>
+<!ELEMENT constructor (idArg*,arg*)>
<!ELEMENT id EMPTY>
<!ATTLIST id
@@ -64,6 +64,22 @@
typeHandler CDATA #IMPLIED
>
+<!ELEMENT idArg EMPTY>
+<!ATTLIST idArg
+javaType CDATA #IMPLIED
+column CDATA #IMPLIED
+jdbcType CDATA #IMPLIED
+typeHandler CDATA #IMPLIED
+>
+
+<!ELEMENT arg EMPTY>
+<!ATTLIST arg
+javaType CDATA #IMPLIED
+column CDATA #IMPLIED
+jdbcType CDATA #IMPLIED
+typeHandler CDATA #IMPLIED
+>
+
<!ELEMENT collection EMPTY>
<!ATTLIST collection
property CDATA #REQUIRED
Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/reflection/DefaultObjectFactory.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/reflection/DefaultObjectFactory.java?rev=748391&r1=748390&r2=748391&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/reflection/DefaultObjectFactory.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/reflection/DefaultObjectFactory.java Fri Feb 27 04:50:44 2009
@@ -35,7 +35,17 @@
return constructor.newInstance(constructorArgs.toArray(new Object[constructorArgs.size()]));
}
} catch (Exception e) {
- throw new ReflectionException("Error instantiating " + type + ". Cause: " + e, e);
+ StringBuilder argTypes = new StringBuilder();
+ for (Class argType : constructorArgTypes) {
+ argTypes.append(argType.getSimpleName());
+ argTypes.append(",");
+ }
+ StringBuilder argValues = new StringBuilder();
+ for (Object argValue : constructorArgs) {
+ argValues.append(String.valueOf(argValue));
+ argValues.append(",");
+ }
+ throw new ReflectionException("Error instantiating " + type + " with invalid types (" + argTypes + ") or values ("+argValues+"). Cause: " + e, e);
}
}
Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/blog/Author.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/blog/Author.java?rev=748391&r1=748390&r2=748391&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/blog/Author.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/blog/Author.java Fri Feb 27 04:50:44 2009
@@ -6,11 +6,11 @@
super(-1, null, null, null, null, null);
}
- public Author(int id, String username, String password, String email, String bio, Section section) {
+ public Author(Integer id, String username, String password, String email, String bio, Section section) {
super(id, username, password, email, bio, section);
}
- public Author(int id) {
+ public Author(Integer id) {
super(id, null, null, null, null, null);
}
Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/blog/ImmutableAuthor.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/blog/ImmutableAuthor.java?rev=748391&r1=748390&r2=748391&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/blog/ImmutableAuthor.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/blog/ImmutableAuthor.java Fri Feb 27 04:50:44 2009
@@ -10,7 +10,7 @@
protected String bio;
protected Section favouriteSection;
- public ImmutableAuthor(int id, String username, String password, String email, String bio, Section section) {
+ public ImmutableAuthor(Integer id, String username, String password, String email, String bio, Section section) {
this.id = id;
this.username = username;
this.password = password;
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=748391&r1=748390&r2=748391&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 Fri Feb 27 04:50:44 2009
@@ -60,5 +60,21 @@
}
}
+ @Test
+ public void shouldSelectOneAuthorByConstructor() {
+ SqlSession session = sqlSessionFactory.openSession();
+ try {
+ BoundAuthorMapper mapper = session.getMapper(BoundAuthorMapper.class);
+ Author author = mapper.selectAuthorConstructor(101);
+ assertEquals(101,author.getId());
+ assertEquals("jim",author.getUsername());
+ assertEquals("********",author.getPassword());
+ assertEquals("jim@ibatis.apache.org",author.getEmail());
+ assertEquals("", author.getBio());
+ } finally {
+ session.close();
+ }
+ }
+
}
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=748391&r1=748390&r2=748391&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 Fri Feb 27 04:50:44 2009
@@ -1,19 +1,19 @@
package org.apache.ibatis.binding;
-import static org.apache.ibatis.annotations.Annotations.*;
import domain.blog.Author;
+import domain.blog.Section;
+import static org.apache.ibatis.annotations.Annotations.*;
public interface BoundAuthorMapper {
@ConstructorArgs({
- @Arg(column = "AUTHOR_ID",javaType = int.class)
+ @Arg(column = "AUTHOR_ID", javaType = Integer.class)
})
@Results({
-// @Result(property="id",column = "AUTHOR_ID"),
- @Result(property = "username",column = "AUTHOR_USERNAME"),
- @Result(property = "password",column = "AUTHOR_PASSWORD"),
- @Result(property = "email",column = "AUTHOR_EMAIL"),
- @Result(property = "bio",column = "AUTHOR_BIO")
+ @Result(property = "username", column = "AUTHOR_USERNAME"),
+ @Result(property = "password", column = "AUTHOR_PASSWORD"),
+ @Result(property = "email", column = "AUTHOR_EMAIL"),
+ @Result(property = "bio", column = "AUTHOR_BIO")
})
@Select({
"SELECT ",
@@ -25,4 +25,24 @@
"FROM AUTHOR WHERE ID = #{id}"})
Author selectAuthor(int id);
+
+ @ConstructorArgs({
+ @Arg(column = "AUTHOR_ID", javaType = Integer.class),
+ @Arg(column = "AUTHOR_USERNAME", javaType = String.class),
+ @Arg(column = "AUTHOR_PASSWORD", javaType = String.class),
+ @Arg(column = "AUTHOR_EMAIL", javaType = String.class),
+ @Arg(column = "AUTHOR_BIO", javaType = String.class),
+ @Arg(column = "AUTHOR_SECTION", javaType = Section.class)
+ })
+ @Select({
+ "SELECT ",
+ " ID as AUTHOR_ID,",
+ " USERNAME as AUTHOR_USERNAME,",
+ " PASSWORD as AUTHOR_PASSWORD,",
+ " EMAIL as AUTHOR_EMAIL,",
+ " BIO as AUTHOR_BIO," +
+ " FAVOURITE_SECTION as AUTHOR_SECTION",
+ "FROM AUTHOR WHERE ID = #{id}"})
+ Author selectAuthorConstructor(int id);
+
}
Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/executor/ExecutorTestHelper.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/executor/ExecutorTestHelper.java?rev=748391&r1=748390&r2=748391&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/executor/ExecutorTestHelper.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/executor/ExecutorTestHelper.java Fri Feb 27 04:50:44 2009
@@ -171,7 +171,7 @@
{
add(new ResultMap.Builder(config, "defaultResultMap", Author.class, new ArrayList<ResultMapping>() {
{
- add(new ResultMapping.Builder(config, "id", "id", registry.getTypeHandler(int.class)).javaType(int.class).flags(new ArrayList<ResultFlag>() {
+ add(new ResultMapping.Builder(config, null, "id", registry.getTypeHandler(Integer.class)).javaType(Integer.class).flags(new ArrayList<ResultFlag>() {
{
add(ResultFlag.CONSTRUCTOR);
}
Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/parser/AuthorMapper.xml
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/parser/AuthorMapper.xml?rev=748391&r1=748390&r2=748391&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/parser/AuthorMapper.xml (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/parser/AuthorMapper.xml Fri Feb 27 04:50:44 2009
@@ -22,12 +22,12 @@
<resultMap id="selectImmutableAuthor" type="domain.blog.ImmutableAuthor">
<constructor>
- <id column="id" javaType="int"/>
- <result column="username" javaType="string"/>
- <result column="password" javaType="string"/>
- <result column="email" javaType="string"/>
- <result column="bio" javaType="string"/>
- <result column="favourite_section" javaType="domain.blog.Section"/>
+ <idArg column="id" javaType="int"/>
+ <arg column="username" javaType="string"/>
+ <arg column="password" javaType="string"/>
+ <arg column="email" javaType="string"/>
+ <arg column="bio" javaType="string"/>
+ <arg column="favourite_section" javaType="domain.blog.Section"/>
</constructor>
</resultMap>