Maison >Java >javaDidacticiel >Analyse détaillée des différences et des connexions entre resultType et resultMap dans mybatis

Analyse détaillée des différences et des connexions entre resultType et resultMap dans mybatis

巴扎黑
巴扎黑original
2017-07-17 13:21:584006parcourir

Lors de l'utilisation de mybatis pour les opérations de connexion à une base de données, il existe généralement deux façons de traiter les résultats renvoyés par les instructions SQL. L'une est resultType et l'autre est resultMap. Laissez-moi parler de mes connaissances et de ma compréhension des deux ci-dessous

<.>

Par exemple, la requête à table unique que nous utilisons habituellement utilise souvent resultType

Descendez et regardez un morceau de code

 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 }
J'ai utilisé une de mes petites démos pour la classe PO ci-dessus

Descendez et commencez à coller mon XML Mapper

2fcf37cc8639c0835f2a112fe5f93a849eef2c25b88ca2d81d394f11ec96c407e7278c69b1e0021e9427bf255a0086f7bb49b36718ffba6c40aa7d011fafcc356ebaf93ccf0a7eb73abf17f5d66f496d
Ceci resultMap Il correspond aux attributs de ma classe po

, et publie l'instruction de requête de table unique de mon XML

669abfcbe0c33fe8796fe4e80dcc38da
select 
 id, classname, deptname
from tb_class
where id = #{id,jdbcType=INTEGER}
18bb6ffaf0152bbe49cd8a3620346341
 <br>
représentant parameterType est le paramètre d'entrée (par exemple : select * from tb_class which id = "xxxx"), resultMap représente l'ensemble de résultats mappé, vous pouvez également voir la carte à partir du nom, bien sûr c'est l'ensemble de résultats,

Le code ci-dessus représente une requête de table unique (one-to-one). Bien entendu, dans le développement général, pour ce type de mappage, nous utilisons généralement la méthode d'écriture suivante

a2aa3edd282ebb7d674f208ca16e6482select 
 id, classname, deptname
from tb_class
where id = #{id,jdbcType=INTEGER}18bb6ffaf0152bbe49cd8a3620346341
<.> c'est-à-dire que les résultats obtenus sont les mêmes. D'une manière générale, au niveau de notre compréhension, nous essayons de choisir cette dernière

Cependant, si les besoins du client changent, par exemple une classe d'extension de. la classe s'écrit

org.cxxy.base.cxsc.entity.TbClassDatail
Si une classe externe (attributs d'autres tables (qui n'ont pas d'attributs communs avec cette classe)) est introduite dans la classe étendue, on peut utiliser resultMap , mais ce n'est pas complètement

resultMap

定义po类
在Orders类中加入User属性。
在Orders类中加入List<Orderdetail> orderdetails属性
Liste de requêtes de commande

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 
a51659335ce89394e1e6edb5b0e8bf2b

1bc9007c1b08a5a41bb5ee9be64a55c77cb486de3528c1e544b606da1e2164ae6cf1cda1774140b1bf7e54614c8f58e9e08450006b72f6e37b32564ebf7e3714e38a9cf50eb8e25da5892c8813ca0011a1a7d4d2b193733ef0c15d86ce05f5537d6d4df2e47d8c9389fee9b1f90ca509285d3778291c3d7aa6eafe5c70300921113aecbcc56d2525429c3d61b48a1d346cc0a7625caa65b9709a1e50bbd52c945e983f6196ee2a11899ac257ac4a761a62a82c88b9c7d4583fd468de5781adfc29510f87cb44cd62c70fc7046aedde68501f605e20e4cedea353a3c24c992da491fc0312a46e774fade754e0d6bf5f586ebaf93ccf0a7eb73abf17f5d66f496d
Le code ci-dessus, j'ai posté le code de requête de commande d'un établissement de formation,

La relation entre l'entité ci-dessus classes est : Commande ----->Paire d'utilisateurs Un (une commande pour un utilisateur) Commande------->OrderDetail Un à plusieurs (une commande a plusieurs détails de commande)

Mappage de requêtes un-à-plusieurs et plusieurs-à-plusieurs comme celui-ci, nous essayons d'utiliser resultMap

La différence entre resultType et resultMap dans MyBatis
注:collection 标签是一对多的映射,常用于一对多中扩展类下的List26f8748aa4657b998cc4ad34c80d1a5b的属性
   association标签适用扩展类包含的一对一的po类对象属性

Dans MyBatis, quand lors d'une requête de mappage de sélection, le type de retour peut être resultType, resultMap, resultType. Il représente directement le type de retour (correspondant à l'entité dans notre objet modèle) et resultMap est une référence au ResultMap externe (la relation clé-->valeur implicite entre la base de données et le modèle est défini à l'avance), mais resultType Il ne peut pas exister avec resultMap en même temps.

Lorsque MyBatis effectue le mappage de requêtes, chaque attribut interrogé est en fait placé dans une Map correspondante, où la clé est le nom de l'attribut et la valeur est sa valeur correspondante.

①Lorsque l'attribut de type de retour fourni est resultType, MyBatis supprimera les paires clé-valeur dans la Map et les affectera aux attributs correspondant à l'objet spécifié par resultType. Ainsi, en fait, le type de retour de chaque carte de requête de MyBatis est ResultMap, mais lorsque l'attribut de type de retour fourni est resultType, MyBatis attribue automatiquement la valeur correspondante à l'attribut de l'objet spécifié par resultType.
②Lorsque le type de retour fourni est resultMap, parce que Map ne peut pas bien représenter le modèle de domaine, vous devez le convertir vous-même en objet correspondant, ce qui est souvent très utile dans les requêtes complexes.

Pour résumer

resultType :

Fonction :

Mappez les résultats de la requête au pojo en fonction de la cohérence du nom de la colonne SQL nom de l'attribut pojo ( applicable aux requêtes à table unique uniquement).

Occasion :

Il est courant d'afficher certains enregistrements détaillés, tels que les détails d'achat de l'utilisateur, et lorsque toutes les informations de requête associées sont affichées sur la page, vous pouvez directement utiliser resultType pour mapper chaque enregistrement vers un pojo, parcourez simplement la liste (pojo dans la liste) sur la page frontale.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn