1. 程式人生 > >mybatis關聯多個相同型別物件

mybatis關聯多個相同型別物件

在Order實體類中巢狀這兩個物件,分別是:receiveUser和sendUser,而我們要做的就是將在查詢Order這個物件的時候通過orderReceiveId和orderSendId這兩個外來鍵查詢receiveUser和sendUser這兩個物件,那麼我是怎麼做的呢?
在resultMap中:

  <resultMap id="BaseResultMap2" type="ssm.aidai.pojo.Order" extends="BaseResultMap"> 
  <!-- 接單人身份的receiveUser關聯 --> 
  <association property="receiveUser" javaType="ssm.aidai.pojo.User" column="order_receive_id" select="getReceiveUser" /> 
   <!-- 發單人身份的sendUser關聯 --> 
  <association property="sendUser" column="order_send_id"   javaType="ssm.aidai.pojo.User"  select="getSendUser" />
  </resultMap>

根據應用場景進行元素分析:

association: 複雜物件的對映
property: 對映到Order實體類中的receiveUser
column : 這個其實就是你要傳的引數名
javaType: 一個 Java 類的完全限定名
整個查詢操作流程是這樣的:

1、資料庫依據下面的程式碼查詢Order物件,然後將物件對映到BaseResultMap2結果集中;


select

,

from aidai_order o,
aidai_place p
where order_id =
#{orderId,jdbcType=INTEGER} and p.place_id =
o.place_id

2、而在BaseResultMap2中有以下association複雜物件的對映,即

<association property="receiveUser" javaType="ssm.aidai.pojo.User" column="order_receive_id" select="getReceiveUser" /> 

所以系統會通過select的屬性值即getReceiveUser跳轉到id="getReceiveUser"的xml中,並將column中的order_receive_id的對映欄位中的值傳遞過去即


select
user_id,user_name,user_icon
from aidai_user where
user_id =
#{orderReceiveId,jdbcType=INTEGER}

那麼為什麼是#{orderReceiveId,jdbcType=INTEGER}呢,因為orderReceiveId是order_receive_id在實體類Order中的對映欄位,可以裝載值。
在查詢到物件之後會將物件放入receiveUser。
sendUser的操作是一樣的,就不解釋了!!!

作者:稀飯_ricoder
連結:https://www.jianshu.com/p/57fa7e8d87df
來源:簡書
簡書著作權歸作者所有,任何形式的轉載都請聯絡作者獲得授權並註明出處。