English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
まず、まず要件を示します:注文IDに基づいて注文詳細を検索——一つの注文には複数の注文詳細が含まれることがあります(要件が不明な場合は、コメントを残すか、淘宝網の注文ページをクリックしてみてください)。この場合、一つの注文が複数の注文IDに対応します。このような要件が発生した場合、どのように検索すればいいのでしょうか?
現在のデータモデルは図の左側に示されています。クエリユーザーも私たちの要件であり、従って元の基盤を拡張しました。データモデルは以下の通りです(右側):
明らかに、resultTypeの方法で実装すると不合理です。なぜなら、注文と注文詳細を持つpojoを作成し、mybatisフレームワークが多くのpojoオブジェクト(注文詳細の数だけ)をマッピングしてくれるからです。
したがって、resultMapの方法を使用して処理する必要があります。問題を解決するためのアプローチは、Ordersクラスにオーダーメイドのリストフィールドを追加し、リストのタイプをOrderdetailに定義することです。次に、設定ファイルを通じて、resultMapのcollectionタグを使用してデータをリストにマッピングします。
具体的な実装は以下の通りです:
SQL文
主要クエリテーブルの確認:注文テーブル
関連クエリテーブルの確認:注文詳細テーブル
一对一クエリの上にオーダーメイドテーブルの関連を追加することでできます。
SELECT orders.*, USER.username, USER.sex, USER.address, orderdetail.id orderdetail_id, orderdetail.items_id, orderdetail.items_num, orderdetail.orders_id FROM orders, USER, orderdetail WHERE orders.user_id = user.id AND orderdetail.orders_id=orders.id
問題の表示
クエリが完了した後、私たちは問題を見つけました:図のように、私たちのidが複数あるのは、データベースの対応する複数の注文詳細が同じ注文idを使用しているためです。これにより、各レコードにordersのレコードが一つずつ表示されます。具体的な解決策は、最初に説明した通りで、ここでは詳述しません。
ordersにリストオーダーメイド属性を追加
resultMapの定義
<!-- 注文および注文詳細のresultMap extendsを使用して継承し、ユーザーのマッピングを再複製する必要はありません --> <resultMap type="cn.itcast.mybatis.po.Orders" id="dinxtends="OrdersUserResultMap"> <!-- 注文情報 --> <!-- ユーザー情報 --> <!-- extendsを使用して継承し、中で注文情報とユーザー情報のマッピングを設定する必要はありません --> <!-- 注文詳細情報 一つの注文が複数の詳細を関連クエリで返し、collectionを使用してマッピングする必要があります collection:関連クエリで複数のレコードがマッピングされるコレクションオブジェクトに property: 関連クエリの複数のレコードをcn.itcast.mybatis.po.Ordersのどの属性にマッピングするかを指定します ofType: リスト属性にマッピングされるpojoのタイプを指定します --> <collection property="orderdetails" ofType="cn.itcast.mybatis.po.Orderdetail"> <!-- id: 注文詳細のユニークな識別子 property: 注文詳細のユニークな識別子をcn.itcast.mybatis.po.Orderdetailのどの属性にマッピングするかを指定します --> <id column="orderdetail_id" property="id"/> <result column="items_id" property="itemsId"/> <result column="items_num" property="itemsNum"/> <result column="orders_id" property="ordersId"/> </collection> </resultMap>
mapper
まとめ
これは、resultMapのcollectionを使用して、関連クエリの複数のレコードをリスト属性にマッピングすることです。
以上が編集者が皆さんに紹介したmybatisの一对多クエリ機能であり、皆さんに役立つことを願っています。何かご不明な点があれば、コメントを残してください。編集者は迅速に回答します。また、ナイアラ・チュートリアル・ウェブサイトへのサポートに感謝しています!
声明:本文の内容はインターネットから取得しており、著作権者に帰属します。インターネットユーザーにより自発的に提供された内容であり、本サイトは権利を所有しておらず、編集も行っていません。著作権に関する問題がある場合は、メールを送信してください:notice#oldtoolbag.com(メールを送信する際は、#を@に変更してください。侵害を報告する場合は、関連する証拠を提供してください。一旦確認ができたら、本サイトは即座に侵害を疑う内容を削除します。)