Maison >Java >javaDidacticiel >Analyse détaillée des différences et des connexions entre resultType et resultMap dans mybatis
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 resultTypeDescendez et regardez un morceau de code1 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 }
2fcf37cc8639c0835f2a112fe5f93a849eef2c25b88ca2d81d394f11ec96c407e7278c69b1e0021e9427bf255a0086f7bb49b36718ffba6c40aa7d011fafcc356ebaf93ccf0a7eb73abf17f5d66f496d
669abfcbe0c33fe8796fe4e80dcc38da
select id, classname, deptname from tb_class where id = #{id,jdbcType=INTEGER} 18bb6ffaf0152bbe49cd8a3620346341
<br>
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.TbClassDatailSi 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_id18bb6ffaf0152bbe49cd8a3620346341a51659335ce89394e1e6edb5b0e8bf2b
1bc9007c1b08a5a41bb5ee9be64a55c77cb486de3528c1e544b606da1e2164ae6cf1cda1774140b1bf7e54614c8f58e9e08450006b72f6e37b32564ebf7e3714e38a9cf50eb8e25da5892c8813ca0011a1a7d4d2b193733ef0c15d86ce05f5537d6d4df2e47d8c9389fee9b1f90ca509285d3778291c3d7aa6eafe5c70300921113aecbcc56d2525429c3d61b48a1d346cc0a7625caa65b9709a1e50bbd52c945e983f6196ee2a11899ac257ac4a761a62a82c88b9c7d4583fd468de5781adfc29510f87cb44cd62c70fc7046aedde68501f605e20e4cedea353a3c24c992da491fc0312a46e774fade754e0d6bf5f586ebaf93ccf0a7eb73abf17f5d66f496dLe 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!