Heim  >  Artikel  >  Java  >  Detaillierte Analyse der Unterschiede und Zusammenhänge zwischen resultType und resultMap in mybatis

Detaillierte Analyse der Unterschiede und Zusammenhänge zwischen resultType und resultMap in mybatis

巴扎黑
巴扎黑Original
2017-07-17 13:21:583926Durchsuche

Bei der Verwendung von mybatis für Datenbankverbindungsvorgänge gibt es normalerweise zwei Möglichkeiten, die von SQL-Anweisungen zurückgegebenen Ergebnisse zu verarbeiten. Eine davon ist resultType und die andere ist resultMap 🎜>

Zum Beispiel verwendet die Einzeltabellenabfrage, die wir normalerweise verwenden, häufig resultType

Kommen Sie runter und schauen Sie sich einen Code an

 1 package org.cxxy.base.cxsc.entity; 2  3 public class TbClass { 4     private Integer id; 5  6     private String classname; 7  8     private String deptname; 9 10     public Integer getId() {11         return id;12     }13 14     public void setId(Integer id) {15         this.id = id;16     }17 18     public String getClassname() {19         return classname;20     }21 22     public void setClassname(String classname) {23         this.classname = classname == null ? null : classname.trim();24     }25 26     public String getDeptname() {27         return deptname;28     }29 30     public void setDeptname(String deptname) {31         this.deptname = deptname == null ? null : deptname.trim();32     }33 }
Ich habe eine kleine Demo von mir für den oben genannten PO-Kurs verwendet

Komm runter und fang an, meinen XML-Mapper einzufügen

2fcf37cc8639c0835f2a112fe5f93a849eef2c25b88ca2d81d394f11ec96c407e7278c69b1e0021e9427bf255a0086f7bb49b36718ffba6c40aa7d011fafcc356ebaf93ccf0a7eb73abf17f5d66f496d
Dies resultMap Es entspricht den Attributen meiner Po-Klasse

und stellt die einzelne Tabellenabfrageanweisung meines XML-

669abfcbe0c33fe8796fe4e80dcc38da
select 
 id, classname, deptname
from tb_class
where id = #{id,jdbcType=INTEGER}
18bb6ffaf0152bbe49cd8a3620346341
 <br>
parameterType-Vertreters bereit ist der Eingabeparameter (zum Beispiel: select * from tb_class where id = „xxxx“), resultMap stellt die zugeordnete Ergebnismenge dar, Sie können die Karte auch an der Benennung erkennen, natürlich ist es die Ergebnismenge,

Der obige Code stellt eine einzelne Tabellenabfrage dar (eins zu eins). Natürlich verwenden wir in der allgemeinen Entwicklung für diese Art der Zuordnung normalerweise die folgende Schreibmethode

a2aa3edd282ebb7d674f208ca16e6482select 
 id, classname, deptname
from tb_class
where id = #{id,jdbcType=INTEGER}18bb6ffaf0152bbe49cd8a3620346341
Das heißt, die erzielten Ergebnisse sind nach unserem Verständnis im Allgemeinen die gleichen.

Wenn sich jedoch die Bedürfnisse des Kunden ändern, beispielsweise eine Erweiterungsklasse Die Klasse wird geschrieben

org.cxxy.base.cxsc.entity.TbClassDatail
Wenn eine externe Klasse (Attribute anderer Tabellen (die keine gemeinsamen Attribute mit dieser Klasse haben)) in die erweiterte Klasse eingeführt wird, können wir resultMap verwenden , aber es ist nicht vollständig

resultMap

定义po类
在Orders类中加入User属性。
在Orders类中加入List<Orderdetail> orderdetails属性
Abfrageliste bestellen

67b7af552f22717e0a27bb8ca8afddafSELECT
    orders.*,
    user.username,
    user.address,
    orderdetail.id orderdetail_id,
    orderdetail.items_id,
    orderdetail.items_num
    FROM orders,user,orderdetail
    WHERE orders.user_id = user.id
    AND orders.id = orderdetail.orders_id18bb6ffaf0152bbe49cd8a3620346341 
4a11ceeef9d363d18daeb2ff0e115be9

1bc9007c1b08a5a41bb5ee9be64a55c77cb486de3528c1e544b606da1e2164ae6cf1cda1774140b1bf7e54614c8f58e9e08450006b72f6e37b32564ebf7e3714e38a9cf50eb8e25da5892c8813ca0011a1a7d4d2b193733ef0c15d86ce05f5537d6d4df2e47d8c9389fee9b1f90ca509285d3778291c3d7aa6eafe5c70300921113aecbcc56d2525429c3d61b48a1d346cc0a7625caa65b9709a1e50bbd52c945e983f6196ee2a11899ac257ac4a761a62a82c88b9c7d4583fd468de5781adfc29510f87cb44cd62c70fc7046aedde68501f605e20e4cedea353a3c24c992da491fc0312a46e774fade754e0d6bf5f586ebaf93ccf0a7eb73abf17f5d66f496d
Der obige Code, ich habe den Bestellabfragecode einer Schulungseinrichtung gepostet,

Die Beziehung zwischen der oben genannten Entität Die Klassen lauten: Order----->Benutzerpaar Eins (eine Bestellung für einen Benutzer) Order------->OrderDetail Eins-zu-viele (eine Bestellung hat mehrere Bestelldetails)

Bei der Zuordnung von Eins-zu-Viele- und Viele-zu-Viele-Abfragen wie dieser versuchen wir, resultMap zu verwenden

Der Unterschied zwischen resultType und resultMap in MyBatis
注:collection 标签是一对多的映射,常用于一对多中扩展类下的List26f8748aa4657b998cc4ad34c80d1a5b的属性
   association标签适用扩展类包含的一对一的po类对象属性

In MyBatis, wann Beim Abfragen einer ausgewählten Zuordnung kann der Rückgabetyp resultType, resultMap, resultType sein. Er stellt direkt den Rückgabetyp dar (entsprechend der Entität in unserem Modellobjekt), und resultMap ist ein Verweis auf die externe ResultMap (die implizite Schlüssel-->Wert-Beziehung). zwischen Datenbank und Modell wird im Voraus definiert), aber resultType Es kann nicht gleichzeitig mit resultMap existieren.

Wenn MyBatis eine Abfragezuordnung durchführt, wird jedes abgefragte Attribut tatsächlich in einer entsprechenden Map platziert, wobei der Schlüssel der Attributname und der Wert der entsprechende Wert ist.

①Wenn das bereitgestellte Rückgabetypattribut resultType ist, entnimmt MyBatis die Schlüssel-Wert-Paare in der Map und weist sie den Attributen zu, die dem durch resultType angegebenen Objekt entsprechen. Tatsächlich ist der Rückgabetyp jeder Abfragezuordnung von MyBatis ResultMap, aber wenn das bereitgestellte Rückgabetypattribut resultType ist, weist MyBatis automatisch den entsprechenden Wert dem Attribut des durch resultType angegebenen Objekts zu.
②Wenn der bereitgestellte Rückgabetyp resultMap ist, müssen Sie es selbst weiter in das entsprechende Objekt konvertieren, da Map das Domänenmodell nicht gut darstellen kann, was bei komplexen Abfragen oft sehr nützlich ist.

Zusammenfassend

resultType:

Funktion:

Ordnen Sie die Abfrageergebnisse dem Pojo entsprechend der Konsistenz des SQL-Spaltennamens zu. Pojo-Attributname ( gilt nur für die Abfrage einer einzelnen Tabelle.

Gelegenheit:

Es ist üblich, einige detaillierte Datensätze anzuzeigen, z. B. Kaufdetails des Benutzers. Wenn alle zugehörigen Abfrageinformationen auf der Seite angezeigt werden, können Sie resultType direkt verwenden, um jeden Datensatz zuzuordnen Um zu einem Pojo zu gelangen, durchlaufen Sie einfach die Liste (Pojo in der Liste) auf der Front-End-Seite.

Das obige ist der detaillierte Inhalt vonDetaillierte Analyse der Unterschiede und Zusammenhänge zwischen resultType und resultMap in mybatis. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn