在MyBatis 3中,关联(Association)是一种结果映射的方式,用于描述不同实体之间的关联关系。关联可以通过 <association> 元素来配置,它通常用于配置两个实体之间的一对一关系。

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

    <!-- 配置一对一的关联 -->
    <association property="profile" resultMap="profileResultMap"/>
</resultMap>

<resultMap id="profileResultMap" type="com.example.model.Profile">
    <id column="profile_id" property="id"/>
    <result column="email" property="email"/>
    <result column="phone" property="phone"/>
</resultMap>

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

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


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


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

嵌套查询

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

    <!-- 配置嵌套查询的关联 -->
    <association property="profile" resultMap="profileResultMap">
        <id column="user_id" property="id"/>
    </association>
</resultMap>

<resultMap id="profileResultMap" type="com.example.model.Profile">
    <id column="profile_id" property="id"/>
    <result column="email" property="email"/>
    <result column="phone" property="phone"/>
</resultMap>

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

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


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

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


转载请注明出处:http://www.pingtaimeng.com/article/detail/7012/MyBatis