ORM이란개 Object Relational Mapping 이라고...
그중에 하나의 테이블이 아닌 여러개의 테이블을 조인한 Mapping은 어떻게 할까.. 고민...그러다가 알게 된 것이다.

<sqlMap namespace="Member">
    <resultMap id="get-member" class="member">
    <result property="id" column="id"/>
    <result property="name" column="name"/>
  </resultMap>


  <resultMap id="get-member-result" class="member" extends="get-member"><== a) Main List
    <result property="user.id" column="user_id"/>
    <result property="user.password" column="password"/>
    <result property="studyHistory" column="{id=id}" select="getStudyList" />  <== b) SubList
  </resultMap>

member와 user는 SqlMapConfig.xml에서 alias로 지정한 것이다.

<typeAlias alias="study" type="com.test.domain.Study"/>
   <typeAlias alias="member" type="com.test.domain.Member"/>
   <typeAlias alias="user" type="com.test.domain.User"/>
</typeAlias>

 

그래서 가져온 결과물은... 요렇게 해서 가져온다.
  <select id="getMemberList" resultMap="get-member-result">
  <![CDATA[
    select a.seq as id, a.name as name,
      a.user_id as user_id, b.password as password,
    from member a, user b
    where a.user_id=b.user_id
  ]]>

</select>

Member class에서 User Object를 선언하고 getXXX, setXXX 메소드를 추가한다.

<select id="getStudyList" parameterClass="study" resultMap="get-study-result">
  <![CDATA[
    select a.id, a.lec_num, a.lec_name
    from study a
    where a.id = #id#
  ]]>
</select>

이것은 앞의 getMemberList 를 실행하면서 각 회원의 getStudyList목록을 List형태로 리턴하게 된다.

검색조건에 추가할라믄 column="{id=id,seq=seq}"  와 같은 형식으로 추가한다.

ㅎㅎㅎ 참 좋은 기능이다. 그럼그렇지 이런게 안될리 없지... 잠시나마 ORM 보다 걍 막쓰는 JDBC가 더 좋다고 외쳐보려던 나의 생각을 다시 돌려본다.....