mybatis一对多表
时间: 2023-11-09 13:03:41 浏览: 87
mybatis中一对多表的实现可以通过使用嵌套查询或者使用resultMap来实现。其中,使用嵌套查询需要在mapper.xml中编写两个查询语句,一个查询主表信息,另一个查询从表信息,并在主表查询语句中使用嵌套查询从表查询语句。而使用resultMap则需要在mapper.xml中定义resultMap,通过association和collection标签来关联主表和从表的信息。
例如,假设有一个订单表和订单详情表,一个订单可以对应多个订单详情,可以使用如下的mapper.xml配置来实现一对多查询:
```
<!-- 使用嵌套查询 -->
<select id="getOrderWithDetails" resultMap="orderWithDetails">
SELECT *
FROM orders
WHERE order_id = #{orderId}
</select>
<resultMap id="orderWithDetails" type="Order">
<id property="id" column="order_id"/>
<result property="orderNo" column="order_no"/>
<result property="createTime" column="create_time"/>
<collection property="details" ofType="OrderDetail">
<id property="id" column="detail_id"/>
<result property="productId" column="product_id"/>
<result property="quantity" column="quantity"/>
</collection>
</resultMap>
<!-- 使用resultMap -->
<select id="getOrderWithDetails" resultMap="orderWithDetails">
SELECT *
FROM orders o
LEFT JOIN order_details d ON o.order_id = d.order_id
WHERE o.order_id = #{orderId}
</select>
<resultMap id="orderWithDetails" type="Order">
<id property="id" column="order_id"/>
<result property="orderNo" column="order_no"/>
<result property="createTime" column="create_time"/>
<collection property="details" ofType="OrderDetail">
<id property="id" column="detail_id"/>
<result property="productId" column="product_id"/>
<result property="quantity" column="quantity"/>
</collection>
</resultMap>
```
阅读全文