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

Funzione di query uno-a-molti in MyBatis

 Prima di tutto, diamo un'occhiata a una esigenza: cercare i dettagli dell'ordine in base all'id dell'ordine - sappiamo che all'interno di un ordine possono esserci molti dettagli dell'ordine (per chi non è chiaro, lascia un messaggio o vai sul sito淘宝 per guardare i dettagli degli ordini). In questo caso, un ordine corrisponde a più id degli ordini. Quando si verifica questa esigenza, come dovremmo cercare?

  Al momento, il nostro modello di dati è come illustrato di seguito (sinistra). Poiché la query dell'utente è anche una delle nostre esigenze, quindi si estende sulla base dell'esistente, il modello di dati è come segue (destra):

    Evidentemente, se si realizza utilizzando il metodo resultType, non è ragionevole. Poiché dobbiamo creare un pojo che abbia sia l'ordine che i dettagli dell'ordine, poi il nostro framework MyBatis ci mappa molti oggetti pojo (quanti dettagli dell'ordine ci sono, ci sono molti oggetti).

    Quindi dobbiamo utilizzare il metodo resultMap per gestirlo. La logica di soluzione è: aggiungi un campo lista dettagli ordine nel tipo Orders e definisci il tipo della lista come Orderdetail. Poi, attraverso il file di configurazione, mappa i dati ricevuti nel list tramite il tag collection del resultMap.

    L'implementazione specifica è la seguente:

  Query SQL

    Determina la tabella di query principale: tabella ordine

    Determina la tabella di query associata: tabella dettagli ordine

    Aggiungi l'associazione della tabella dettagli ordine alla query uno-a-uno.

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

  Mostra il problema

    Dopo la query, abbiamo riscontrato un problema: come illustrato nell'immagine, il nostro id è apparso più volte, questo è dovuto al fatto che più dettagli dell'ordine nel database utilizzano lo stesso id dell'ordine. Questo ha portato a un record orders per ogni record. La soluzione specifica è stata detta all'inizio e non verrà ripetuta qui.

  Aggiungi l'attributo lista dettagli ordine in orders  

  

    Definisci resultMap

<-- resultMap per l'ordine e i dettagli dell'ordine
  Utilizza extends per l'ereditarietà, non è necessario mappare nuovamente l'utente
   -->
  <resultMap type="cn.itcast.mybatis.po.Orders" id="dinxtends="OrdersUserResultMap">
    <-- Informazioni ordine
    <-- Informazioni utente
    <-- Utilizza extends per l'ereditarietà, non è necessario configurare nuovamente la mappatura delle informazioni dell'ordine e dell'utente
    <-- Informazioni dettagliate dell'ordine
    Un ordine ha una query correlata che ha generato più dettagli, è necessario utilizzare collection per la mappatura
    collection: Mappa le query correlate a più record in un oggetto di raccolta
    property: Mappa le query correlate a più record su cn.itcast.mybatis.po.Orders a quale attributo
    ofType: specificare il tipo di oggetto pojo mappato all'attributo elenco
     -->
     <collection property="orderdetails" ofType="cn.itcast.mybatis.po.Orderdetail">
       --> id: identificatore unico del dettaglio dell'ordine
       property: mappare l'identificatore unico del dettaglio dell'ordine all'attributo di quale proprietà di 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  

  

  Sommario

    In sostanza, si utilizza la collection di resultMap per mappare i record di ricerca correlati su più record in un attributo elenco.

Come ha spiegato l'editor, la funzione di ricerca uno-a-molti di mybatis, spero sia utile a tutti. Se avete qualsiasi domanda, lasciate un commento e l'editor risponderà prontamente. Ringraziamo anche il supporto del sito web di Yell tutorial!

Dichiarazione: il contenuto di questo articolo è stato prelevato da Internet, il copyright spetta agli autori. Il contenuto è stato contribuito e caricato autonomamente dagli utenti di Internet, il sito web non detiene i diritti di proprietà, non è stato elaborato manualmente e non assume responsabilità legali correlate. Se trovi contenuti sospetti di violazione del copyright, ti preghiamo di inviare una e-mail a: notice#oldtoolbag.com (al momento dell'invio dell'e-mail, sostituisci # con @) per segnalare, fornendo prove pertinenti. Una volta verificata, il sito web rimuoverà immediatamente il contenuto sospetto di violazione del copyright.

Ti potrebbe interessare