2008-10-15 28 views
0

有沒有在單個查詢中多次重複使用相同resultMap的方法?將結果映射重用於不同的列名

例如,假設我有一個「富」結果:

<resultMap id="foo" class="Foo"> 
    <result property="Bar" column="bar" /> 
</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結果地圖對該ID執行SELECT,該地圖將使用Foo結果地圖。

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

(假設你有定義的selectFoo查詢。)但是,這與大的結果集非常緩慢,因爲它額外的SELECT的每一行。

對於典型情況,您有一個包含各種其他對象的組合對象,iBATIS有解決此問題的辦法。首先,定義加入到您的表的查詢,那麼你可以使用fooMap來填充Foo

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

但是因爲結果地圖指定某些無法使用結果地圖兩次兩個不同Foos列名稱。在iBatis的DataMapper的手冊第35頁

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

更多細節:您可以使用另一種方法,雖然。

+0

這是不幸的。 在我的情況下,我想重用的resultMap非常簡單,我只在一個查詢中找到它,所以我會保持簡單,只需* gasp *複製粘貼。 – Andrew 2008-10-15 16:32:49

1

您可以使用結果圖,這可以擴展另一個結果圖

<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

相關問題