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();
 
   //======================================================