Wiederverwenden eine resultMap für verschiedene Spaltennamen
-
03-07-2019 - |
Frage
Gibt es eine Möglichkeit, die gleiche resultMap mehrfach in einer einzigen Abfrage wiederzuverwenden.
Angenommen, ich habe eine "foo" resultMap:
<resultMap id="foo" class="Foo">
<result property="Bar" column="bar" />
</resultMap>
Gibt es eine Möglichkeit eine andere resultMap zu definieren, die die oben für die verschiedenen Spalten wieder verwendet? So etwas wie ...
<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>
Lösung
Fast. Wenn Sie die ID der Foo in Ihrer Abfrage auswählen, können Sie die Fizz Ergebnis Karte eine SELECT für diese ID auszuführen haben, die die Foo Ergebnis Karte verwendet wird.
<result property="Foo1" column="bar1Id" select="selectFoo"/>
(Vorausgesetzt, dass Sie eine selectFoo
Abfrage definiert haben.) Aber das ist extrem langsam mit großen Ergebnismengen, da es nicht einem zusätzlichen für jede Zeile SELECT.
iBATIS hat eine Lösung für dieses Problem für den typischen Fall, in dem Sie ein zusammengesetztes Objekt, das verschiedene andere Objekte enthält. Zuerst Sie eine Abfrage definieren, die Ihre Tabellen verknüpft, dann können Sie fooMap
verwenden, um eine Foo
zu füllen:
<result property="Foo1" resultMap="fooMap"/>
Sie können aber nicht, dass die Ergebniskarte zweimal für zwei verschiedene Foos
verwenden, da das Ergebnis der Karte bestimmte Spaltennamen angibt. Sie können eine andere Technik verwenden, aber:
<result property="foo1.bar" column="foo1bar"/>
<result property="foo2.bar" column="foo2bar"/>
Weitere Einzelheiten in Seite 35 des iBatis Datamapper Handbuch.
Andere Tipps
könnten Sie resultmaps, die eine andere resultmap verlängern z.
<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>
Weitere Informationen: http://ibatis.apache.org/docs/dotnet /datamapper/ch03s05.html