Author: cbegin
Date: Sat May 16 18:30:03 2009
New Revision: 775505

URL: http://svn.apache.org/viewvc?rev=775505&view=rev
Log:
Fixed parameter typing issue, code could be refactored to be cleaner.

Added:
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundAuthorMapper.xml
Modified:
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/SqlSourceParser.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/annotation/MapperAnnotationParser.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/annotation/ProviderSqlSource.java
    
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/DynamicSqlSource.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

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/SqlSourceParser.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/SqlSourceParser.java?rev=775505&r1=775504&r2=775505&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/SqlSourceParser.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/SqlSourceParser.java
 Sat May 16 18:30:03 2009
@@ -3,6 +3,7 @@
 import org.apache.ibatis.mapping.*;
 import org.apache.ibatis.type.TypeHandler;
 import org.apache.ibatis.parsing.GenericTokenParser;
+import org.apache.ibatis.reflection.MetaClass;
 
 import java.util.*;
 
@@ -12,8 +13,8 @@
     super(configuration);
   }
 
-  public SqlSource parse(String originalSql) {
-    ParameterMappingTokenHandler handler = new 
ParameterMappingTokenHandler(configuration);
+  public SqlSource parse(String originalSql, Class parameterType) {
+    ParameterMappingTokenHandler handler = new 
ParameterMappingTokenHandler(configuration, parameterType);
     GenericTokenParser parser = new GenericTokenParser("#{", "}", handler);
     String sql = parser.parse(originalSql);
     return new StaticSqlSource(sql, handler.getParameterMappings());
@@ -22,9 +23,11 @@
   private static class ParameterMappingTokenHandler extends BaseParser 
implements GenericTokenParser.TokenHandler {
 
     private List<ParameterMapping> parameterMappings = new 
ArrayList<ParameterMapping>();
+    private Class parameterType;
 
-    public ParameterMappingTokenHandler(Configuration configuration) {
+    public ParameterMappingTokenHandler(Configuration configuration,Class 
parameterType) {
       super(configuration);
+      this.parameterType = parameterType;
     }
 
     public List<ParameterMapping> getParameterMappings() {
@@ -39,7 +42,15 @@
     private ParameterMapping buildParameterMapping(String content) {
       StringTokenizer parameterMappingParts = new StringTokenizer(content, ", 
");
       String property = parameterMappingParts.nextToken();
-      ParameterMapping.Builder builder = new 
ParameterMapping.Builder(configuration, property, Object.class);
+      Class propertyType;
+      if (typeHandlerRegistry.hasTypeHandler(parameterType)) {
+        propertyType = parameterType;
+      } else if (Map.class.isAssignableFrom(parameterType)) {
+        propertyType = Object.class;
+      } else {
+        propertyType = 
MetaClass.forClass(parameterType).getGetterType(property);
+      }
+      ParameterMapping.Builder builder = new 
ParameterMapping.Builder(configuration, property, propertyType);
       while (parameterMappingParts.hasMoreTokens()) {
         String attribute = parameterMappingParts.nextToken();
         StringTokenizer attributeParts = new StringTokenizer(attribute, "=");

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/annotation/MapperAnnotationParser.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/annotation/MapperAnnotationParser.java?rev=775505&r1=775504&r2=775505&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/annotation/MapperAnnotationParser.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/annotation/MapperAnnotationParser.java
 Sat May 16 18:30:03 2009
@@ -251,7 +251,7 @@
           sql.append(" ");
         }
         SqlSourceParser parser = new 
SqlSourceParser(sequentialBuilder.getConfiguration());
-        return parser.parse(sql.toString());
+        return parser.parse(sql.toString(), getParameterType(method));
       } else if (sqlProviderAnnotationType != null) {
         Annotation sqlProviderAnnotation = 
method.getAnnotation(sqlProviderAnnotationType);
         return new ProviderSqlSource(sequentialBuilder.getConfiguration(), 
sqlProviderAnnotation);

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/annotation/ProviderSqlSource.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/annotation/ProviderSqlSource.java?rev=775505&r1=775504&r2=775505&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/annotation/ProviderSqlSource.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/annotation/ProviderSqlSource.java
 Sat May 16 18:30:03 2009
@@ -45,7 +45,8 @@
       } else {
         sql = (String) providerMethod.invoke(providerType.newInstance());
       }
-      return sqlSourceParser.parse(sql);
+      Class parameterType = parameterObject == null ? Object.class : 
parameterObject.getClass();
+      return sqlSourceParser.parse(sql, parameterType);
     } catch (Exception e) {
       throw new RuntimeException("Error invoking SqlProvider method ("
           + providerType.getName() + "." + providerMethod.getName()

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/DynamicSqlSource.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/DynamicSqlSource.java?rev=775505&r1=775504&r2=775505&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/DynamicSqlSource.java
 (original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/builder/xml/dynamic/DynamicSqlSource.java
 Sat May 16 18:30:03 2009
@@ -17,7 +17,8 @@
     DynamicContext context = new DynamicContext(parameterObject);
     rootSqlNode.apply(context);
     SqlSourceParser sqlSourceParser = new SqlSourceParser(configuration);
-    SqlSource sqlSource = sqlSourceParser.parse(context.getSql());
+    Class parameterType = parameterObject == null ? Object.class : 
parameterObject.getClass();
+    SqlSource sqlSource = sqlSourceParser.parse(context.getSql(), 
parameterType);
     return sqlSource.getBoundSql(parameterObject);
   }
 

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=775505&r1=775504&r2=775505&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
 Sat May 16 18:30:03 2009
@@ -16,6 +16,20 @@
   }
 
   @Test
+  public void shouldInsertAuthorWithSelectKey() {
+    SqlSession session = sqlSessionFactory.openSession();
+    try {
+      BoundAuthorMapper mapper = session.getMapper(BoundAuthorMapper.class);
+      Author author = new 
Author(-1,"cbegin","******","[email protected]","N/A",Section.NEWS);
+      int rows = mapper.insertAuthor(author);
+      assertEquals(1,rows);
+      session.rollback();
+    } finally {
+      session.close();
+    }
+  }
+
+  @Test
   public void shouldSelectRandom() {
     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=775505&r1=775504&r2=775505&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
 Sat May 16 18:30:03 2009
@@ -7,6 +7,10 @@
 
   //======================================================
 
+  int insertAuthor(Author author);
+
+  //======================================================
+
   @ConstructorArgs({
     @Arg(column = "AUTHOR_ID", javaType = Integer.class)
       })

Added: 
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=775505&view=auto
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundAuthorMapper.xml
 (added)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundAuthorMapper.xml
 Sat May 16 18:30:03 2009
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8" ?>
+
+<!DOCTYPE mapper
+    PUBLIC "-//ibatis.apache.org//DTD Mapper 3.0//EN"
+    "http://ibatis.apache.org/dtd/ibatis-3-mapper.dtd";>
+
+<mapper>
+
+  <insert id="insertAuthor" parameterType="domain.blog.Author">
+<!--
+    <selectKey keyProperty="id" resultType="int" >
+      select CAST(RANDOM()*1000000 as INTEGER) a from SYSIBM.SYSDUMMY1
+    </selectKey>
+-->
+    insert into Author (id,username,password,email,bio,favourite_section)
+    values(
+      #{id}, #{username}, #{password}, #{email}, #{bio}, 
#{favouriteSection,jdbcType=VARCHAR}
+    )
+  </insert>
+
+
+
+</mapper>
\ No newline at end of file


Reply via email to