簡體   English   中英

如何在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;
}

我有兩張汽車和車輪的桌子。 我想從汽車表中查詢數據,並使用左聯接車輪表。 我想使用如下

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

但是這樣一來,我無法從輪盤獲取數據,因為沒有與輪盤信息匹配的數據。 所以,現在我使用的擴展 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或其他方法提供查詢結果。

世界上沒有方法可以返回兩個值。
因此,唯一的方法是將它們綁定在一個類中。

現在,由於您不想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">

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM