集合的嵌套 Select 查询

首先,让我们看看如何使用嵌套 Select 查询来为博客加载文章。

  1. <resultMap id="blogResult" type="Blog">
  2. <collection property="posts" javaType="ArrayList" column="id" ofType="Post" select="selectPostsForBlog"/>
  3. </resultMap>
  4. <select id="selectBlog" resultMap="blogResult">
  5. SELECT * FROM BLOG WHERE ID = #{id}
  6. </select>
  7. <select id="selectPostsForBlog" resultType="Post">
  8. SELECT * FROM POST WHERE BLOG_ID = #{id}
  9. </select>

你可能会立刻注意到几个不同,但大部分都和我们上面学习过的关联元素非常相似。 首先,你会注意到我们使用的是集合元素。 接下来你会注意到有一个新的 “ofType” 属性。这个属性非常重要,它用来将 JavaBean(或字段)属性的类型和集合存储的类型区分开来。 所以你可以按照下面这样来阅读映射:

  1. <collection property="posts" javaType="ArrayList" column="id" ofType="Post" select="selectPostsForBlog"/>

读作: “posts 是一个存储 Post 的 ArrayList 集合”

在一般情况下,MyBatis 可以推断 javaType 属性,因此并不需要填写。所以很多时候你可以简略成:

  1. <collection property="posts" column="id" ofType="Post" select="selectPostsForBlog"/>