jpa사용하면서 이런 고민안해서 좋았었는데
간만에 mybatis로 여러 depth의 객체를 매핑해야 하는 일이 생겼다.
<resultMap id="testMap" type="com.test.Tester">
<id column="no" property="no"/>
<result column="col" property="col" />
<association property="tester" resultMap="tester1" columnPrefix="t1_"/>
</resultMap>
<resultMap id="tester1" type="com.test.Tester">
<id column="no" property="no"/>
<result column="col" property="col" />
<association property="tester" resultMap="tester2" columnPrefix="t2_"/>
</resultMap>
<resultMap id="tester2" type="com.test.Tester">
<id column="no" property="no"/>
<result column="col" property="col" />
</resultMap>
만약 Tester 객체 안에 Tester, 그 안에 또 Tester 객체를 한 번에 조회해서 매핑하고 싶다면 이렇고 쿼리를 짤 것이다.
<select id="selectTest" resultMap="testMap">
SELECT
t.no,
t.col,
t1.no as t1_no
t1.col as t1_col
t2.no as t2_no
t2.col as t2_col
FROM tester t
left join tester t1 on t.no = t1.noleft join tester t2 on t.no = t2.no
</select>
여기서 주의해야 할 점이..
이미 t1_으로 columnPrefix가 적용된 상태에서는 그 하위에 association 사용 시 상위 prefix가 그대로 적용된다는 점이다.
따라서 쿼리는
SELECT
t.no,
t.col,
t1.no as t1_no
t1.col as t1_col
t2.no as t1_t2_no
t2.col as t1_t2_col
FROM tester t
left join tester t1 on t.no = t1.noleft join tester t2 on t.no = t2.no
이렇게 상위의 prefix 까지 사용해야 함.
매핑안된다고 삽질하지 맙시다.