여러개의 테이블을 조인한 결과는 어디에 담지?
Posted 2007. 8. 13. 21:23ORM이란개 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가 더 좋다고 외쳐보려던 나의 생각을 다시 돌려본다.....
'개발노트 > iBatis/myBatis' 카테고리의 다른 글
iBatis에서 insert된 자동생성값 알아오기 - MySQL버전 (0) | 2007.08.24 |
---|---|
iBatis와 전통적인 ORM과의 차이점 (0) | 2007.08.21 |
iBatis resultMap의 구조(?) (0) | 2007.08.16 |
iBatis 예제 책보고 따라하기 (0) | 2007.08.13 |
강력한 ORM iBatis 그 유래는? (0) | 2007.08.13 |
- Filed under : 개발노트/iBatis/myBatis