mybatis collection 一对多查询 怎么才可以只对主表进行分组 子表不允许收到影响
时间: 2024-03-10 20:44:33 浏览: 62
mybatis一对多的查询方法
5星 · 资源好评率100%
在MyBatis中进行一对多查询时,可以使用`<collection>`标签来映射子查询的结果集,并通过`select`属性指定子查询的SQL语句。如果您想要只对主表进行分组,可以使用`<select>`标签来编写主查询的SQL语句,并在子查询中使用`where`子句限制子表的查询条件,以确保子表不受主表分组的影响。以下是一个示例:
```
<select id="selectOrder" resultMap="orderResultMap">
SELECT o.*, c.customer_name
FROM orders o
JOIN customers c ON o.customer_id = c.customer_id
GROUP BY o.order_id
</select>
<resultMap id="orderResultMap" type="Order">
<id column="order_id" property="orderId"/>
<result column="order_date" property="orderDate"/>
<result column="customer_name" property="customerName"/>
<collection property="items" ofType="OrderItem">
<id column="item_id" property="itemId"/>
<result column="product_id" property="productId"/>
<result column="quantity" property="quantity"/>
<result column="price" property="price"/>
<association property="product" javaType="Product">
<id column="product_id" property="productId"/>
<result column="product_name" property="productName"/>
<result column="unit_price" property="unitPrice"/>
</association>
<select id="selectItemByOrderId" resultMap="orderItemResultMap">
SELECT *
FROM order_items
WHERE order_id = #{orderId}
</select>
</collection>
</resultMap>
```
在上述示例中,`<select>`标签中的SQL语句只对主表`orders`进行了分组,而子表`order_items`的查询条件使用`WHERE`子句进行了限制,以确保子表不受主表分组的影响。
阅读全文