MyBatisの一対多マッピングを設定する方法を教えてください
MyBatisでは、resultMap要素を使用して、1対多の関係のマップ設定がサポートされています。以下に設定例を示します:
まず、mapper.xmlでone-to-manyのリレーションシップをマッピングするためのresultMap要素を定義する。resultMap要素内では、関連する複数のオブジェクトを定義するためにcollection要素を使用できる。
<resultMap id="orderItemResultMap" type="Order">
<id property="id" column="order_id"/>
<result property="total" column="order_total"/>
<result property="items" column="order_id" javaType="java.util.List" ofType="OrderItem"
select="selectOrderItemsByOrderId"/>
</resultMap>
<resultMap id="orderItemResultMap" type="OrderItem">
<id property="id" column="item_id"/>
<result property="name" column="item_name"/>
<result property="price" column="item_price"/>
</resultMap>
上記のサンプルでは、OrderオブジェクトとOrderItemオブジェクトをマッピングする2つの resultMap 要素を定義しました。
次に、mapper.xmlファイルにselect要素を定義し、注文とその注文に対応する注文アイテムを取得するクエリを作成します。
<select id="selectOrderItemsByOrderId" resultMap="orderItemResultMap">
SELECT *
FROM order_items
WHERE order_id = #{orderId}
</select>
上の例では、select要素によってクエリを定義し、orderIdパラメータによって注文項目を検索している。
最後に、マッパーインターフェースで、クエリ操作を実行するメソッドを定義します。
public interface OrderMapper {
Order selectOrderById(int id);
}
上のサンプルでは、selectOrderByIdという、注文とそれが持つ注文商品を照会するためのメソッドを定義しています。
上記の設定とコードにより、MyBatisの一対多のマッピング設定が実現します。注文を照会すると、MyBatisは自動的に注文項目を照会し、注文オブジェクトのitems属性に関連付けます。