mybatis怎么处理一对多的批量插入
时间: 2023-06-28 22:05:23 浏览: 105
MyBatis可以通过foreach标签来处理一对多的批量插入。
假设我们有两个表:订单表(order)和订单商品表(order_item),它们之间是一对多的关系,一个订单可以对应多个订单商品。我们需要在插入一个订单的同时,批量插入它所对应的多个订单商品。
首先,我们需要在Order实体类中添加一个List<OrderItem>类型的属性,表示它所对应的多个订单商品。
```java
public class Order {
private Integer id;
private String orderNo;
private List<OrderItem> orderItems;
// getter/setter
}
```
然后,在OrderMapper.xml中,我们可以使用foreach标签来实现批量插入:
```xml
<insert id="insertOrder" parameterType="Order">
insert into order(order_no)
values (#{orderNo})
</insert>
<insert id="insertOrderItems" parameterType="Order">
<foreach collection="orderItems" item="item" separator=";">
insert into order_item(order_id, item_name, item_price)
values (#{id}, #{item.name}, #{item.price})
</foreach>
</insert>
```
其中,第一个insert标签用于插入订单信息,第二个insert标签用于批量插入订单商品信息。在第二个insert标签中,我们使用了foreach标签,遍历了Order实体类中的orderItems属性,将每个订单商品插入到数据库中。
最后,我们可以在OrderMapper.java中定义一个insertOrder方法,该方法会依次调用insertOrder和insertOrderItems两个SQL语句:
```java
public interface OrderMapper {
int insertOrder(Order order);
}
```
调用方式如下:
```java
Order order = new Order();
order.setOrderNo("20201015001");
List<OrderItem> orderItems = new ArrayList<>();
orderItems.add(new OrderItem("商品1", 100));
orderItems.add(new OrderItem("商品2", 200));
orderItems.add(new OrderItem("商品3", 300));
order.setOrderItems(orderItems);
orderMapper.insertOrder(order);
```
这样,就可以实现一对多的批量插入了。
阅读全文