إعادة استخدام resultMap عن أسماء الأعمدة مختلفة
-
03-07-2019 - |
سؤال
هل هناك طريقة لإعادة استخدام نفس 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