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);
+
}