MyBatisでの一対多と多対一の設定方法は?
MyBatisでは、一対多および多対一の関係を設定するために、およびの2つのタグを使用する必要があります。
一対多の関係の設定手順は以下の通りです:
- 2つのエンティティクラスを作成し、1つは一対の一方を表し、もう1つは多対の一方を表します。
- 一の側のエンティティクラスにコレクションプロパティを追加して、多数の一方のエンティティオブジェクトを格納する。
- コレクション
- コレクション
- 財産 (ざいさん)
- 私たちの大学図書館は多くの貴重な資料を提供しています。
- 選択する
- <コレクション>
- 選ぶ (えらぶ)
多対一の関係の設定手順は以下の通りです:
- 2つのエンティティクラスを作成し、一つは多対一を表し、もう一つは一対一を表します。
- 多方のエンティティクラスに、一方のエンティティオブジェクトを格納するためのエンティティオブジェクトプロパティを追加します。
- 組織
- 連合体
- 所有物
- ジャワタイプ
- コラム
- 団体
- 選択する
配置例:
一対多の関係の設定例:
<resultMap id="userMap" type="User">
<id property="id" column="id"/>
<result property="name" column="name"/>
<collection property="orders" ofType="Order" select="getOrdersByUserId" column="id"/>
</resultMap>
<select id="getUserById" parameterType="int" resultMap="userMap">
SELECT * FROM user WHERE id = #{id}
</select>
<select id="getOrdersByUserId" parameterType="int" resultMap="orderMap">
SELECT * FROM orders WHERE user_id = #{userId}
</select>
多対一の関係の構成例:
<resultMap id="orderMap" type="Order">
<id property="id" column="id"/>
<result property="name" column="name"/>
<association property="user" javaType="User" column="user_id" select="getUserById"/>
</resultMap>
<select id="getOrderById" parameterType="int" resultMap="orderMap">
SELECT * FROM orders WHERE id = #{id}
</select>
<select id="getUserById" parameterType="int" resultMap="userMap">
SELECT * FROM user WHERE id = #{id}
</select>
これらの例は、userとordersという2つのテーブルが存在することを前提としています。ordersテーブルの外部キー列はuser_idです。