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 07:30:03 UTC
svn commit: r756882 - in /ibatis/trunk/java/ibatis-3/ibatis-3-core/src:
main/java/org/apache/ibatis/binding/ main/java/org/apache/ibatis/jdbc/
test/java/org/apache/ibatis/binding/
Author: cbegin
Date: Sat Mar 21 06:30:03 2009
New Revision: 756882
URL: http://svn.apache.org/viewvc?rev=756882&view=rev
Log:
Hooked in SqlProvider and SelectBuilder
Added:
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundBlogSql.java
Modified:
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/main/java/org/apache/ibatis/binding/MapperMethod.java
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/jdbc/SelectBuilder.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/BoundBlogMapper.java
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=756882&r1=756881&r2=756882&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 06:30:03 2009
@@ -150,10 +150,9 @@
}
private void parseStatement(Method method) {
- Class annotationType = getSqlAnnotationType(method);
- Options options = method.getAnnotation(Options.class);
- if (annotationType != null) {
- final SqlSource sqlSource = getSqlAnnotationValue(method, annotationType);
+ SqlSource sqlSource = getSqlSourceFromAnnotations(method);
+ if (sqlSource != null) {
+ Options options = method.getAnnotation(Options.class);
final String mappedStatementId = method.getDeclaringClass().getName() + "." + method.getName();
boolean isSelect = method.getAnnotation(Select.class) != null;
boolean flushCache = false;
@@ -215,13 +214,17 @@
return returnType;
}
- private SqlSource getSqlAnnotationValue(Method method, Class annotationType) {
- Annotation annotation = method.getAnnotation(annotationType);
- if (annotation != null) {
+ 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);
@@ -229,14 +232,14 @@
}
SqlSourceParser parser = new SqlSourceParser(configurator.getConfiguration());
return parser.parse(sql.toString());
- } else if (provider != null) {
+ } else if (provider.type() != void.class) {
return new DynamicInlineSqlSource(configurator.getConfiguration(), provider);
}
} catch (Exception e) {
throw new RuntimeException("Could not find value method on SQL annotation. Cause: " + e, e);
}
}
- throw new BindingException("Requested value from annotation that does not exist: " + annotationType);
+ return null;
}
private Class getSqlAnnotationType(Method method) {
Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperMethod.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperMethod.java?rev=756882&r1=756881&r2=756882&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperMethod.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/binding/MapperMethod.java Sat Mar 21 06:30:03 2009
@@ -94,7 +94,7 @@
try {
config.getMappedStatement(commandName);
} catch (Exception e) {
- throw new BindingException("Invalid bound statement (not found): " + commandName);
+ throw new BindingException("Invalid bound statement (not found): " + commandName,e);
}
}
Modified: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/jdbc/SelectBuilder.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/jdbc/SelectBuilder.java?rev=756882&r1=756881&r2=756882&view=diff
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/jdbc/SelectBuilder.java (original)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/main/java/org/apache/ibatis/jdbc/SelectBuilder.java Sat Mar 21 06:30:03 2009
@@ -10,10 +10,6 @@
private static final ThreadLocal<SelectSQL> localSQL = new ThreadLocal<SelectSQL>();
- static {
- RESET();
- }
-
public static void RESET() {
localSQL.set(new SelectSQL());
}
@@ -112,7 +108,12 @@
}
private static SelectSQL sql() {
- return localSQL.get();
+ SelectSQL selectSQL = localSQL.get();
+ if (selectSQL == null) {
+ RESET();
+ selectSQL = localSQL.get();
+ }
+ return selectSQL;
}
private static class SelectSQL {
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=756882&r1=756881&r2=756882&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 Mar 21 06:30:03 2009
@@ -28,6 +28,18 @@
}
@Test
+ public void shouldExecuteBoundSelectListOfBlogsStatementUsingProvider() {
+ SqlSession session = sqlSessionFactory.openSession();
+ try {
+ BoundBlogMapper mapper = session.getMapper(BoundBlogMapper.class);
+ List<Blog> blogs = mapper.selectBlogsUsingProvider();
+ assertEquals(2, blogs.size());
+ } finally {
+ session.close();
+ }
+ }
+
+ @Test
public void shouldExecuteBoundSelectListOfBlogsAsMaps() {
SqlSession session = sqlSessionFactory.openSession();
try {
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=756882&r1=756881&r2=756882&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 06:30:03 2009
@@ -26,6 +26,12 @@
//======================================================
+ @Select(
+ sqlProvider = @SqlProvider(type = BoundBlogSql.class, method = "selectBlogsSql"))
+ List<Blog> selectBlogsUsingProvider();
+
+ //======================================================
+
@Select("SELECT * FROM post ORDER BY id")
@TypeDiscriminator(
column = "draft",
Added: ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundBlogSql.java
URL: http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundBlogSql.java?rev=756882&view=auto
==============================================================================
--- ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundBlogSql.java (added)
+++ ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/org/apache/ibatis/binding/BoundBlogSql.java Sat Mar 21 06:30:03 2009
@@ -0,0 +1,14 @@
+package org.apache.ibatis.binding;
+
+import static org.apache.ibatis.jdbc.SelectBuilder.*;
+
+public class BoundBlogSql {
+
+ public String selectBlogsSql() {
+ RESET();
+ SELECT("*");
+ FROM("BLOG");
+ return SQL();
+ }
+
+}