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-join 到 wheel 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 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 List 复合在 CarBean 中。我该怎么办?
您可以映射任意多个,但 MyBatis
将通过方法 queryForObject
或 queryForList
或其他方法提供查询结果...
世界上没有任何方法可以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">
我有两个豆子 (1) CarBean 和 (2) WheelBean 如下
public class CarBean implements Serializable {
private Long carId;
private List<WheelBean> wheels;
}
我有两个 table 用于汽车和车轮。我想从 car table 查询数据并使用 left-join 到 wheel 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 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 List 复合在 CarBean 中。我该怎么办?
您可以映射任意多个,但 MyBatis
将通过方法 queryForObject
或 queryForList
或其他方法提供查询结果...
世界上没有任何方法可以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">