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 }
<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>
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
select id, classname, deptname from tb_class where id = #{id,jdbcType=INTEGER} </select>
<br>
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="类的全限定名">select id, classname, deptname from tb_class where id = #{id,jdbcType=INTEGER}</select>
Cependant, si les besoins du client changent, par exemple une classe d'extension de. la classe s'écrit
org.cxxy.base.cxsc.entity.TbClassDatail
resultMap
定义po类 在Orders类中加入User属性。 在Orders类中加入List<Orderdetail> orderdetails属性
<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>
<!-- 订单信息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>
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类对象属性
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!