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/03/21 22:06:40 UTC
svn commit: r757019 - in /ibatis/trunk/java/ibatis-3/ibatis-3-core/src:
main/java/org/apache/ibatis/annotations/
main/java/org/apache/ibatis/binding/ test/java/org/apache/ibatis/binding/
Author: cbegin
Date: Sat Mar 21 21:06:39 2009
New Revision: 757019
URL: http://svn.apache.org/viewvc?rev=757019&view=rev
Log:
Refactored SqlProvider into individual SelectProvider, InsertProvider... etc.
Modified:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/annotations/Annotations.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/DynamicInlineSqlSource.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperAnnotationParser.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/annotations/Annotations.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/annotations/Annotations.java?rev=757019&r1=757018&r2=757019&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/annotations/Annotations.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/annotations/Annotations.java Sat Mar 21 21:06:39 2009
@@ -81,34 +81,51 @@
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Insert {
- String[] value() default {};
- SqlProvider sqlProvider() default @SqlProvider(type = void.class, method = "");
+ String[] value();
}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Update {
- String[] value() default {};
- SqlProvider sqlProvider() default @SqlProvider(type = void.class, method = "");
+ String[] value();
}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Delete {
- String[] value() default {};
- SqlProvider sqlProvider() default @SqlProvider(type = void.class, method = "");
+ String[] value();
}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Select {
- String[] value() default {};
- SqlProvider sqlProvider() default @SqlProvider(type = void.class, method = "");
+ String[] value();
}
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
- public @interface SqlProvider {
+ public @interface InsertProvider {
+ Class type();
+ String method();
+ }
+
+ @Retention(RetentionPolicy.RUNTIME)
+ @Target(ElementType.METHOD)
+ public @interface UpdateProvider {
+ Class type();
+ String method();
+ }
+
+ @Retention(RetentionPolicy.RUNTIME)
+ @Target(ElementType.METHOD)
+ public @interface DeleteProvider {
+ Class type();
+ String method();
+ }
+
+ @Retention(RetentionPolicy.RUNTIME)
+ @Target(ElementType.METHOD)
+ public @interface SelectProvider {
Class type();
String method();
}
Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/DynamicInlineSqlSource.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/DynamicInlineSqlSource.java?rev=757019&r1=757018&r2=757019&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/DynamicInlineSqlSource.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/DynamicInlineSqlSource.java Sat Mar 21 21:06:39 2009
@@ -1,6 +1,5 @@
package org.apache.ibatis.binding;
-import static org.apache.ibatis.annotations.Annotations.SqlProvider;
import org.apache.ibatis.mapping.Configuration;
import org.apache.ibatis.mapping.ParameterMapping;
import org.apache.ibatis.mapping.SqlSource;
@@ -16,12 +15,11 @@
private Method providerMethod;
private boolean providerTakesParameterObject;
- public DynamicInlineSqlSource(Configuration config, SqlProvider provider) {
+ public DynamicInlineSqlSource(Configuration config, Object provider) {
try {
this.sqlSourceParser = new SqlSourceParser(config);
- this.providerType = provider.type();
- Class providerType = provider.type();
- String providerMethod = provider.method();
+ this.providerType = (Class)provider.getClass().getMethod("type").invoke(provider);
+ String providerMethod = (String)provider.getClass().getMethod("method").invoke(provider);;
for (Method m : providerType.getMethods()) {
if (providerMethod.equals(m.getName())) {
if (m.getParameterTypes().length < 2
Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperAnnotationParser.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperAnnotationParser.java?rev=757019&r1=757018&r2=757019&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperAnnotationParser.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperAnnotationParser.java Sat Mar 21 21:06:39 2009
@@ -215,35 +215,43 @@
}
private SqlSource getSqlSourceFromAnnotations(Method method) {
- Class annotationType = getSqlAnnotationType(method);
- if (annotationType != null) {
- try {
- Annotation annotation = method.getAnnotation(annotationType);
- final String[] strings = (String[]) annotation.getClass().getMethod("value").invoke(annotation);
- final SqlProvider provider = (SqlProvider) annotation.getClass().getMethod("sqlProvider").invoke(annotation);
- if (strings != null && strings.length > 0) {
- if (provider.type() != void.class) {
- throw new BindingException("You cannot supply both a static SQL and SqlProvider to method named " + method.getName());
- }
- StringBuilder sql = new StringBuilder();
- for (String fragment : strings) {
- sql.append(fragment);
- sql.append(" ");
- }
- SqlSourceParser parser = new SqlSourceParser(configurator.getConfiguration());
- return parser.parse(sql.toString());
- } else if (provider.type() != void.class) {
- return new DynamicInlineSqlSource(configurator.getConfiguration(), provider);
+ try {
+ Class sqlAnnotationType = getSqlAnnotationType(method);
+ Class sqlProviderAnnotationType = getSqlProviderAnnotationType(method);
+ if (sqlAnnotationType != null) {
+ if (sqlProviderAnnotationType != null) {
+ throw new BindingException("You cannot supply both a static SQL and SqlProvider to method named " + method.getName());
}
- } catch (Exception e) {
- throw new RuntimeException("Could not find value method on SQL annotation. Cause: " + e, e);
+ Annotation sqlAnnotation = method.getAnnotation(sqlAnnotationType);
+ final String[] strings = (String[]) sqlAnnotation.getClass().getMethod("value").invoke(sqlAnnotation);
+ StringBuilder sql = new StringBuilder();
+ for (String fragment : strings) {
+ sql.append(fragment);
+ sql.append(" ");
+ }
+ SqlSourceParser parser = new SqlSourceParser(configurator.getConfiguration());
+ return parser.parse(sql.toString());
+ } else if (sqlProviderAnnotationType != null) {
+ Annotation sqlProviderAnnotation = method.getAnnotation(sqlProviderAnnotationType);
+ return new DynamicInlineSqlSource(configurator.getConfiguration(), sqlProviderAnnotation);
}
+ return null;
+ } catch (Exception e) {
+ throw new RuntimeException("Could not find value method on SQL annotation. Cause: " + e, e);
}
- return null;
}
private Class getSqlAnnotationType(Method method) {
Class[] types = {Select.class, Insert.class, Update.class, Delete.class};
+ return chooseAnnotationType(method, types);
+ }
+
+ private Class getSqlProviderAnnotationType(Method method) {
+ Class[] types = {SelectProvider.class, InsertProvider.class, UpdateProvider.class, DeleteProvider.class};
+ return chooseAnnotationType(method, types);
+ }
+
+ private Class chooseAnnotationType(Method method, Class[] types) {
for (Class type : types) {
Annotation annotation = method.getAnnotation(type);
if (annotation != null) {
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=757019&r1=757018&r2=757019&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 Sat Mar 21 21:06:39 2009
@@ -26,8 +26,7 @@
//======================================================
- @Select(
- sqlProvider = @SqlProvider(type = BoundBlogSql.class, method = "selectBlogsSql"))
+ @SelectProvider(type = BoundBlogSql.class, method = "selectBlogsSql")
List<Blog> selectBlogsUsingProvider();
//======================================================