Domanda

Esiste un modo per riutilizzare lo stesso risultato Mappa più volte in una singola query.

Ad esempio, supponiamo che io abbia un " foo " resultMap:

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

C'è un modo per definire un altro risultatoMappa che riutilizza quanto sopra per colonne diverse? Qualcosa come ...

<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>
È stato utile?

Soluzione

Quasi. Se selezioni l'ID di Foo nella tua query, puoi fare in modo che la mappa dei risultati di Fizz esegua un SELECT per quell'ID, che utilizzerà la mappa dei risultati di Foo.

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

(Supponendo che sia stata definita una selectFoo query.) Ma è estremamente lento con set di risultati di grandi dimensioni, poiché esegue un ulteriore SELECT per ogni riga.

iBATIS ha una soluzione a questo problema per il caso tipico, in cui hai un oggetto composito che contiene vari altri oggetti. Innanzitutto, definisci una query che unisce le tue tabelle, quindi puoi utilizzare fooMap per popolare un Foo:

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

Ma non puoi usare quella mappa dei risultati due volte per due diversi Foos perché la mappa dei risultati specifica determinati nomi di colonne. Puoi usare un'altra tecnica, però:

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

Maggiori dettagli a pagina 35 del manuale iBatis Datamapper.

Altri suggerimenti

è possibile utilizzare le mappe dei risultati, che estendono un'altra mappa dei risultati per es.

<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>

maggiori informazioni: http://ibatis.apache.org/docs/dotnet /datamapper/ch03s05.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top