MyBatisでの一対多データの追加方法はどのように実現しますか?
MyBatisでの1対多のデータ追加は、次の手順に従って実装することができます。
- データベースのテーブル構造を作成します。例えば、注文テーブルと注文アイテムテーブルのような一対多の関係を持つ2つのテーブルを作成し、注文テーブルと注文アイテムテーブルは注文IDで関連付けられます。
- エンティティクラスを作成します:注文と注文項目をそれぞれ表す2つのエンティティクラスを作成します。注文エンティティクラスでは、注文と注文項目の一対多の関係を示すList型のプロパティを定義します。
- Mapperインターフェースを作成してください:注文と注文アイテムのMapperインターフェースをそれぞれ作成し、データを追加するメソッドを定義してください。例えば、注文MapperインターフェースにはinsertOrderメソッドを定義し、注文アイテムMapperインターフェースにはinsertOrderItemメソッドを定義してください。
- Mapperのマッピングファイルを作成します。注文Mapperのマッピングファイルに、注文データを追加するためのSQLステートメントを記述し、要素を使用して自動生成された注文IDを取得します。注文アイテムMapperのマッピングファイルに、注文アイテムデータを追加するためのSQLステートメントを記述し、要素を使用して注文アイテムリストを繰り返します。
- コードを書いてデータを追加する: コードで注文マッパーインターフェースのinsertOrderメソッドを呼び出して注文データを追加し、生成された注文IDを取得します。そして、注文アイテムリストを反復処理し、各注文アイテムに注文IDを設定し、注文アイテムマッパーインタフェースのinsertOrderItemメソッドを呼び出して注文アイテムデータを追加します。
以下は簡単なサンプルコードです。
// 订单实体类
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);
}
これにより、一対多の関係のデータ追加が可能となります。