我有两个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 中是复合的。我该怎么办?
答案 0 :(得分:1)
您可以根据需要进行映射,但MyBatis
会通过方法queryForObject
或queryForList
或其他方式提供查询结果...
世界上没有任何方法可以返回两个值。
所以唯一的办法就是将它们绑定在一个类中。
现在你不想要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">