異なる列名にresultMapを再利用する
-
03-07-2019 - |
質問
1つのクエリで同じresultMapを複数回再利用する方法はありますか。
たとえば、<!> quot; foo <!> quot;があるとします。 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>
解決
ほぼ。クエリでFooのIDを選択すると、Fizz結果マップにそのIDのSELECTを実行させることができ、Foo結果マップが使用されます。
<result property="Foo1" column="bar1Id" select="selectFoo"/>
(selectFoo
クエリが定義されていると仮定します。)しかし、すべての行に対して追加のSELECTを実行するため、結果セットが大きい場合は非常に遅くなります。
iBATISには、他のさまざまなオブジェクトを含む複合オブジェクトがある典型的なケースで、この問題に対する解決策があります。最初に、テーブルを結合するクエリを定義します。次に、fooMap
を使用してFoo
:
<result property="Foo1" resultMap="fooMap"/>
ただし、結果マップは特定の列名を指定しているため、2つの異なるFoos
に対してその結果マップを2回使用することはできません。ただし、別の手法を使用することもできます。
<result property="foo1.bar" column="foo1bar"/>
<result property="foo2.bar" column="foo2bar"/>
iBatis Datamapperマニュアルの35ページの詳細。
他のヒント
別の結果マップを拡張する結果マップを使用できます 例:
<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