MyBatisでの一対多データの追加方法はどのように実現しますか?

MyBatisでの1対多のデータ追加は、次の手順に従って実装することができます。

  1. データベースのテーブル構造を作成します。例えば、注文テーブルと注文アイテムテーブルのような一対多の関係を持つ2つのテーブルを作成し、注文テーブルと注文アイテムテーブルは注文IDで関連付けられます。
  2. エンティティクラスを作成します:注文と注文項目をそれぞれ表す2つのエンティティクラスを作成します。注文エンティティクラスでは、注文と注文項目の一対多の関係を示すList型のプロパティを定義します。
  3. Mapperインターフェースを作成してください:注文と注文アイテムのMapperインターフェースをそれぞれ作成し、データを追加するメソッドを定義してください。例えば、注文MapperインターフェースにはinsertOrderメソッドを定義し、注文アイテムMapperインターフェースにはinsertOrderItemメソッドを定義してください。
  4. Mapperのマッピングファイルを作成します。注文Mapperのマッピングファイルに、注文データを追加するためのSQLステートメントを記述し、要素を使用して自動生成された注文IDを取得します。注文アイテムMapperのマッピングファイルに、注文アイテムデータを追加するためのSQLステートメントを記述し、要素を使用して注文アイテムリストを繰り返します。
  5. コードを書いてデータを追加する: コードで注文マッパーインターフェースの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);
}

これにより、一対多の関係のデータ追加が可能となります。

bannerAds