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
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

猜你喜欢

转载自blog.csdn.net/qq_37514822/article/details/83144463
今日推荐