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

mybatis一对多查询功能

 Tout d'abord, nous给出 une demande : rechercher les détails des commandes en fonction de l'ID de commande - nous savons que dans une commande, il peut y avoir plusieurs détails de commandes (les amis qui ne sont pas clairs, veuillez laisser un message ou aller sur la page des commandes du site Taobao pour voir). À ce moment-là, une commande correspond à plusieurs IDs de commande. Lorsque ce type de demande se produit, comment devrions-nous rechercher ?

  À ce moment, notre modèle de données est illustré comme suit (à gauche). Étant donné que les utilisateurs de requêtes font également partie de nos besoins, nous avons étendu sur la base de l'original, le modèle de données est le suivant (à droite) :

    Très显然,如果用resultType的方式去实现的话,是不合理的了。因为我们需要创建一个既有订单又有订单明细的pojo然后呢,我们的mybatis框架会为我们映射出很多个pojo对象(有多少个订单明细就有多少个对象)。

    Il est évident que l'utilisation du mode resultType n'est pas raisonnable. Parce que nous devons créer un pojo à la fois avec une commande et des détails de commande, et notre cadre mybatis nous mappera de nombreux objets pojo (autant d'objets que de détails de commande).

    L'implémentation spécifique est la suivante :

  Requête SQL

    Déterminer la table d'interrogation principale : table de commande

    Déterminer la table d'interrogation associée : table de détails de commande

    Ajoutez une association de table de détails de commande sur la base de l'interrogation à un à un.

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

  Présentation du problème

    Après l'interrogation, nous avons découvert un problème : comme indiqué dans la figure, notre id a plusieurs occurrences, ce qui est dû à l'utilisation de plusieurs détails de commande correspondants de la base de données qui partagent un même id de commande. Cela entraîne l'apparition d'un enregistrement orders dans chaque enregistrement. La solution spécifique, mentionnée dès le début, ne sera pas répétée ici.

  Ajouter la propriété de liste de détails de commande dans orders  

  

    Définir resultMap

<!-- resultMap de commande et de détails de commande
  Utilisez extends pour hériter, n'avez pas besoin de répéter la mapping de l'utilisateur
   -->
  <resultMap type="cn.itcast.mybatis.po.Orders" id="dinxtends="OrdersUserResultMap">
    <!-- Informations de commande -->
    <!-- Informations d'utilisateur -->
    <!-- Utilisez extends pour hériter, n'avez pas besoin de configurer à nouveau la mapping des informations de commande et d'utilisateur -->
    <!-- Informations de détails de commande
    Un ordre associé à une interrogation a produit plusieurs détails, il faut utiliser collection pour la mapping
    collection : la collection de l'interrogation associée qui contient plusieurs enregistrements est映射到对象 de collection
    property: mapper plusieurs enregistrements de consultation associée à la propriété cn.itcast.mybatis.po.Orders
    ofType: spécifie le type de pojo映射 à la propriété de liste
     -->
     <collection property="orderdetails" ofType="cn.itcast.mybatis.po.Orderdetail">
       <!-- id: identifiant unique de la détail de commande
       property: pour mapper l'identifiant unique de la détail de commande à quelle propriété de 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  

  

  Résumé

    En fait, c'est utiliser la collection de resultMap pour mapper plusieurs enregistrements de consultation associée à une propriété de liste.

Voici ce que l'éditeur vous présente en tant que fonction de consultation bidirectionnelle de mybatis, j'espère que cela vous sera utile. Si vous avez des questions, n'hésitez pas à laisser un message, l'éditeur répondra à temps. Merci également de votre soutien au site de tutoriels d'urais.

Déclaration : le contenu de cet article est issu du réseau, propriété de ses auteurs respectifs, contribué et téléversé par les utilisateurs d'Internet, ce site ne détient pas de droits de propriété, n'a pas été traité par l'édition humaine et n'assume aucune responsabilité juridique connexe. Si vous trouvez du contenu suspect de violation de droits d'auteur, veuillez envoyer un e-mail à : notice#oldtoolbag.com (veuillez remplacer # par @ lors de l'envoi d'un e-mail pour signaler une violation, et fournir des preuves pertinentes. Une fois confirmée, ce site supprimera immédiatement le contenu suspect de violation de droits d'auteur.