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