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

巴扎黑
Libérer: 2017-07-17 13:21:58
original
3998 Les gens l'ont consulté

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

Descendez et commencez à coller mon XML Mapper

<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>
Copier après la connexion
Ceci resultMap Il correspond aux attributs de ma classe po

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

<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
Copier après la connexion
select 
 id, classname, deptname
from tb_class
where id = #{id,jdbcType=INTEGER}
</select>
Copier après la connexion
 <br>
Copier après la connexion
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

<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="类的全限定名">select 
 id, classname, deptname
from tb_class
where id = #{id,jdbcType=INTEGER}</select>
Copier après la connexion
<.> 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
Copier après la connexion
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属性
Copier après la connexion
Liste de requêtes de commande

<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> 
Copier après la connexion

<!-- 订单信息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>
Copier après la connexion
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 标签是一对多的映射,常用于一对多中扩展类下的List<po对象>的属性
   association标签适用扩展类包含的一对一的po类对象属性
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Recommandations populaires
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal