MyBatisのone-to-manyクエリの設定方法は何ですか。
MyBatisにおいて、1対多のクエリは、関連付け関係を設定することで実現できます。以下は、1対多のクエリの構成手順です。
- MyBatisのマッピングファイルでは、まず主テーブルの検索クエリを定義し、各フィールドに別名を割り当てます。例えば、主テーブルがユーザーである場合、次のように検索クエリを定義します。
-
- こちらでは、メインテーブルとサブテーブルを結合するために左結合が使用されており、メインテーブルのidとサブテーブルのuser_idを結びつけています。
- マッピングファイルでは、サブクエリを定義し、各フィールドに別名を指定します。例えば、addressというサブクエリがある場合、以下のようにクエリを定義します。
-
この部分で、userId をもとに address テーブルから id、user_id、address の情報を取得する。 - user_idを検索条件として使用し、親テーブルのidと子テーブルのuser_idを関連付けます。
- 例えば、主表に対応するエンティティクラスに、従属表に対応するエンティティクラスのリスト属性を追加し、1対多のクエリ結果を格納するために使用します。例えば、UserクラスにList
属性を追加します。 - ユーザークラスには、id(int型)、username(String型)、age(int型)、addresses(List
型)のフィールドがあります。getterとsetterメソッドは省略しています。 - マッピングファイルでは、タグを使用して、親テーブルと子テーブルの関連付けを構成します。親テーブルのクエリーでは、タグを使用して子テーブルのクエリーを参照し、property属性を使用して子テーブルに対応するエンティティクラスのコレクション属性を指定します。例えば:
- `
` should be paraphrased into:
`
` - ここでのresultMap属性は、従属テーブルの結果マッピングを指し、従属テーブルの結果マッピングを定義するために別のタグを使用できます。
- 例えば、サブクエリの検索クエリで、タグを使用してサブテーブルの結果マッピングを定義します。
-
住所の結果マップのidは”addressResultMap”であり、タイプはAddressです。idプロパティは列名”id”に、住所プロパティは列名”address”にマッピングされます。
- ここでは、タグを使用して、従属表の各フィールドを対応するエンティティクラスのプロパティに設定します。
上記の手順を設定することで、1対多のクエリを実現することができます。主表のクエリを実行する際、MyBatisは自動的に設定された関連付けに基づいて従属テーブルのデータをクエリし、結果を主表にマッピングし、対応するエンティティクラスのコレクションプロパティに格納します。