Heim > Java > javaLernprogramm > 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

巴扎黑
Freigeben: 2017-07-17 13:21:58
Original
4018 Leute haben es durchsucht

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 }
Nach dem Login kopieren
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

<resultMap id="BaseResultMap" type="org.cxxy.base.cxsc.entity.TbClass"><id column="id" jdbcType="INTEGER" property="id" /><result column="classname" jdbcType="VARCHAR" property="classname" /><result column="deptname" jdbcType="VARCHAR" property="deptname" /></resultMap>
Nach dem Login kopieren
Dies resultMap Es entspricht den Attributen meiner Po-Klasse

und stellt die einzelne Tabellenabfrageanweisung meines XML-

<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
Nach dem Login kopieren
select 
 id, classname, deptname
from tb_class
where id = #{id,jdbcType=INTEGER}
</select>
Nach dem Login kopieren
 <br>
Nach dem Login kopieren
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

<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="类的全限定名">select 
 id, classname, deptname
from tb_class
where id = #{id,jdbcType=INTEGER}</select>
Nach dem Login kopieren
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
Nach dem Login kopieren
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属性
Nach dem Login kopieren
Abfrageliste bestellen

<select id="findOrdersDetailList" resultMap="userorderdetailmap">SELECT
    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_id</select> 
Nach dem Login kopieren

<!-- 订单信息resultmap --><resultMap type="cn.itcast.mybatis.po.Orders" id="userorderdetailmap"><id property="id"column="id"/><result property="user_id" column="user_id"/><result property="number" column="number"/><association property="user" javaType="cn.itcast.mybatis.po.User"><id property="id" column="user_id"/><result property="username" column="username"/><result property="address" column="address"/></association><collection property="orderdetails" ofType="cn.itcast.mybatis.po.Orderdetail"><id property="id" column="orderdetail_id"/><result property="items_id" column="items_id"/><result property="items_num" column="items_num"/></collection></resultMap>
Nach dem Login kopieren
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 标签是一对多的映射,常用于一对多中扩展类下的List<po对象>的属性
   association标签适用扩展类包含的一对一的po类对象属性
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
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
Beliebte Empfehlungen
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage