Python絡みのメモを公開しています。resultMap)C#今回は、1対Nのデータの取得を行なってみます。やり方ですが、基本的にはJava版と同じです。1対NのようなJOIN関連の場合に重要となってくるのがSQL定義ファイル内に定義するresultMapの定義です。これが、無いとJOINがうまく出来ません。実際に、どのように書くのかというと、以下のようにします。</resultMaps>上記の定義は、今回のSQL定義ファイルの中から抜き出したものです。column="対応するSQLの結果列の名前"/>という風に、定義していきます。ことで、今回のサンプルです。今回は、以下のデータが予め登録されているとします。CategoriesテーブルCategoryIdが1で、CategoryNameが"C#"となっているデータが存在する。AuthorsテーブルAuthorIdが10で、Nameが"gsf_zero1"と成っているデータが存在する。AuthorIdが11で、Nameが"gsf_zero2"と成っているデータが存在する。Memosテーブル以下のデータが存在するとする。MemoData-002上記の状態で、カテゴリから紐付くメモデータを取得します。メモデータには、対応する作者データを付加します。データモデルクラスから。作者データを表すクラスです。}}次は、メモデータを表すクラスです。メモデータの作者を表します。}}最後に、カテゴリデータとそれに紐付くメモデータを表すクラスです。}}次は、上記のクラスにデータをマッピングするためのSQL定義ファイルです。</statements></sqlMap>重要な点は、以下の部分です。groupBy="CategoryId"><groupByという属性がついていますが、これを指定することにより、SQLを実行した結果を指定したプロパティ値に基づいてグループ化してくれます。'gsf_zero2'以下のようにしてくれます。'gsf_zero2'次に重要なのが、以下の部分です。resultMapping="CategoryAndMemos.FindByCategoryIdResultMap-Memo"/>この部分は、Memosというプロパティに対して、resultMappingで指定した結果マッピングを行なった結果をセットしなさいという風になります。ibatisは、該当するプロパティの方がList<Memo>であり、結果が複数あることも認識しますのでこれで、該当のリストオブジェクトにグループ化された分のデータがセットされます。データをマッピングする際に、先程のCategoryAndMemosクラスの方では、Memosプロパティのリストオブジェクトをnewしていませんでしたが、ibatis側がリフレクションを使用して型を判別し、インスタンス化もしれくれますので、事前にオブジェクトを作成しておく必要はありません。Memoクラスの方のAuthorプロパティも同じく、ibatisがインスタンス化を面倒みてくれますので、問題ありません。最後に、実行サンプルです。}}上記のサンプルを実行すると、以下のように表示されます。------CategoryId:1CategoryName:C#MemoId:1MemoTitle:C#-001MemoData:MemoData-001AuthorId:10AuthorName:gsf_zero1MemoId:2MemoTitle:C#-002MemoData:MemoData-002AuthorId:11AuthorName:gsf_zero2一回のSQL呼び出しで、紐付いたデータが取得でき、マッピングも正常に行なわれている事が確認できます。Select)今回は、Select拡張メソッドについてです。Where)今回は、Where拡張メソッドについてです。(動的SQL(DynamicSQL-01(UnaryCondi...iBatisには、動的SQLを作成する機能があります。ISqlMapper...大分間があいてしまいましたが、第7回です。3はてなブログをはじめよう!gsf_zero1さんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。