1. تنفيذ استعلام SQL مباشرة:
1. مقتطفات من ملفات المحاصر
<resultmap id = "acmodelresultmap" type = "com.izumi.instancemodel"> <result column = "estanceId" property = "estanceId" jdbctype = "varchar" /> <result column = "instancename" property = "instancename" jdbctype = "varchar" /> resultType = "com.izumi.instancemodel"> $ {paramsql} </select>2. مقتطف من داو
الواجهة العامة Somedao {List <StanceModel> getInstancemodel (param ("paramsql") String SQL) ؛}3. أشياء يجب ملاحظتها
3.1: يجب أن تتبع معلمات الطريقة التي تم تمريرها المواصفات التالية "SELECT XXX as anutyid ، xxx as instancename ....." ، وإلا لا يمكن لـ MyBatis تحويل نتيجة الاستعلام تلقائيًا إلى كائن Java.
3.2: الفرق بين بناء الجملة #{} و $ {} بناء الجملة في ملف MAPPERS:
بشكل افتراضي ، يتسبب بناء الجملة في #{} إذا كنت ترغب في استبدال السلاسل التي لم تتغير مباشرة إلى SQL ، فيمكنك استخدام $ {}.
بمعنى آخر ، عندما يرى MyBatis #{} ، فإنه يعتقد أنك تقوم بتعيين قيم للمتغيرات في SQL ، تمامًا كما هو الحال في برمجة JDBC لتعيين قيم لعلامات الأسئلة (على سبيل المثال ، ستحكم MyBatis على نوعها وإضافة عروض أسعار واحدة تلقائيًا قبل وبعد). عندما يرى MyBatis $ {} ، فسوف يحل محله مباشرة بقيمة المتغير دون القيام بأي معالجة.
لذلك عند استخدام $ {} ، لا تحتاج إلى كتابة سمات مثل "jdbctype = varchar" مثل #{}.
3.3: resultType و ResultMap
وفقًا لطريقة الكتابة في 1 ، يمكن حذف جزء <ReprendMap> دون استخدامه ، لأنه في <SELECT> التالي ، لم يتم استخدام خريطة النتيجة المحددة ، ولكن يتم استخدام ResultType.
لذلك يمكننا أن نرى أن هناك طريقتان لكتابة تعريف قيمة الإرجاع لـ <select>. واحد هو تحديد النتيجة ثم الرجوع إلى هذه النتيجة. والآخر هو استخدام ResultType مباشرة لتحديد مسار الفصل.
2. إدخال دفعة من البيانات
1. تخبرنا التجربة أن استخدام إدراج في قيم XXX (XX) (XXX) (XXX) أكثر كفاءة من استخدام الإدراج في قيم XXX (XX) ، إدراج في قيم XXX (XXX) ، إدراج في قيم xxx (xxx).
2. الاستخدام في MyBatis
2.1. مقتطفات من ملف MAPPERS
<insert id = "insertbatch"> insert في الطالب (<تضمين refid = "base_column_list" />) القيم <foreach collection = "list" item = "item" index = "expelator =" ، "> (null ،#{item.name} ،#{item.sex} ،#{item.address} </foreach> </sert>2.2. مقتطف من داو
الواجهة العامة Somedao {public void insertbatch (param ("list") قائمة <Tudture> الطلاب) ؛ }شرح مفصل لبيانات إدخال دفعة MyBatis
انظر أولاً إلى ملف batch mapper.xml
<insert id = "insertBatch" parametertype = "java.util.list"> <selecteKey keyproperty = "fetchTime" order = "regudtype =" java.lang.string "> حدد current_timestamp () </selectekey> Unit ، Advance_Certificate ، الشركة المصنعة ، MarketPrice ، vipprice ، موقع الويب ، Fetch_time ، ProductDesc) <foreach collection = "list" item = "item" index = "index" felector = "،"> ( #{item.depart1} ، #{item.depart2} ، #{item.produc #{item.img} ، #{item.productspecification} ، #{item.unit} ، #{item.approvalCertificate} ، #{item.Manufacturer} ، #{item.marketprice} ، #{item.vipprice} ، #{item.webbsite} ، #{} ) </foreach> </sert>في معالجة الدُفعات ، وجدت أن هناك العديد من المشكلات التي تحتاج إلى الاهتمام.
1. الحصول تلقائيا الحصول على المفتاح الأساسي. أضف eSUGEREDEDKEYS = "true" keyproperty = "id" في إدراج. خصائص الخصائصين غير صالحة وقد تقاطع إدخال البيانات. إذا كان المعرف هو قاعدة البيانات الذاتية ، فيمكنك كتابة أي شيء. قم بإزالة سمة المفتاح الأساسي في العبارة المدرجة ، واستخدمها.
<selectekey keyproperty = "id" order = "قبل" resultType = "java.lang.integer"> حدد last_insert_id () </selectekey>
ملاحظة: يمكن أن توجد علامة <selectekey> فقط في إدراج ؛ إنه ليس مناسبًا لاستخدام <selectekey> أثناء معالجة الدُفعات. من الأفضل زيادة المفتاح الأساسي نفسه ، أو تحديده.
2. الحصول على وقت الإدراج يظهر أعلاه. أنا أستخدم MySQL. طالما أنها وظيفة mySQL ، يمكن استخدامها. يعد وقت الإدراج والمفتاح الأساسي أحد وظائف MySQL. . .