マイバティスで1対多の関係をどのように構成するか?
MyBatisで一対多の関係を設定するには、ネストされたクエリとネストされた結果マッピングを使用する必要があります。
最初に、Mapper XMLファイルに2つのクエリステートメントを定義する必要があります。1つは主テーブルの情報を検索するためのものであり、もう1つは従テーブルの情報を検索するためのものです。例:
<!-- 查询主表信息 -->
<select id="selectMainTable" resultMap="MainTableResultMap">
SELECT *
FROM main_table
</select>
<!-- 查询从表信息 -->
<select id="selectSubTable" resultMap="SubTableResultMap">
SELECT *
FROM sub_table
WHERE main_table_id = #{mainTableId}
</select>
その後、主テーブルと従テーブルの結果セットをマッピングするために、2つのResultMapを定義する必要があります。例えば:
<!-- 主表ResultMap -->
<resultMap id="MainTableResultMap" type="MainTable">
<id property="id" column="id" />
<result property="name" column="name" />
<!-- 定义从表的集合 -->
<collection property="subTables" ofType="SubTable" resultMap="SubTableResultMap" />
</resultMap>
<!-- 从表ResultMap -->
<resultMap id="SubTableResultMap" type="SubTable">
<id property="id" column="id" />
<result property="name" column="name" />
<result property="mainTableId" column="main_table_id" />
</resultMap>
最後に、Mapperインタフェースでメソッドを定義し、上記の2つのクエリを呼び出して一対多の関係のクエリを実行します。例:
public interface MainTableMapper {
MainTable selectMainTable(int id);
}
selectMainTableメソッドを呼び出すと、MyBatisはまず主テーブル情報を検索するSQL文を実行し、その後、主テーブルのID値に基づいて従属テーブル情報を検索するSQL文を実行し、検索結果を主テーブルオブジェクトの従属テーブルコレクションプロパティにマッピングします。