SQL中resultMap中的 <collection> 如何使用 举例
时间: 2024-02-01 16:14:31 浏览: 81
在 MyBatis 中,<collection> 标签用于处理一对多的情况,即一个主表记录对应多个从表记录。下面是一个简单的示例:
假设有两个表:订单表(order)和订单详情表(order_item),每个订单可以对应多个订单详情。其中,订单表中包含主键字段 id 和其他字段,订单详情表中包含外键字段 order_id、主键字段 item_id 和其他字段。
在 MyBatis 中,查询订单表的同时可以通过 <collection> 标签查询该订单对应的所有订单详情记录。示例代码如下:
```xml
<!-- 定义结果集映射 -->
<resultMap id="orderMap" type="com.example.Order">
<id column="id" property="id" />
<result column="name" property="name" />
<!-- 处理一对多关系 -->
<collection property="items" ofType="com.example.OrderItem">
<id column="item_id" property="id" />
<result column="item_name" property="name" />
<result column="item_price" property="price" />
</collection>
</resultMap>
<!-- 查询订单及其详情记录 -->
<select id="selectOrder" resultMap="orderMap">
SELECT o.id, o.name, i.item_id, i.item_name, i.item_price
FROM `order` o
LEFT JOIN order_item i ON o.id = i.order_id
WHERE o.id = #{orderId}
</select>
```
在上面的代码中,<collection> 标签定义了一个 items 属性,用于存储该订单对应的所有订单详情记录。其中,ofType 属性指定了订单详情记录的类型,子标签 <id> 和 <result> 分别用于设置订单详情记录的主键和其他属性。
当查询到一个订单记录时,MyBatis 会通过 <collection> 标签查询该订单对应的所有订单详情记录,并将其存储到 items 属性中。这样,在 Java 代码中就可以直接访问该订单对应的所有订单详情记录了。
阅读全文