2015-02-10 57 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