1. 程式人生 > >Mybatis連結3表查詢資料resultMap結果對映

Mybatis連結3表查詢資料resultMap結果對映

一、前言                                                                                                                                     

Mybatis實現了sql與java程式碼的分離,達到了解耦合的目的,配置sql語句時有個resultType=""的屬性,用於定義sql查詢返回結果資料型別,但它有侷限性,就是當連表查詢的時候,你很難說定義返回的是某一個型別,這時就需要用到一個標籤了,那就是resultMap,結果對映.  

二、從sql查詢結果到模型實體                                                                                                     

在深入ResultMap標籤前,我們需要了解從SQL查詢結果集到JavaBean或POJO實體的過程。

  1. 通過JDBC查詢得到ResultSet物件

  2. 遍歷ResultSet物件並將每行資料暫存到HashMap例項中,以結果集的欄位名或欄位別名為鍵,以欄位值為值

  3. 根據ResultMap標籤的type屬性通過反射例項化領域模型

  4. 根據ResultMap標籤的type屬性和id、result等標籤資訊將HashMap中的鍵值對,填充到領域模型例項中並返回

三、ResultMap標籤                                                                                                                 

id屬性:標識resultMap,通過它去識別.

type屬性:返回值型別,類的全定向名.

autoMapping屬性:值為true(預設)|false,是否自動對映。自動對映功能就是自動查詢與欄位名小寫同名的屬性名,並呼叫setter方法。而設定為false後,則需要在`resultMap`內明確註明對映關係才會呼叫對應的setter方法。

四、ResultMap中子標籤                                                                                                           

在講標籤時先講述下資料庫中表資料的對應關係,如一對一,一對多,多對多等關係,具體來說,如有一個俱樂部表,一個全員表,一個俱樂部裡有許多球員,而許多球員對應一個俱樂部,則俱樂部與球員之間的關係就是一對多與多對一的關係。

<collection>子標籤:對應表格關係中的多

<association>子標籤:對應表格關係中的一

五、聯結三表示例                                                                                                                       

示例是聯結三表,查詢結果作為示範,就算聯結再多表也能舉一反三。這三個表的關係如下圖

sql語句聯結:http://download.csdn.net/detail/sunrise_zhu/9687991

核心程式碼:

clubMapper.xml中結果對映

  1. <!-- 結果對映 -->

  2. <resultMap type="com.sxt.entity.Club" id="clubBean" autoMapping="true">

  3. <!--column指向資料庫列名 property指向pojo物件中欄位名-->

  4. <result column="cid" property="cid"/>

  5. <result column="cname" property="cname"/>

  6. <result column="city" property="city"/>

  7. <!-- property指的是在bean中欄位名 ofType類的全定向名 -->

  8. <collection property="players" ofType="com.sxt.entity.Player">

  9. <result column="pid" property="pid"/>

  10. <result column="pname" property="pname"/>

  11. <result column="position" property="position"/>

  12. <result column="cid" property="cid"/>

  13. <association property="abilities" javaType="com.sxt.entity.Abilities">

  14. <result column="aid" property="aid"/>

  15. <result column="pid" property="pid"/>

  16. <result column="shoot" property="shoot"/>

  17. </association>

  18. </collection>

  19. </resultMap>

clubMapper.xml中sql語句

  1. <select id="joinTwo" resultMap="clubBean">

  2. select c.*,p.*,a.*

  3. from clubs c

  4. join player p

  5. on c.cid = p.cid

  6. join abilities a

  7. on a.pid = p.pid;

  8. </select>

playerMapper.xml中的結果對映:

  1. <!-- 結果對映 -->

  2. <resultMap type="com.sxt.entity.Player" id="playerBean">

  3. <!--column指向資料庫列名 property指向pojo物件中欄位名 -->

  4. <result column="pid" property="pid" />

  5. <result column="pname" property="pname" />

  6. <result column="position" property="position" />

  7. <result column="cid" property="cid" />

  8. <association property="club" javaType="com.sxt.entity.Club">

  9. <result column="cid" property="cid" />

  10. <result column="cname" property="cname" />

  11. <result column="city" property="city" />

  12. </association>

  13. <association property="abilities" javaType="com.sxt.entity.Abilities">

  14. <result column="aid" property="aid"/>

  15. <result column="pid" property="pid"/>

  16. <result column="shoot" property="shoot"/>

  17. </association>

  18. </resultMap>

abilitiesMapper.xml結果對映

  1. <!-- 結果對映 -->

  2. <resultMap type="com.sxt.entity.Abilities" id="abilitiesBean">

  3. <!--column指向資料庫列名 property指向pojo物件中欄位名 -->

  4. <result column="aid" property="aid"/>

  5. <result column="pid" property="pid"/>

  6. <result column="shoot" property="shoot"/>

  7. <association property="player" javaType="com.sxt.entity.Player">

  8. <result column="pid" property="pid"/>

  9. <result column="pname" property="pname"/>

  10. <result column="position" property="position"/>

  11. <result column="cid" property="cid"/>

  12. </association>

五、參考檔案                                                                                                                           

http://www.cnblogs.com/fsjohnhuang/p/4076592.html