في الآونة الأخيرة ، قدمت متطلبات استيراد الدُفعات ، وأدنى إدراج سجلات متعددة في قاعدة البيانات.
الحل: تغليف كائن مجموعة قائمة في البرنامج ، ثم أدخل الكيانات في المجموعة في قاعدة البيانات. نظرًا لأن المشروع يستخدم MyBatis ، فمن المخطط استخدام وظيفة myBatis 'foreach لإدخال الدُفعات. خلال هذه الفترة ، واجهت الخطأ "لم ينتهي الأمر SQL بشكل صحيح" ، وأخيراً حلته وسجله للمراجعة والتعلم المستقبلي.
أولاً ، أشرت إلى المعلومات حول إدراج MyBatis 'Foreach عبر الإنترنت ، على النحو التالي:
يستخدم Foreach بشكل أساسي في البناء في الظروف ، ويمكنه التكرار عبر مجموعة في عبارات SQL.
تتضمن سمات عنصر foreach بشكل أساسي العنصر والفهرس والمجموعة والمفتوحة والفاصل والإغلاق.
يمثل العنصر الاسم المستعار عندما يتم تكرار كل عنصر في المجموعة. يحدد الفهرس اسمًا لتمثيل الموضع الذي يتم الوصول إليه لكل تكرار أثناء عملية التكرار. يمثل Open ما يبدأ بالبيان ، ويمثل الفاصل ما هي الرموز التي يتم استخدامها كفواصل بين كل تكرار ، ويمثل الإغلاق ما ينتهي. الشيء الأكثر أهمية والأكثر عرضة للخطأ عند استخدام foreach هو سمة المجموعة. يجب تحديد هذه السمة ، ولكن في حالات مختلفة ، تختلف قيمة السمة. هناك ثلاث حالات رئيسية:
1. إذا تم تمريره في معلمة واحدة ونوع المعلمة هو قائمة ، فإن قيمة سمة المجموعة هي قائمة
2. إذا تم تمريره في معلمة واحدة ونوع المعلمة عبارة عن صفيف ، فإن قيمة خاصية المجموعة هي صفيف
3. إذا كانت هناك معلمات متعددة تم تمريرها ، فنحن بحاجة إلى تغليفها في خريطة. بالطبع ، يمكن أيضًا تغليف معلمة واحدة في خريطة.
ثم ، تمت كتابة ملف XML التالي وفقًا للنسخة.
ملف xxxmapper.xml:
<insert id = "addSupCity" parametertype = "java.util.list"> <selectekey keyproperty = "cityid" order = "ext" area_desc ، sup_id ، stat) القيم <foreach collection = "list" item = "item" index = "index" explator = "،"> (#{item.cityid ، jdbctype = varchar} ،#{item.citycode ، jdbctype = varchar} ،#{item.cityname ، jdbctype = varchar} ،#{item .areadesc ، jdbctype = varchar} ،#{item.supid ، jdbctype = varchar} ،#{item.stat ، jdbctype = varchar}) </foreach> </sert>ومع ذلك ، بعد التشغيل ، يستمر في الإبلاغ عن الأخطاء ، ورسالة الخطأ هي كما يلي:
### SQL: أدخل في T_OCL_SUPCITY (CITY_ID ، CITY_CODE ، CITY_NAME ، AREA_DESC ، SUP_ID ، Stat) (؟ ،؟ ،؟ ،؟ ،؟ ،؟) ، (؟ ،؟ ،؟ ،؟ ،؟ ،؟)
تقارير نسخ SQL وتشغيله في PL/SQL أيضًا عن الخطأ نفسه. كما يمكن أن نرى أعلاه ، فإن عبارات SQL التي تم تنفيذها باستخدام إدراج الدُفعات تعادل: إدراج في T_OCL_SUPCITY (CITY_ID ، CITY_CODE ، CITY_NAME ، AREA_DESC ، SUP_ID ، STAT) (؟ ،؟ ،؟ ،؟ ،؟) ، (؟ ،؟ ،؟ لا مثيل له. إذا نظرنا إلى هذا المقال ، فقد وجدت أن هذا مناسب لـ MySQL وليس لـ Oracle ، لذلك قمت بتعديل ملف XML:
<insert id = "addSupCity" parametertype = "java.util.list"> insert in t_ocl_supcity (city_id ، city_code ، city_name ، area_desc ، sup_id ، stat) حدد seq_ocl_supcity #{item.citycode ، jdbctype = varchar} city_code ،#{item.cityname ، jdbctype = varchar} city_name ،#{item.areadesc ، sup_id ،#{item.stat ، jdbctype = varchar} statfrom dual </foreach>) a </sert>يركض.
في إصدار Oracle ، هناك بعض الأشياء التي يجب ملاحظة:
1. لا توجد قيم في SQL ؛
2. (سيليسي ...... من مزدوج) ؛
3. سمة الفاصل في علامة <Foreach> هي "Union All" ، وسيتم دمج الاستعلام في مجموعة النتائج.
ما سبق هو حل سريع لخطأ إدراج الدُفعة لأوراكل+mybatis foreach ، أدخلك من قبل المحرر. آمل أن يكون ذلك مفيدًا لك. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر إليك في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!