MyBatis(3.2.3) - ResultMaps: Extending ResultMaps

ResultMaps are used to map the SQL SELECT statement's results to JavaBeans properties. We can define ResultMaps and reference this resultMap query from
several SELECT statements.

We can extend one <resultMap> query from another <resultMap> query, thereby inheriting the column to do property mappings from the one that is being extended.

<resultMap type="Student" id="StudentResult">
    <id property="studId" column="stud_id"/>
    <result property="name" column="name"/>
    <result property="email" column="email"/>
    <result property="phone" column="phone"/>
</resultMap>

<resultMap type="Student" id="StudentWithAddressResult" extends="StudentResult">
    <result property="address.addrId" column="addr_id"/>
    <result property="address.street" column="street"/>
    <result property="address.city" column="city"/>
    <result property="address.state" column="state"/>
    <result property="address.zip" column="zip"/>
    <result property="address.country" column="country"/>
</resultMap>

The resultMap query with the ID StudentWithAddressResult extends the resultMap with the ID StudentResult.

Now you can use StudentResult resultMap if you want to map only the Student data as shown in the following code:

<select id="findStudentById" parameterType="int" resultMap="StudentResult">
    SELECT * FROM STUDENTS WHERE STUD_ID=#{studId}
</select>

If you want to map the query results with Student along with the Address data, you can use resultMap with the ID StudentWithAddressResult as follows:

<select id="selectStudentWithAddress" parameterType="int" resultMap="StudentWithAddressResult">
    SELECT STUD_ID, NAME, EMAIL, PHONE, A.ADDR_ID, STREET, CITY, STATE, ZIP, COUNTRY
    FROM STUDENTS S LEFT OUTER JOIN ADDRESSES A 
    ON S.ADDR_ID = A.ADDR_ID
    WHERE STUD_ID = #{studId}
</select>

 

posted on 2016-03-01 11:07  huey2672  阅读(307)  评论(0编辑  收藏  举报