Mybatis中如何映射多个bean?

How to map multiple beans in Mybatis?

我有两个豆子 (1) CarBean 和 (2) WheelBean 如下

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

我有两个 table 用于汽车和车轮。我想从 car table 查询数据并使用 left-joinwheel table。我想按以下方式使用

  <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>

但是这样,我无法从轮子 table 获取数据,因为轮子信息没有匹配的数据。所以,现在我使用 extends CarBeanWheelBean 和我的数据源 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>

这样,我可以获得 CarBeanWheelBean 数据。我的问题是 ".. 有没有办法在不将 carBean 扩展到 wheelBean 的情况下同时获取 carBean 和 wheelBean 数据?"

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

您可以映射任意多个,但 MyBatis 将通过方法 queryForObjectqueryForList 或其他方法提供查询结果...

世界上没有任何方法可以return两个值。
所以唯一的方法是将它们绑定在一个 class.

现在你不想extending carBean to wheelBean所以你可以试一试

  • 为包含结果的目的创建另一个 class,它将包含 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 查询

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