复杂映射

有一个的关系
在嵌套结果映射中 id 元素扮演了非常重要的角色。 应该通常指定一个或多
个属性,它们可以用来唯一标识结果。实际上就是如果你不使用它( id 元素),但是会产生
一个严重的性能问题,
id:来唯一标识结果
column :表中字段的名称
property:bean属性的名称
<resultMap type="com.zhang.bean.Phone" id="queryPhoneMap">
<id column="phone_id" property="phoneId" javaType="String"/>
<result column="phone_name" property="phoneName"/>
<result column="phone_price" property="price"/>
<result column="phone_manufacturer" property="manufacturer"/>
<association property="simCard" column="sim_Card" javaType="com.zhang.bean.SIMCard">
<id property="simNo" column="sim_no" javaType="String"/>
<result property="manufacturer" column="manufacturer" javaType="String"/>
<result property="price" column="price" javaType="double"/>
<result property="simName" column="sim_Name" javaType="String"/>
</association>
</resultMap> 
<select id="queryPhoneInfomationByPhoneName" resultMap="queryPhoneMap" parameterType="String">
     SELECT p.`phone_Id`,p.`phone_manufacturer`,p.`phone_Name`,p.`phone_price`,
      c.`manufacturer`,c.`price`,c.`sim_Name`,c.`sim_no`
     FROM phone p,simcard c
    WHERE p.`sim_Card`=c.`sim_no` AND p.`sim_Card`=#{cardNo}
</select>
一对多的关系《集合》
 
ofType:这个属性用来区分JavaBean(或字段)属性类型和集合包含的类型来说是很重要的
<resultMap type="com.zhang.bean.ClassS" id="Query">
<id property="classNo" column="class_no"/>
<result property="className" column="class_name" />
<collection property="students" ofType="com.zhang.bean.Student" >
<id property="studentNo" column="student_no" />
<result property="studentName" column="student_name" />
<result property="studentAge" column="student_age" />
<result property="studentClass" column="student_class" />
<result property="studentAddress" column="studdent_address" />
<result property="studentSex" column="student_sex" />
<result property="studentGrate" column="student_grate" />
</collection>
</resultMap>
<select id="getClassByClassNo" resultMap="Query" parameterType="int">
        SELECT c.`class_name`,c.`class_no`,s.`student_no`,s.`student_name`,s.`student_age`,s.`student_class`,s.`studdent_address`,s.`student_sex`,s.`studen        t_grate`
       FROM class c,studentinformation s WHERE c.`class_no`=s.`student_class`
       AND c.`class_no`=#{class_No}
</select>
discriminator鉴别器
<resultMap id="vehicleResult" type="Vehicle">
<id property=”id” column="id" />
<result property="vin" column="vin"/>
<result property="year" column="year"/>
<result property="make" column="make"/>
<result property="model" column="model"/>
<result property="color" column="color"/>
<discriminator javaType="int" column="vehicle_type">
<case value="1" resultMap="carResult"/>
<case value="2" resultMap="truckResult"/>
<case value="3" resultMap="vanResult"/>
<case value="4" resultMap="suvResult"/>
</discriminator>
</resultMap>
在这个示例中, MyBatis 会从结果集中得到每条记录,然后比较它的 vehicle 类型的值。
如果它匹配任何一个鉴别器的实例,那么就使用这个实例指定的结果映射。
原文地址:https://www.cnblogs.com/zhangXingSheng/p/6222187.html