Mybatis:如何映射存储在与父 class 相同的 table 中的 class 属性
Mybatis: how to map a class property stored in same table as parent class
我有一个机场 class,映射到以下 SQL table:
create TABLE AIRPORT (
LATITUDE NUMERIC(17, 6),
LONGITUDE NUMERIC(17, 6),
COUNTRY_CDE VARCHAR(2) not null,
COM_CDE VARCHAR(4) not null,
TZ_CDE VARCHAR(4),
... Additional columns ommitted
)
我想将此 table 映射到 Airport
class,如下所示(换句话说,我想映射 LATITUDE
和 LONGITUDE
列到 latLng
属性,这是 LatLng
class 的一个实例):
public class LatLng{
private double latitude;
private double longitude;
// getters and setters omitted
}
public class Airport{
private LatLng latlng;
...
LatLng getLatLng();
}
显而易见的答案是将 LATITUDE
和 LONGITUDE
保留为单独的 class 成员,然后直接在代码中提供到 LatLng
的实际映射。我想知道是否可以直接使用 myBatis 进行映射(以及其他方式,即将 LatLng
属性 映射到相应的 table 列)。
好的回答我自己的问题。事实证明,这非常容易。在你的映射器文件中,你只需要在你的 resultMap 中指明列被映射到一个复杂的 属性 使用点符号(这里 latLng 对应于 LatLng class 实例):
<resultMap id="AirportResult" type="Airport">
<id property="code" column="com_cde"/>
<result property="latLng.latitude" column="latitude"/>
<result property="latLng.longitude" column="longitude"/>
</resultMap>
<select id="findByCode" parameterType="String" resultMap="AirportResult">
SELECT com_cde,
LATITUDE,
LONGITUDE FROM AIRPORT
WHERE com_cde = #{code}
</select>
我有一个机场 class,映射到以下 SQL table:
create TABLE AIRPORT (
LATITUDE NUMERIC(17, 6),
LONGITUDE NUMERIC(17, 6),
COUNTRY_CDE VARCHAR(2) not null,
COM_CDE VARCHAR(4) not null,
TZ_CDE VARCHAR(4),
... Additional columns ommitted
)
我想将此 table 映射到 Airport
class,如下所示(换句话说,我想映射 LATITUDE
和 LONGITUDE
列到 latLng
属性,这是 LatLng
class 的一个实例):
public class LatLng{
private double latitude;
private double longitude;
// getters and setters omitted
}
public class Airport{
private LatLng latlng;
...
LatLng getLatLng();
}
显而易见的答案是将 LATITUDE
和 LONGITUDE
保留为单独的 class 成员,然后直接在代码中提供到 LatLng
的实际映射。我想知道是否可以直接使用 myBatis 进行映射(以及其他方式,即将 LatLng
属性 映射到相应的 table 列)。
好的回答我自己的问题。事实证明,这非常容易。在你的映射器文件中,你只需要在你的 resultMap 中指明列被映射到一个复杂的 属性 使用点符号(这里 latLng 对应于 LatLng class 实例):
<resultMap id="AirportResult" type="Airport">
<id property="code" column="com_cde"/>
<result property="latLng.latitude" column="latitude"/>
<result property="latLng.longitude" column="longitude"/>
</resultMap>
<select id="findByCode" parameterType="String" resultMap="AirportResult">
SELECT com_cde,
LATITUDE,
LONGITUDE FROM AIRPORT
WHERE com_cde = #{code}
</select>