Pergunta

Existe uma maneira de reutilizar a mesma resultMap várias vezes em uma única consulta.

Por exemplo, suponha que eu tenho um resultMap "foo":

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

Existe uma maneira para definir outro resultMap que reutiliza o acima para diferentes colunas? Algo 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>
Foi útil?

Solução

Quase. Se você selecionar a ID do Foo em sua consulta, você pode ter o mapa resultado Fizz executar um SELECT para essa ID, que usará o mapa resultado Foo.

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

(Supondo que você tenha uma consulta selectFoo definido.) Mas isso é extremamente lento com grandes conjuntos de resultados, uma vez que faz um seletos adicionais para cada linha.

iBATIS tem uma solução para este problema para o caso típico, onde você tem um objeto composto que contém vários outros objetos. Primeiro, você definir uma consulta que associa as tabelas, então você pode usar fooMap para preencher um Foo:

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

Mas você não pode usar esse mapa resultado duas vezes para dois Foos diferente porque o mapa resultado especifica certos nomes das colunas. Você pode usar uma outra técnica, no entanto:

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

Mais detalhes na página 35 do manual iBatis Datamapper.

Outras dicas

você poderia usar resultmaps, que se estendem outra resultmap por exemplo.

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

Mais informações: http://ibatis.apache.org/docs/dotnet /datamapper/ch03s05.html

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top