association collection实现一对多,多对多在mapper
时间: 2023-08-10 20:02:18 浏览: 79
`association` 和 `collection` 都是 MyBatis 提供的用于处理关联查询的标签,其中 `association` 用于处理一对一或多对一的关联关系,`collection` 用于处理一对多或多对多的关联关系。
在 Mapper XML 文件中,可以通过 `association` 和 `collection` 标签来实现对关联对象的查询。
下面是一个使用 `association` 标签实现一对一关联查询的例子:
```xml
<!-- 查询用户及其对应的订单信息 -->
<select id="getUserOrder" resultMap="userOrderMap">
SELECT *
FROM user
WHERE user_id = #{userId}
</select>
<!-- 定义 User 和 Order 的 resultMap -->
<resultMap id="userOrderMap" type="User">
<id property="id" column="user_id" />
<result property="name" column="user_name" />
<!-- 使用 association 标签关联 Order 对象 -->
<association property="order" resultMap="orderMap" />
</resultMap>
<resultMap id="orderMap" type="Order">
<id property="id" column="order_id" />
<result property="number" column="order_number" />
<result property="price" column="order_price" />
</resultMap>
```
上面的例子中,使用 `getUserOrder` 查询用户及其对应的订单信息,并使用 `userOrderMap` 定义了 User 和 Order 的 resultMap。在 `userOrderMap` 中,使用 `association` 标签关联 Order 对象,并通过 `resultMap` 属性指定了 Order 对象的 resultMap。
下面是一个使用 `collection` 标签实现一对多关联查询的例子:
```xml
<!-- 查询用户及其对应的订单列表 -->
<select id="getUserOrders" resultMap="userOrdersMap">
SELECT *
FROM user
WHERE user_id = #{userId}
</select>
<!-- 定义 User 和 Order 的 resultMap -->
<resultMap id="userOrdersMap" type="User">
<id property="id" column="user_id" />
<result property="name" column="user_name" />
<!-- 使用 collection 标签关联 Order 列表 -->
<collection property="orders" resultMap="orderMap" />
</resultMap>
<resultMap id="orderMap" type="Order">
<id property="id" column="order_id" />
<result property="number" column="order_number" />
<result property="price" column="order_price" />
</resultMap>
```
上面的例子中,使用 `getUserOrders` 查询用户及其对应的订单列表,并使用 `userOrdersMap` 定义了 User 和 Order 的 resultMap。在 `userOrdersMap` 中,使用 `collection` 标签关联 Order 列表,并通过 `resultMap` 属性指定了 Order 对象的 resultMap。
需要注意的是,在使用 `association` 和 `collection` 标签时,需要在 resultMap 中定义对应的对象和属性,并且需要在 SQL 语句中正确地查询出关联对象的数据。
阅读全文