سؤال

هل هناك طريقة لإعادة استخدام نفس resultMap عدة مرات في استعلام واحد.

وعلى سبيل المثال، لنفترض أن لدي "فو" resultMap:

<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>
هل كانت مفيدة؟

المحلول

وتقريبا. إذا قمت بتحديد معرف فو في الاستعلام الخاص بك، يمكنك الحصول على خريطة نتيجة الفوران تنفيذ SELECT لذلك ID، والتي سوف تستخدم خريطة نتيجة فو.

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

نصائح أخرى

هل يمكن استخدام resultmaps، التي تمتد resultmap آخر منها مثلا.

<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