gpt4 book ai didi

java - MyBatis:我可以将两个结果列映射到单个对象属性吗?

转载 作者:行者123 更新时间:2023-12-05 07:41:16 24 4
gpt4 key购买 nike

我有一个例子,我有一个表,它在“纬度”和“经度”两列中存储地理位置。当我将我的结果集映射到 Java 对象时,我想将这两列组合在一起并将它们作为嵌套对象返回,但这个嵌套对象不是某种关联(通过外键)到另一个表。

因此,想象一下这个查询:

SELECT id, name, latitude, longitude 
FROM places
WHERE id = <some_id>

而且,我想映射它 - 理想情况下使用 resultMap在我的 XML 文件中 - 对此:

public class Place {
private Long id;
private String name;
private GeoPoint point;

public Place(Long id, String name, GeoPoint point) {
this.id = id;
this.name = name;
this.point = point;
}
...
}

public class GeoPoint {
private BigDecimal latitude;
private BigDecimal longitude;

public Place(BigDecimal latitude, BigDecimal longitude) {
this.latitude = latitude;
this.longitude = longitude;
}
...
}

根据我阅读的文档,不清楚这是否真的可以在 MyBatis 中实现 resultMap .关于嵌套对象的唯一讨论是当这些对象由作为连接的一部分返回到另一个表(associationcollection)的列形成时 - 即似乎需要 ID。

在我的例子中,这些列仅形成一个嵌套值对象,没有自己的唯一 ID。

谁能分享我的问题的解决方案,避免我不得不返回 HashMap<String, String>来 self 的映射器而不是完全构建的对象?

最佳答案

您可以使用以下结果图:

<select id="selectPlace" parameterType="long" resultMap="placeResultMap">
SELECT id, name, latitude, longitude FROM places WHERE id = #{parameter};
</select>

<resultMap id="placeResultMap" type="com.xyz.entity.Place">
<constructor>
<idArg column="id" javaType="Long"/>
<arg column="name" javaType="String"/>
<arg resultMap="pointResultMap" javaType="com.xyz.entity.GeoPoint"/>
</constructor>
</resultMap>

<resultMap id="pointResultMap" type="com.xyz.entity.GeoPoint">
<constructor>
<arg column="latitude" javaType="BigDecimal"/>
<arg column="longitude" javaType="BigDecimal"/>
</constructor>
</resultMap>

关于java - MyBatis:我可以将两个结果列映射到单个对象属性吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45502679/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com