English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

وظيفة الاستعلام المتعدد في mybatis

 أولاً، دعونا نقدم احتياجًا: استعلام تفاصيل الطلب بناءً على id الطلب - نعلم أن هناك العديد من تفاصيل الطلبات في كل طلب (لمن لم يكن واضحًا الاحتياج، يرجى ترك تعليق أو الذهاب إلى موقع Taobao والنقر على تفاصيل الطلب). في هذه الحالة، طلب واحد، يتطابق مع عدة ids لطلبات. كيف يمكننا استعلام هذا النوع من الطلب؟

  في هذه الحالة، نموذج بياناتنا كما في الشكل أدناه (اليسار). نظرًا لأن استعلام المستخدم هو أيضًا احتياجاتنا، لذا تم توسيع النموذج الأساسي كما في الشكل أدناه (اليمين):

    من الواضح، إذا تم تنفيذها باستخدام طريقة resultType، فإن ذلك غير معقول. لأننا بحاجة إلى إنشاء pojo يحتوي على أوامر وأدوات التفاصيل الخاصة بها، ثم ي映射 لنا mybatis إطار العمل العديد من pojo النماذج (عدد النماذج يساوي عدد أدوات التفاصيل).

    لذلك نحتاج إلى استخدام طريقة resultMap للمعالجة.思想 حل المشكلة: إضافة حقل List لتفاصيل الطلب في فئة orders، وتعريف النوع ليكون Orderdetail. ثم من خلال ملف التكوين، نقوم بتحويل البيانات المكتسبة إلى list باستخدام علامة collection في resultMap.

    التحقيق التفصيلي كما يلي:

  تعليمة SQL

    تحديد جدول الاستعلام الفرعي: جدول تفاصيل الطلب

    تحديد جدول الاستعلام الرئيسي: جدول الطلبات

    يمكن إضافة رابط إلى جدول تفاصيل الطلب على أساس استعلام one-to-one.

SELECT 
 orders.*,
 USER.username,
 USER.sex,
 USER.address,
 id orderdetail_id,
 items_id,
 items_num,
 orderdetail_id
FROM
 orders,
 USER,
 orderdetail
WHERE user_id = user.id AND orderdetail_id = orders_id

  عرض المشكلة

    بعد إكمال الاستعلام، لاحظنا مشكلة: كما هو موضح في الشكل، ظهر id عدة مرات، هذا بسبب استخدام تفاصيل الطلب المختلفة للطلب نفسه في قاعدة البيانات. مما يؤدي إلى ظهور سجل orders في كل سجل. الحلول المحددة، كما ذكرنا في البداية، لن نكررها هنا.

  إضافة خاصية list لتفاصيل الطلب في orders  

  

    تحديد resultMap

<-- خارطة التحويل لطلب واحد و تفاصيل الطلب
  تستخدم extensibility للوراثة، لا تحتاج إلى إعادة تعريف خارطة التحويل للمستخدم
   -->
  <resultMap type="cn.itcast.mybatis.po.Orders" id="dinxtends="OrdersUserResultMap">
    <-- معلومات الطلب
    <-- معلومات المستخدم
    <-- تستخدم extensibility للوراثة، لا تحتاج إلى إعادة تعريف خارطة التحويل للمعلومات حول الطلب والمستخدم
    <-- معلومات تفاصيل الطلب
    تتضمن استعلام الربط لطلب واحد أكثر من سجل تفاصيل الطلب، يجب استخدام collection للتحويل
    collection: ي映射 إلى أكثر من سجل إلى مجموعة من الأجسام المرتبطة
    property: ي映射 إلى أكثر من سجل باستخدام النوع cn.itcast.mybatis.po.Orders أي خاصية
    ofType: تحديد نوع pojo الذي سيتم ت映射ه إلى مجموعة الخصائص list
     -->
     <collection property="orderdetails" ofType="cn.itcast.mybatis.po.Orderdetail">
       --> id: التعرف الفريد للتفاصيل الخاصة بالطلب
       property: يجب نقل التعرف الفريد للتفاصيل الخاصة بالطلب إلى أي خاصية في cn.itcast.mybatis.po.Orderdetail
        -->
       <id column="orderdetail_id" property="id"/>
       <result column="items_id" property="itemsId"/>
       <result column="items_num" property="itemsNum"/>
       <result column="orders_id" property="ordersId"/>
     </collection>
  </resultMap>

      

  mapper  

  

  النهاية

    ببساطة هو استخدام resultMap من collection لت映射多条 السجلات من الاستعلام المربوط إلى مجموعة من الخصائص list.

هذا هو ما أقدمه لك المحرر حول وظيفة الاستعلام المزدوج mybatis، آمل أن يساعدك. إذا كان لديك أي أسئلة، فأرسل لي رسالة، وسأقوم بالرد عليك في الوقت المناسب. وأشكركم أيضًا على دعمكم لموقع呐喊 لتعليم.

البيان: محتوى هذا المقال تم جمعه من الإنترنت، ملكية المقال مملوكة للمؤلف، محتوى تم جمعه من قبل مستخدمي الإنترنت بشكل تلقائي وتحميله، لا يمتلك هذا الموقع حقوق الملكية، لم يتم تعديل المحتوى بشكل يدوي ولا يتحمل هذا الموقع أي مسؤولية قانونية. إذا وجدت محتوى يشتبه في انتهاك حقوق النسخ، فأرجو إرسال بريد إلكتروني إلى: notice#oldtoolbag.com (أثناء إرسال البريد الإلكتروني، يرجى استبدال # ب @) للإبلاغ، وقدم الدليل على الدليل، إذا تم التحقق من صحة المعلومات، سيتم حذف محتوى انتهاك حقوق النسخ المزعوم على الفور.

سيكون لك أن تحب