0

有没有办法在单个查询中多次重用相同的 resultMap。

例如,假设我有一个“foo”resultMap:

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

2 回答 2

3

几乎。如果在查询中选择 Foo 的 ID,则可以让 Fizz 结果映射为该 ID 执行 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"/>

更多细节在 iBatis Datamapper 手册的第 35 页。

于 2008-10-15T15:47:36.010 回答
1

您可以使用结果图,它扩展了另一个结果图,例如

<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

于 2012-06-20T20:39:11.090 回答