English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

mybatisの一对多查询機能

 まず、まず要件を示します:注文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(メールを送信する際は、#を@に変更してください。侵害を報告する場合は、関連する証拠を提供してください。一旦確認ができたら、本サイトは即座に侵害を疑う内容を削除します。)

おすすめ