How to implement adding multiple data in MyBatis?
To achieve the insertion of one-to-many data in MyBatis, you can follow these steps:
- Create database table structure: Create two tables with a one-to-many relationship, for example, an order table and an order item table, with the order table and order item table linked by order ID.
- Create entity classes: Create two entity classes, one representing orders and the other representing order items. In the order entity class, define a property of type List, indicating a one-to-many relationship between orders and order items.
- Create Mapper interfaces: create separate Mapper interfaces for orders and order items, and define methods for adding data in each interface. For example, in the Order Mapper interface, define an insertOrder method, and in the Order Item Mapper interface, define an insertOrderItem method.
- Create Mapper mapping files: In the order Mapper mapping file, write the SQL statement to add order data and use elements to retrieve the auto-generated order ID. In the order item Mapper mapping file, write the SQL statement to add order item data and use elements to iterate through the order item list.
- Write code to add data: call the insertOrder method of the OrderMapper interface to add order data in the code, and get the generated order ID. Next, iterate through the order item list, set the order ID for each order item, and call the insertOrderItem method of the OrderItemMapper interface to add order item data.
Here is a simple example code:
// 订单实体类
public class Order {
private Integer id;
private List<OrderItem> orderItems;
// getter和setter方法
}
// 订单项实体类
public class OrderItem {
private Integer id;
private Integer orderId;
private String productName;
// getter和setter方法
}
// 订单Mapper接口
public interface OrderMapper {
void insertOrder(Order order);
}
// 订单项Mapper接口
public interface OrderItemMapper {
void insertOrderItem(OrderItem orderItem);
}
<!-- 订单Mapper映射文件 -->
<mapper namespace="com.example.mapper.OrderMapper">
<insert id="insertOrder" parameterType="com.example.entity.Order">
<selectKey keyProperty="id" resultType="java.lang.Integer" order="AFTER">
SELECT LAST_INSERT_ID()
</selectKey>
INSERT INTO `order` (id) VALUES (#{id})
</insert>
</mapper>
<!-- 订单项Mapper映射文件 -->
<mapper namespace="com.example.mapper.OrderItemMapper">
<insert id="insertOrderItem" parameterType="com.example.entity.OrderItem">
INSERT INTO order_item (order_id, product_name) VALUES (#{orderId}, #{productName})
</insert>
</mapper>
// 添加数据的代码
OrderMapper orderMapper = sqlSession.getMapper(OrderMapper.class);
OrderItemMapper orderItemMapper = sqlSession.getMapper(OrderItemMapper.class);
Order order = new Order();
List<OrderItem> orderItems = new ArrayList<>();
OrderItem orderItem1 = new OrderItem();
orderItem1.setProductName("Product 1");
orderItems.add(orderItem1);
OrderItem orderItem2 = new OrderItem();
orderItem2.setProductName("Product 2");
orderItems.add(orderItem2);
order.setOrderItems(orderItems);
orderMapper.insertOrder(order);
Integer orderId = order.getId();
for (OrderItem orderItem : orderItems) {
orderItem.setOrderId(orderId);
orderItemMapper.insertOrderItem(orderItem);
}
This allows for the addition of data in a one-to-many relationship.