在MyBatis 3中,集合映射(Collection Mapping)用于描述一对多的关联关系,其中一个实体关联到多个子实体。集合映射可以通过 <collection> 元素进行配置。

以下是一个简单的集合映射的例子:
<resultMap id="userResultMap" type="com.example.model.User">
    <id column="id" property="id"/>
    <result column="username" property="username"/>
    <result column="password" property="password"/>

    <!-- 配置一对多的关联 -->
    <collection property="posts" ofType="com.example.model.Post" resultMap="postResultMap"/>
</resultMap>

<resultMap id="postResultMap" type="com.example.model.Post">
    <id column="post_id" property="id"/>
    <result column="title" property="title"/>
    <result column="content" property="content"/>
</resultMap>

在这个例子中,userResultMap 中通过 <collection> 元素配置了一对多的关联关系,关联的目标是 postResultMap。

  •  property 属性指定了关联关系映射到 User 对象的哪个属性上,这里是 posts。


  •  ofType 属性指定了集合中元素的类型,这里是 com.example.model.Post。


  •  resultMap 属性指定了关联对象的结果映射规则,这里是 postResultMap。


这样配置后,当查询 User 对象时,MyBatis会自动查询关联的多个 Post 对象并将其映射到 User 对象的 posts 属性上。

嵌套查询

在集合映射中,可以使用嵌套查询来完成关联对象的加载。以下是一个使用嵌套查询的例子:
<resultMap id="userResultMap" type="com.example.model.User">
    <id column="id" property="id"/>
    <result column="username" property="username"/>
    <result column="password" property="password"/>

    <!-- 配置嵌套查询的一对多的关联 -->
    <collection property="posts" ofType="com.example.model.Post" resultMap="postResultMap">
        <id column="user_id" property="userId"/>
    </collection>
</resultMap>

<resultMap id="postResultMap" type="com.example.model.Post">
    <id column="post_id" property="id"/>
    <result column="title" property="title"/>
    <result column="content" property="content"/>
</resultMap>

在这个例子中,userResultMap 中通过 <collection> 元素配置了嵌套查询的一对多的关联关系。

  •  <id> 元素用于配置关联对象查询的条件,这里表示查询条件是 Post 对象的 userId 列与 User 对象的 id 列的匹配。


通过嵌套查询,可以将关联对象的查询逻辑嵌套到主查询中,避免了多次查询数据库的开销。

这是一对多关联的基本配置方式,MyBatis还支持一对一关联和多对多关联,具体配置方式可以参考官方文档:[MyBatis - 关联](https://mybatis.org/mybatis-3/zh/sqlmap-xml.html#Collection)。


转载请注明出处:http://www.zyzy.cn/article/detail/7013/MyBatis