目前有1个Blog类,里面除了自己的字段还有一个存储Post类的集合(一个博客有多篇文章),我使用嵌套查询给Blog类中的集合赋值没有问题,但是换成嵌套结果之后,输出的结果就不一样了,我把代码贴上来。
public class Blog {
private int id;
private String name;
private String pwd;
private Author author;
private List<Post> posts;
public class Post {
private int id;
private String post_message;
private int blog_id;
这个是博客实体类,里面有个存放文章的List集合
<mapper namespace="org.mybatis.example.BlogMapper">
<resultMap type="Blog" id="blogResultMap">
<id property="id" column="id"/>
<result property="name" column="name"/>
<collection property="posts" javaType="ArrayList" ofType="Post" resultMap="postResultMap"/>
</resultMap>
<resultMap type="Post" id="postResultMap">
<id property="id" column="id"/>
<result property="post_message" column="post_message"/>
<result property="blog_id" column="blog_id"/>
</resultMap>
<select id="selectAll" parameterType="int" resultMap="blogResultMap">
select p.id,p.post_message,p.blog_id,b.id,b.name,b.pwd
from blog b left outer join post p on b.id = p.blog_id where b.id = #{id}
</select>
现在的问题是,使用这个select查询出的信息是3条,数据库中Blog类的信息有1个,Post的信息由3个且都有外键连接到Blog,使用嵌套查询的结果是Blog查询出1个,集合里面的信息是3个。但是换成嵌套结果后,查询到的信息就变成了,Blog有3条且都一样,Post的信息需要从List<Blog>里面一条一条取出,这个该怎么改?
------解决思路----------------------
你只能用嵌套查询,mybatis内部的赋值是根据你查询出来的结果做的,你这个查询语句就是产生了3条一样的Blog数据对应不一样的Post数据,mybatis就认为他返回了一个集合.每条都是一样的blog不一样的Post