Mybatis:如何将存储在同一个表中的类属性映射为父类

时间:2018-03-16 20:09:07

标签: mybatis

我有一个Airport类,它映射到以下SQL表:

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
)

我想将此表格映射到Airport类,如下所示(换句话说,我想将LATITUDELONGITUDE列映射到latLng属性,这是LatLng类的一个实例:

public class LatLng{
   private double latitude;
   private double longitude;

   // getters and setters omitted
}

public class Airport{
   private LatLng latlng;
   ...
   LatLng getLatLng();
}

显而易见的答案是将LATITUDELONGITUDE保持为单独的类成员,然后直接在代码中提供到LatLng的实际映射。我想知道是否可以直接使用myBatis进行映射(以及相反的方式,即将LatLng属性映射到相应的表列)。

1 个答案:

答案 0 :(得分:1)

好的回答我自己的问题。事实证明,它非常容易。在mapper文件中,您只需要在resultMap中指示使用点表示法将列映射到复杂属性(此处latLng对应于LatLng类实例):

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