mybatis中多表联查的一对多配置代码
时间: 2023-10-29 14:15:39 浏览: 79
一对多关系在 MyBatis 中通常通过嵌套查询的方式实现。
假设我们有两个表:`order`和`order_item`,其中`order`表和`order_item`表是一对多的关系,即一个订单可以对应多个订单项。下面是一对多关系的配置代码:
1. 定义实体类
```java
public class Order {
private Long id;
private String orderNo;
private List<OrderItem> orderItems; // 一对多关系
// getter/setter 略
}
public class OrderItem {
private Long id;
private Long orderId;
private String itemName;
// getter/setter 略
}
```
2. 配置Mapper.xml文件
```xml
<!-- 根据订单号查询订单及其所有订单项 -->
<select id="selectOrderWithItemsByOrderNo" resultMap="orderWithItemsResultMap">
SELECT * FROM `order` o
LEFT JOIN order_item oi ON o.id = oi.order_id
WHERE o.order_no = #{orderNo}
</select>
<!-- 定义resultMap -->
<resultMap id="orderWithItemsResultMap" type="Order">
<id property="id" column="id"/>
<result property="orderNo" column="order_no"/>
<!-- 嵌套查询 -->
<collection property="orderItems" ofType="OrderItem">
<id property="id" column="id"/>
<result property="orderId" column="order_id"/>
<result property="itemName" column="item_name"/>
</collection>
</resultMap>
```
3. 在Mapper接口中定义方法
```java
public interface OrderMapper {
Order selectOrderWithItemsByOrderNo(String orderNo);
}
```
这样,我们就可以通过`selectOrderWithItemsByOrderNo`方法查询指定订单号的订单及其所有订单项了。调用方式如下:
```java
Order order = orderMapper.selectOrderWithItemsByOrderNo("123456");
System.out.println(order.getOrderNo());
for (OrderItem item : order.getOrderItems()) {
System.out.println(item.getItemName());
}
```
阅读全文