mybatis怎么查询一对多关系
时间: 2023-11-30 14:38:19 浏览: 99
在 MyBatis 中查询一对多关系,可以使用嵌套查询或者使用 MyBatis 提供的关联查询功能。其中,嵌套查询是指在主查询中嵌套子查询,通过子查询查询出关联表中的数据,然后将其映射到主查询的结果集中。而关联查询则是通过 MyBatis 提供的 association 和 collection 标签来实现,其中 association 标签用于一对一关系的查询,collection 标签用于一对多关系的查询。
下面是使用 collection 标签查询一对多关系的示例:
```
<!-- 定义主查询 -->
<select id="selectOrder" resultMap="orderResultMap">
SELECT * FROM orders WHERE order_id = #{orderId}
</select>
<!-- 定义结果集映射 -->
<resultMap id="orderResultMap" type="Order">
<id property="id" column="order_id"/>
<result property="orderNo" column="order_no"/>
<result property="createTime" column="create_time"/>
<!-- 使用 collection 标签定义一对多关系 -->
<collection property="items" ofType="OrderItem" resultMap="itemResultMap"/>
</resultMap>
<!-- 定义 OrderItem 的结果集映射 -->
<resultMap id="itemResultMap" type="OrderItem">
<id property="id" column="item_id"/>
<result property="itemName" column="item_name"/>
<result property="price" column="price"/>
</resultMap>
```
在上面的示例中,我们定义了一个主查询 selectOrder,它查询出订单表中指定订单号的订单信息。同时,我们使用了 resultMap 标签定义了一个结果集映射 orderResultMap,其中使用了 collection 标签来定义了一对多关系,将订单表和订单明细表关联起来。在 collection 标签中,我们指定了 property 属性为 items,表示将查询出的订单明细数据映射到 Order 对象的 items 属性中。同时,我们还定义了一个 OrderItem 的结果集映射 itemResultMap,用于将查询出的订单明细数据映射到 OrderItem 对象中。
阅读全文