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