MyBatisでの一対多のマッピング関係の実装方法は何ですか?
MyBatisにおいて、1対多のマッピング関係を実装する場合、ネストしたクエリまたはネストした結果セットを使用する必要があります。以下は一般的な2つの方法です:
- マッピングファイル内でのネストクエリの使用:親オブジェクトとそれに関連する複数の子オブジェクトを取得するために、マッピングファイルでネストクエリを使用することができます。例えば、親オブジェクトのSQLクエリ内に子オブジェクトのSQLクエリをネストし、親オブジェクトと子オブジェクトを関連付けるためにネストクエリを使用することができます。
例:
<select id="selectParent" resultType="Parent">
SELECT * FROM parent
</select>
<select id="selectChildren" resultType="Child">
SELECT * FROM child WHERE parent_id = #{parentId}
</select>
- 使用ネストされた結果セット:
マッピングファイルでは、1対多のマッピング関係を実現するために、ネストされた結果セットを使用できます。親オブジェクトと子オブジェクトのマッピング関係を定義し、親オブジェクトのクエリ時に、ネストされた結果セットを使用して親オブジェクトと対応する複数の子オブジェクトをマッピングすることができます。
日本語で適切に言い換えると次のようになります:例:
<resultMap id="parentMap" type="Parent">
<id property="id" column="id" />
<result property="name" column="name" />
<collection property="children" ofType="Child" resultMap="childMap" />
</resultMap>
<resultMap id="childMap" type="Child">
<id property="id" column="id" />
<result property="name" column="name" />
</resultMap>
<select id="selectParent" resultMap="parentMap">
SELECT p.*, c.* FROM parent p
LEFT JOIN child c ON p.id = c.parent_id
</select>
上記の方法を使って、1つの対多の関係を実現することができます。開発者は具体的なビジネスニーズに応じて適切な方法を選択することができます。