非常复杂的结果集合,Mapper文件可能长这个样子,(注意当我们在select语句中使用B.title as blog_title
,在resultMap的<result property="title" column="blog_title"/>
可以不设,系统会自动映射生成<result property="title" column="blog_title"/>
,但是加上更清晰,也不会增加系统负担)如下:
<!-- Very Complex Result Map -->
<resultMap id="detailedBlogResultMap" type="Blog">
<constructor>
<idArg column="blog_id" javaType="int"/>
</constructor>
<result property="title" column="blog_title"/>
<association property="author" javaType="Author">
<id property="id" column="author_id"/>
<result property="username" column="author_username"/>
<result property="password" column="author_password"/>
<result property="email" column="author_email"/>
<result property="bio" column="author_bio"/>
<result property="favouriteSection" column="author_favourite_section"/>
</association>
<collection property="posts" ofType="Post">
<id property="id" column="post_id"/>
<result property="subject" column="post_subject"/>
<!-- 由于自动映射等级为:PARTIAL,自动的映射author_id;同时注意上面对Author类已经映射过了, -->
<association property="author" javaType="Author"/>
<collection property="comments" ofType="Comment">
<id property="id" column="comment_id"/>
</collection>
<collection property="tags" ofType="Tag" >
<id property="id" column="tag_id"/>
</collection>
<discriminator javaType="int" column="draft">
<case value="1" resultType="DraftPost"/>
</discriminator>
</collection>
</resultMap>
注意上面是以Blog为中心,来找对应的作者,对应的文章,对应的评论和标签。下面,开始详细说明每一个元素,请读者一定按照单元测试的方法推进,千万不要一次性配置大量属性,以免影响学习兴趣。