Pregunta

¿Hay alguna manera de reutilizar el mismo resultado? Mapa varias veces en una sola consulta.

Por ejemplo, supongamos que tengo un " foo " resultMap:

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

¿Hay alguna manera de definir otro resultMap que reutilice lo anterior para diferentes columnas? Algo así como ...

<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>
¿Fue útil?

Solución

Casi. Si selecciona la ID del Foo en su consulta, puede hacer que el mapa de resultados de Fizz ejecute un SELECT para esa ID, que utilizará el mapa de resultados de Foo.

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

(Suponiendo que tiene una consulta selectFoo definida). Pero eso es extremadamente lento con grandes conjuntos de resultados, ya que hace un SELECT adicional para cada fila.

iBATIS tiene una solución a este problema para el caso típico, donde tiene un objeto compuesto que contiene varios otros objetos. Primero, define una consulta que une sus tablas, luego puede usar fooMap para completar un Foo:

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

Pero no puede usar ese mapa de resultados dos veces para dos Foos diferentes porque el mapa de resultados especifica ciertos nombres de columna. Sin embargo, puede usar otra técnica:

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

Más detalles en la página 35 del manual de iBatis Datamapper.

Otros consejos

podría usar los mapas de resultados, que extienden otro mapa de resultados por ejemplo,

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

más información: http://ibatis.apache.org/docs/dotnet /datamapper/ch03s05.html

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top