差异在MyBatis中的多个对象集合中的表格

时间:2017-06-15 20:14:05

标签: mybatis spring-mybatis

我不知道如何在一个对象中获得不同表的结果,我希望只用一个查询来填充这个对象......

class HomeDto
{
  String street;
  Room room1;
  Bath bath1;
}

//TABLE -> SIAS_TB_ROOM

class Room {
  String idHome;
  String floorRoom;
  String doorRoom;
}

//TABLE -> SIAS_TB_BATH

class Bath {
  String idHome;
  String floorBath;
  String doorBath;
}

<select id="findHome" 
    resultType="es.home.integration.model.HomeDto">

    SELECT room1.floorRoom, bath1.doorBath 
        FROM SIAS_TB_BATH bath, SIAS_TB_ROOM room 
    WHERE bath.idHome = room.idHome
    AND bath.floorBath='Purple'
</select>

1 个答案:

答案 0 :(得分:0)

使用result map就像这样:

<resultMap id="homeMap" type="es.home.integration.model.HomeDto">
   <id property="id" column="idHome"> <!-- you need to add id to home -->
   <association property="room1" javaType="es.home.integration.model.Room">
       <result property="floorRoom" column="floorRoom"/>
       <result property="doorRoom" column="doorRoom"/>
   </association>
   <association property="bath1" javaType="es.home.integration.model.Bath">
       <result property="floorBath" column="floorBath"/>
       <result property="doorBath" column="doorBath"/>
   </association>
</resultMap>

然后在查询中使用它:

<select id="findHome" resultMap="homeMap">
    SELECT room.*, bath.foorBath, bath.doorBath
        FROM SIAS_TB_BATH bath, SIAS_TB_ROOM room 
    WHERE bath.idHome = room.idHome
    AND bath.floorBath='Purple'
</select>

您可以通过对这样的关联使用autoMapping来进一步简化映射(对于名称与属性相同的列):

<resultMap id="homeMap" type="es.home.integration.model.HomeDto">
   <id property="id" column="idHome"> <!-- you need to add id to home -->
   <association property="room1" javaType="es.home.integration.model.Room" autoMapping=true/>
   <association property="bath1" javaType="es.home.integration.model.Bath" autoMapping=true>
       <result property="aName" column="otherName"/>
   </association>
</resultMap>