mybatis嵌套插入数据
时间: 2023-11-09 20:00:16 浏览: 144
MyBatis 的嵌套插入数据可以使用一对多的方式进行操作。假设有两张表,一张是用户表,另一张是订单表,一个用户可以拥有多个订单,那么可以先在用户表中插入一条记录,再在订单表中插入多条记录,并且将订单表中每个记录的用户ID都设置为刚才插入的用户ID。
以下是一个简单的示例,假设有一个 User 实体类和一个 Order 实体类:
```
public class User {
private Integer id;
private String name;
private List<Order> orders;
// 省略 getter 和 setter
}
public class Order {
private Integer id;
private Integer userId;
private String orderNo;
// 省略 getter 和 setter
}
```
然后在 MyBatis 的 Mapper 文件中,可以使用 `insert` 和 `foreach` 标签实现嵌套插入:
```
<insert id="insertUser" parameterType="User">
insert into user(name) values(#{name})
</insert>
<insert id="insertOrder" parameterType="List">
insert into order(user_id, order_no) values
<foreach collection="list" item="order" separator=",">
(#{order.userId}, #{order.orderNo})
</foreach>
</insert>
```
在 Java 代码中,可以先插入用户,然后再插入订单,同时将订单中的用户ID设置为刚才插入的用户ID:
```
User user = new User();
user.setName("张三");
userMapper.insertUser(user);
List<Order> orders = new ArrayList<>();
Order order1 = new Order();
order1.setUserId(user.getId());
order1.setOrderNo("202101010001");
orders.add(order1);
Order order2 = new Order();
order2.setUserId(user.getId());
order2.setOrderNo("202101010002");
orders.add(order2);
orderMapper.insertOrder(orders);
```
这样就可以实现嵌套插入数据了。
阅读全文