2008-10-15 2 views
0

단일 쿼리에서 동일한 resultMap을 여러 번 재사용하는 방법이 있습니까? 다른 컬럼에 대해 위의 재사용 또 다른적인 resultMap를 정의하는 방법은다른 컬럼 이름에 대한 결과 맵 재사용

<resultMap id="foo" class="Foo"> 
    <result property="Bar" column="bar" /> 
</resultMap> 

있습니까 :

예를 들어, 나는 "foo는"된 resultMap이 있다고 가정? 뭔가가 ...

<resultMap id="fizz"class="Fizz"> 
    <result property="Foo1" column="bar=bar1" resultMapping="foo" /> 
    <result property="Foo2" column="bar=bar2" resultMapping="foo" /> 
    <result property="Foo3" column="bar=bar3" resultMapping="foo" /> 
</resultMap> 

답변

2

거의. 쿼리에서 Foo의 ID를 선택하면 Fizz 결과 맵에서 Foo 결과 맵을 사용할 해당 ID에 대한 SELECT를 실행할 수 있습니다.

<result property="Foo1" column="bar1Id" select="selectFoo"/>

(. 당신이 정의 selectFoo 쿼리를 가정) 그러나 모든 행에 대해 추가로 SELECT를 수행하기 때문에 즉, 큰 결과 세트와 매우 느리다.

iBATIS는 다양한 다른 개체가 포함 된 복합 개체가있는 전형적인 경우에이 문제를 해결합니다. 첫째, 당신이 당신의 테이블을 조인 쿼리를 정의, 당신은 Foo 채울 fooMap를 사용할 수 있습니다

<result property="Foo1" resultMap="fooMap"/>

을하지만 결과 맵은 특정 지정하므로 두 개의 서로 다른 Foos 두 번 그 결과 맵을 사용할 수 없습니다 열 이름 당신은하지만, 또 다른 기술을 사용할 수 있습니다

<result property="foo1.bar" column="foo1bar"/>
<result property="foo2.bar" column="foo2bar"/>

더 많은 세부 사항을 iBatis를 Datamapper 설명서의 35 페이지에.

+0

. 필자의 경우, 재사용하고 싶은 resultMap은 다소 간단하고 하나의 쿼리에서만이 결과를 얻었으므로 지금은 간단하고 단순한 복사 - 붙여 넣기를 유지할 것이다. – Andrew

1

다른 결과 맵을 확장하는 resultmaps를 사용할 수 있습니다. 예 :

<resultMap id="document" class="Document"> 
    <result property="Id" column="Document_ID"/> 
    <result property="Title" column="Document_Title"/> 
    <discriminator column="Document_Type" type="string"/> 
    <subMap value="Book" resultMapping="book"/> 
    <subMap value="Newspaper" resultMapping="newspaper"/> 
</resultMap> 

<resultMap id="book" class="Book" extends="document"> 
    <property="PageNumber" column="Document_PageNumber"/> 
</resultMap> 

대한 추가 정보 : 불행 http://ibatis.apache.org/docs/dotnet/datamapper/ch03s05.html

관련 문제