Author: cbegin
Date: Sun Mar  1 05:20:45 2009
New Revision: 748959

URL: http://svn.apache.org/viewvc?rev=748959&view=rev
Log:
got a start on the recursive join mapping.  Java annotations suck.

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/test/java/domain/blog/Author.java
    ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/blog/Blog.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=748959&r1=748958&r2=748959&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
 Sun Mar  1 05:20:45 2009
@@ -1,6 +1,7 @@
 package org.apache.ibatis.binding;
 
 import static org.apache.ibatis.annotations.Annotations.*;
+import org.apache.ibatis.annotations.Annotations;
 import org.apache.ibatis.mapping.Configuration;
 import org.apache.ibatis.mapping.ResultFlag;
 import org.apache.ibatis.mapping.ResultSetType;
@@ -17,7 +18,6 @@
 
   private MapperConfigurator configurator;
   private Class type;
-  private boolean hasResults;
 
   public MapperAnnotationParser(Configuration config, Class type) {
     String resource = type.getName().replace('.', '/') + ".java (best guess)";
@@ -53,7 +53,7 @@
   private void parseResultsAndConstructorArgs(Method method) {
     ConstructorArgs args = method.getAnnotation(ConstructorArgs.class);
     Results results = method.getAnnotation(Results.class);
-    if (results != null || args != null) {
+    if (hasResults(method)) {
       String resultMapId = type.getName() + "." + method.getName();
       configurator.resultMapStart(resultMapId, getReturnType(method), null);
       applyConstructorArgs(args);
@@ -62,6 +62,12 @@
     }
   }
 
+  private boolean hasResults(Method method) {
+    ConstructorArgs args = method.getAnnotation(ConstructorArgs.class);
+    Results results = method.getAnnotation(Results.class);
+    return results != null || args != null;
+  }
+
   private void parseStatement(Method method) {
     Class annotationType = getSqlAnnotationType(method);
     Options options = method.getAnnotation(Options.class);
@@ -90,7 +96,7 @@
           timeout,
           null,         // ParameterMapID
           getParameterType(method),
-          hasResults ? mappedStatementId : null,         // ResultMapID
+          hasResults(method) ? mappedStatementId : null,         // ResultMapID
           getReturnType(method),
           resultSetType,
           isSelect,                  // IsSelectStatement
@@ -172,7 +178,6 @@
             result.typeHandler() == void.class ? null : result.typeHandler(),
             flags);
       }
-      hasResults = true;
     }
   }
 
@@ -192,7 +197,6 @@
             arg.typeHandler() == void.class ? null : arg.typeHandler(),
             flags);
       }
-      hasResults = true;
     }
   }
 

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/blog/Author.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/blog/Author.java?rev=748959&r1=748958&r2=748959&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/blog/Author.java 
(original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/blog/Author.java 
Sun Mar  1 05:20:45 2009
@@ -38,4 +38,7 @@
     this.favouriteSection = favouriteSection;
   }
 
+  public String toString() {
+    return "Author : " + id + " : " + username + " : " + email;
+  }
 }
\ No newline at end of file

Modified: 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/blog/Blog.java
URL: 
http://svn.apache.org/viewvc/ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/blog/Blog.java?rev=748959&r1=748958&r2=748959&view=diff
==============================================================================
--- 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/blog/Blog.java 
(original)
+++ 
ibatis/trunk/java/ibatis-3/ibatis-3-core/src/test/java/domain/blog/Blog.java 
Sun Mar  1 05:20:45 2009
@@ -40,4 +40,8 @@
   public void setPosts(List<Post> posts) {
     this.posts = posts;
   }
+
+  public String toString() {
+    return "Blog: " + id + " : " + title + " (" + author + ")";
+  }
 }

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=748959&r1=748958&r2=748959&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
 Sun Mar  1 05:20:45 2009
@@ -37,7 +37,20 @@
       BoundBlogMapper mapper = session.getMapper(BoundBlogMapper.class);
       List<Map> blogs = mapper.selectBlogsAsMaps();
       assertEquals(2,blogs.size());
-      System.out.println(blogs); 
+    } finally {
+      session.close();
+    }
+  }
+
+  @Test
+  public void shouldSelectBlogWithAssociations() {
+    SqlSession session = sqlSessionFactory.openSession();
+    try {
+      BoundBlogMapper mapper = session.getMapper(BoundBlogMapper.class);
+      List<Blog> blogs = mapper.selectBlogWithAssociations(1);
+      for(Blog blog : blogs) {
+        System.out.println(blog);
+      }
     } finally {
       session.close();
     }

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=748959&r1=748958&r2=748959&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
 Sun Mar  1 05:20:45 2009
@@ -28,4 +28,44 @@
       "blog WHERE id = #{id}")
   Map selectBlogAsMap(Map params);
 
+  @Results({
+      @Result(id=true,property="id",column="blog_id"),
+      @Result(property="title",column="blog_title"),
+      @Result(property="author.id",column="author_id"),
+      @Result(property="author.username",column="author_username"),
+      @Result(property="author.email",column="author_email")
+      })
+  @Select("select" +
+      "    B.id as blog_id," +
+      "    B.title as blog_title," +
+      "    B.author_id as blog_author_id," +
+      "    A.id as author_id," +
+      "    A.username as author_username," +
+      "    A.password as author_password," +
+      "    A.email as author_email," +
+      "    A.bio as author_bio," +
+      "    A.favourite_section as author_favourite_section," +
+      "    P.id as post_id," +
+      "    P.blog_id as post_blog_id," +
+      "    P.author_id as post_author_id," +
+      "    P.created_on as post_created_on," +
+      "    P.section as post_section," +
+      "    P.subject as post_subject," +
+      "    P.draft as draft," +
+      "    P.body as post_body," +
+      "    C.id as comment_id," +
+      "    C.post_id as comment_post_id," +
+      "    C.name as comment_name," +
+      "    C.comment as comment_text," +
+      "    T.id as tag_id," +
+      "    T.name as tag_name" +
+      "    from Blog B" +
+      "    left outer join Author A on B.author_id = A.id" +
+      "    left outer join Post P on B.id = P.blog_id" +
+      "    left outer join Comment C on P.id = C.post_id" +
+      "    left outer join Post_Tag PT on PT.post_id = P.id" +
+      "    left outer join Tag T on PT.tag_id = T.id" +
+      "    where B.id = #{id}")
+  List<Blog> selectBlogWithAssociations(int id);
+
 }


Reply via email to