mybatis 一对两个多查询 ,代码示例
时间: 2023-06-13 08:04:06 浏览: 90
mybatis 一对一、一对多和多对多查询实例代码
在 MyBatis 中,一对多查询可以通过嵌套查询实现。以下是一个示例:
假设我们有两个实体类,一个是 Order(订单),另一个是 OrderItem(订单项),一个订单可以对应多个订单项。我们需要查询订单及其对应的所有订单项。
首先,在 OrderMapper.xml 中,我们定义一个查询语句,用来查询订单及其对应的所有订单项:
```xml
<!-- 查询订单及其对应的所有订单项 -->
<select id="getOrderWithItems" resultMap="orderMap">
SELECT *
FROM orders o
LEFT JOIN order_items oi ON o.id = oi.order_id
WHERE o.id = #{orderId}
</select>
<!-- 定义 result map -->
<resultMap id="orderMap" type="Order">
<id property="id" column="id" />
<result property="orderNo" column="order_no" />
<result property="totalAmount" column="total_amount" />
<result property="createTime" column="create_time" />
<collection property="orderItems" ofType="OrderItem">
<id property="id" column="item_id" />
<result property="productId" column="product_id" />
<result property="productName" column="product_name" />
<result property="productPrice" column="product_price" />
<result property="quantity" column="quantity" />
</collection>
</resultMap>
```
在上面的查询语句中,我们使用了左连接(LEFT JOIN)来查询订单及其对应的所有订单项。同时,我们使用了 result map 来将查询结果映射到 Order 对象中,并将订单项映射到 Order 对象的一个集合属性 orderItems 中。
接下来,在 OrderMapper 接口中定义一个方法,用来调用上面的查询语句:
```java
public interface OrderMapper {
Order getOrderWithItems(int orderId);
}
```
在实现类中,我们调用上面定义的查询语句:
```java
public class OrderMapperImpl implements OrderMapper {
@Override
public Order getOrderWithItems(int orderId) {
return sqlSession.selectOne("getOrderWithItems", orderId);
}
}
```
这样,我们就完成了一对多查询。在调用 getOrderWithItems 方法时,MyBatis 将会查询订单及其对应的所有订单项,并将结果映射到 Order 对象中。
阅读全文