如何在Mybatis中映射多个bean?

时间:2015-02-10 10:26:51

标签: java mybatis ibatis

我有两个bean(1) CarBean 和(2) WheelBean ,如下所示

public class CarBean implements Serializable {
  private Long carId;
  private List<WheelBean> wheels;
}

我有两张汽车和轮子的桌子。我想查询 car 表中的数据,并使用 left-join wheel 表。我想按照以下方式使用

  <select id='getCarById' parameterType='Long' resultType='mypackage.CarBean'>
    SELECT
     C.*,W.*
     FROM CAR C
     LEFT JOIN WHEEL W
     ON C.CAR_ID = W.CAR_ID
     WHERE CAR_ID = #{carId}
  </select>

但是这样,我无法从轮盘获取数据,因为轮子信息没有匹配的数据。所以,现在我使用 extends CarBean WheelBean ,在我的数据源xml

  <select id='getCarById' parameterType='Long' resultType='mypackage.WheelBean'>
    SELECT
     C.*,W.*
     FROM CAR C
     LEFT JOIN WHEEL W
     ON C.CAR_ID = W.CAR_ID
     WHERE CAR_ID = #{carId}
  </select>

这样,我可以获得 CarBean WheelBean 数据。我的问题是“..有没有办法获得carBean和wheelBean数据而不将carBean扩展到wheelBean?”

我认为正常情况下, WheelBean 应该扩展 CarBean 而不是 CarBean 。我对吗 ?在我的服务层, WheelBean 列表在 CarBean 中是复合的。我该怎么办?

1 个答案:

答案 0 :(得分:1)

您可以根据需要进行映射,但MyBatis会通过方法queryForObjectqueryForList或其他方式提供查询结果...

世界上没有任何方法可以返回两个值。
所以唯一的办法就是将它们绑定在一个类中。

现在你不想要extending carBean to wheelBean,所以你可以尝试一下

  • 为结果包含目的创建另一个类,该类包含carBean和wheelBean作为属性

  • 然后制作结果图,如

    <resultMap class="mypackage.YourNewClass" id="mapId">
     <result property="carBean.pro1" column="" />
    <result property="carBean.pro2" column="" />
    ......
    <result property="wheelBean.pro1" column="" />
    <result property="wheelBean.pro2" column="" />

  • 然后显示此结果映射以选择查询

    <select id="getCarById" resultMap="mapId" parameterClass="Long">