mybatis一对多插入
时间: 2024-04-01 07:29:25 浏览: 140
MyBatis是一个开源的持久层框架,它可以帮助我们简化数据库操作的编写。在MyBatis中,一对多插入是指在一个实体对象中包含多个关联对象,并将它们一起插入到数据库中。
实现一对多插入的步骤如下:
1. 首先,需要定义好实体类和关联对象的映射关系。在实体类中,使用集合类型来表示关联对象的集合。
2. 在MyBatis的映射文件中,使用<collection>标签来定义关联对象的集合属性,并指定关联对象的映射关系。
3. 在插入操作时,先插入主对象,获取主对象的主键值。
4. 遍历关联对象集合,设置每个关联对象的外键属性为主对象的主键值,并插入到数据库中。
下面是一个示例代码,演示了如何使用MyBatis实现一对多插入:
```java
// 实体类
public class Order {
private int id;
private String orderNo;
private List<OrderItem> orderItems;
// 省略getter和setter方法
}
public class OrderItem {
private int id;
private String itemName;
private int orderId;
// 省略getter和setter方法
}
// 映射文件
<!-- OrderMapper.xml -->
<mapper namespace="com.example.mapper.OrderMapper">
<resultMap id="orderResultMap" type="Order">
<id property="id" column="id"/>
<result property="orderNo" column="order_no"/>
<collection property="orderItems" ofType="OrderItem">
<id property="id" column="item_id"/>
<result property="itemName" column="item_name"/>
<result property="orderId" column="order_id"/>
</collection>
</resultMap>
<insert id="insertOrder" parameterType="Order">
<!-- 插入主对象 -->
INSERT INTO orders (order_no) VALUES (#{orderNo})
</insert>
<insert id="insertOrderItems" parameterType="Order">
<!-- 插入关联对象 -->
<foreach collection="orderItems" item="item">
INSERT INTO order_items (item_name, order_id) VALUES (#{item.itemName}, #{item.orderId})
</foreach>
</insert>
</mapper>
// DAO接口
public interface OrderMapper {
void insertOrder(Order order);
void insertOrderItems(Order order);
}
// 使用示例
public class Main {
public static void main(String[] args) {
SqlSessionFactory sqlSessionFactory = ...; // 初始化SqlSessionFactory
try (SqlSession sqlSession = sqlSessionFactory.openSession()) {
OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);
Order order = new Order();
order.setOrderNo("20210001");
List<OrderItem> orderItems = new ArrayList<>();
OrderItem item1 = new OrderItem();
item1.setItemName("Item 1");
orderItems.add(item1);
OrderItem item2 = new OrderItem();
item2.setItemName("Item 2");
orderItems.add(item2);
order.setOrderItems(orderItems);
orderMapper.insertOrder(order); // 插入主对象
orderMapper.insertOrderItems(order); // 插入关联对象
sqlSession.commit(); }
}
}
```
阅读全文