2015-02-10 56 views
1

我有两个豆(1)CarBean和(2)WheelBean作为遵循如何在Mybatis中映射多个bean?

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

我有汽车和车轮两个表。我想查询汽车表中的数据并用左加入车轮表。我想用如下

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

可是这样一来,我无法从轮台获得DATAS因为有车轮信息没有匹配DATAS。所以,我现在用的是延伸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 DATAS。我的问题是,“..有没有办法让carBean和wheelBean数据都得到,而不会将carBean延伸到wheelBean?”

我觉得很正常,WheelBean应该延伸CarBean而不是CarBean从。我对吗 ?在我的服务层,WheelBean列表复合在CarBean。我该怎么办?

回答

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

+0

谢谢您的回答!但我并不是指一种方法返回两个值。我的实际问题是我不想使用** CarBean **来扩展** WheelBean **。所以你说* ...唯一的办法就是把他们绑定在一个班级*。怎么样 ?如何绑定以及如何在不扩展的情况下映射? – Cataclysm 2015-02-10 10:47:47

+0

感谢您编辑的答案。我只是使用自动映射。映射就像''解决了我的问题。谢谢先生 。 – Cataclysm 2015-02-10 11:08:29

+1

欢迎。我很高兴知道它的帮助。 – Saif 2015-02-10 11:11:25