是否有办法在单个查询中多次重复使用相同的resultMap。

例如,假设我有一个<!>“foo <!>”;结果映射:

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

有没有办法定义另一个对不同列重用上述内容的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>
有帮助吗?

解决方案

几乎。如果在查询中选择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页的更多细节。

其他提示

您可以使用结果图来扩展另一个结果图 e.g。

<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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top