Повторное использование resultMap для разных имен столбцов - PullRequest
0 голосов
/ 15 октября 2008

Есть ли способ повторного использования одной и той же карты результатов несколько раз в одном запросе.

Например, предположим, у меня есть результат "foo" Карта:

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

Есть ли способ определить другую карту результата, которая использует вышеупомянутое для других столбцов? Что-то вроде ...

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

Ответы [ 2 ]

2 голосов
/ 15 октября 2008

Почти. Если вы выберете идентификатор Foo в своем запросе, вы можете заставить карту результатов Fizz выполнить SELECT для этого идентификатора, которая будет использовать карту результатов Foo.

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

(Предполагается, что у вас определен запрос selectFoo.) Но это очень медленно для больших наборов результатов, поскольку он выполняет дополнительный SELECT для каждой строки.

iBATIS имеет решение этой проблемы для типичного случая, когда у вас есть составной объект, который содержит различные другие объекты. Сначала вы определяете запрос, который объединяет ваши таблицы, затем вы можете использовать fooMap для заполнения Foo:

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

Но вы не можете использовать эту карту результатов дважды для двух разных Foos, потому что карта результатов указывает определенные имена столбцов. Вы можете использовать другую технику, хотя:

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

Подробнее на странице 35 руководства iBatis Datamapper.

1 голос
/ 21 июня 2012

вы можете использовать таблицы результатов, которые расширяют другую карту результатов например,

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

подробнее: http://ibatis.apache.org/docs/dotnet/datamapper/ch03s05.html

...