0

1 つのクエリで同じ resultMap を複数回再利用する方法はありますか。

たとえば、「foo」の resultMap があるとします。

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

上記を異なる列に再利用する別の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>
4

2 に答える 2

3

ほとんど。クエリでFooのIDを選択すると、Fizz結果マップにそのIDのSELECTを実行させることができます。これにより、Foo結果マップが使用されます。

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

(クエリが定義されていると仮定しますselectFoo。)ただし、結果セットが大きい場合は、行ごとに追加のSELECTが実行されるため、非常に遅くなります。

iBATISには、他のさまざまなオブジェクトを含む複合オブジェクトがある一般的なケースに対するこの問題の解決策があります。最初に、テーブルを結合するクエリを定義してから、を使用fooMapしてFoo:を設定できます。

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

Foosただし、結果マップは特定の列名を指定しているため、その結果マップを2つの異なるものに2回使用することはできません。ただし、別の手法を使用できます。

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

詳細については、iBatisDatamapperマニュアルの35ページを参照してください。

于 2008-10-15T15:47:36.010 に答える
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

于 2012-06-20T20:39:11.090 に答える