Heim >Java >javaLernprogramm >Detaillierte Analyse der Unterschiede und Zusammenhänge zwischen resultType und resultMap in mybatis
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
2fcf37cc8639c0835f2a112fe5f93a849eef2c25b88ca2d81d394f11ec96c407e7278c69b1e0021e9427bf255a0086f7bb49b36718ffba6c40aa7d011fafcc356ebaf93ccf0a7eb73abf17f5d66f496dDies 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}18bb6ffaf0152bbe49cd8a3620346341Das 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.TbClassDatailWenn 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_id18bb6ffaf0152bbe49cd8a36203463414a11ceeef9d363d18daeb2ff0e115be9
1bc9007c1b08a5a41bb5ee9be64a55c77cb486de3528c1e544b606da1e2164ae6cf1cda1774140b1bf7e54614c8f58e9e08450006b72f6e37b32564ebf7e3714e38a9cf50eb8e25da5892c8813ca0011a1a7d4d2b193733ef0c15d86ce05f5537d6d4df2e47d8c9389fee9b1f90ca509285d3778291c3d7aa6eafe5c70300921113aecbcc56d2525429c3d61b48a1d346cc0a7625caa65b9709a1e50bbd52c945e983f6196ee2a11899ac257ac4a761a62a82c88b9c7d4583fd468de5781adfc29510f87cb44cd62c70fc7046aedde68501f605e20e4cedea353a3c24c992da491fc0312a46e774fade754e0d6bf5f586ebaf93ccf0a7eb73abf17f5d66f496dDer 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!