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