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>
War es hilfreich?

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top