في الآونة الأخيرة ، نظرًا لاحتياجات العمل في نظام التجارة الإلكترونية ، أحتاج إلى العودة إلى معرف المنتج بعد إدخال معلومات المنتج. في البداية ، واجهت بعض المزالق ، لذلك أخذت ملاحظات هنا لمنعها من نسيانها في المستقبل.
احصل على المفتاح الأساسي المدرج مثل الرمز التالي
مستخدم المستخدم = مستخدم جديد () ؛ user.setuserName ("Chenzhou") ؛ user.setPassword ("xxxx") ؛ user.setComment ("اختبار وظيفة إدخال البيانات لإرجاع المفتاح الأساسي") ؛ System.out.println ("المفتاح الأساسي قبل الإدراج هو:"+user.getuserId ()) ؛ userDao.insertandgetId (user) ؛ // insert Operation System.out.println ("المفتاح الأساسي بعد الإدراج هو:"+user.getuserid ()) ؛بعد الاستعلام عن معلومات عبر الإنترنت ، وجدت أن هناك طريقتين تقريبًا.
الطريقة 1:
في ملف تعيين فئة الكيان "*mapper.xml" مكتوبة مثل هذا:
<insert id = "insertAndGetID" usegeneratedKeys = "true" keyproperty = "userId" parametertype = "com.chenzhou.mybatis.user"> insert في المستخدم (اسم المستخدم ، كلمة المرور ، التعليق) القيم (#{username} ،#{password} ،#{comment}) </insert>نصائح:
usegeneratedKeys = "true" يعني ضبط النمو الذاتي للمفتاح الأساسي
KeyProperty = "userId" يعني تعيين معرف النمو لحقل المستخدم في فئة الكيان.
parametertype = "com.chenzhou.mybatis.user" تشير هذه الخاصية إلى فئة كيان المعلمة التي تم تمريرها
فيما يلي تذكير بأنه لا توجد سمة resultType في <Sert> </sert> ، لذلك لا تضيفها بشكل عشوائي.
يجب أن يكون لـ uerid في فئة الكيان getter () و setter () ؛ طريقة
منذ أن قمت بالفعل بإعداد النمو الذاتي للحقل عند إنشاء جداول في قاعدة بيانات MySQL ، اخترت أخيرًا الطريقة الثانية.
الطريقة الثانية:
أيضًا في ملف التعيين "*mapper.xml" من فئة الكيان ، ولكن يجب أن تتم كتابته مثل هذا:
<!-أدخل منتج-> <insert id = "insertProduct" parametertype = "domain.model.productbean"> <selecteke T_Product (ProductName ، ProductDesRcible ، MerchantId) القيم (#{ProductName} ،#{productDesRcible} ،#{merchantid}) ؛ </insert>نصائح:
لا توجد سمة resultType في <Sert> </sert> ، ولكن هناك علامة <selectekey> </selectekey>.
order = "بعد" يعني أنه يتم تنفيذ بيان الإدراج أولاً ، ثم يتم تنفيذ بيان الاستعلام.
يمكن ضبطها قبل أو بعد.
إذا تم تعيينه على ذلك من قبل ، فسيتم تحديد المفتاح الأساسي أولاً ، وقم بتعيين KeyProperty ثم قم بتنفيذ عبارة INSERT.
إذا تم تعيينه على بعد ، ثم قم بتنفيذ عبارة INSERT أولاً ، ثم عنصر SELECTEKEY - على غرار قاعدة بيانات ORACLE ، يمكنك تضمين مكالمات التسلسل في عبارة إدراج ، كما هو الحال في قاعدة بيانات ORACLE.
KeyProperty = "userId" يعني تعيين معرف النمو لحقل المستخدم في فئة الكيان.
SELECT LAST_INSERT_ID () يعني أن معرف النمو الذاتي للسجل الذي تم إدخاله للتو يتم الاستعلام عنه في بناء جملة MySQL.
يجب أن يكون لـ uerid في فئة الكيان getter () و setter () ؛ طريقة
لتحقيق المتطلبات ، ما ورد أعلاه يكفي.
إذا كنت مهتمًا هنا ، فيرجى الاستمرار في الاستماع إلي حول خطأ محتمل في MyBatis.
لماذا يتم تعديل طريقة الإضافة في MyBatis لقيمة إرجاع ، على الرغم من أنه يطالب بأن قاعدة بيانات الإدراج ناجحة ويمكن قراءة البيانات التي تم إدخالها ، ولكن عند فتح قاعدة البيانات ، لا يمكنك رؤية البيانات التي تم إدخالها؟
إذا كنت ترغب في إدراج المفتاح الأساسي وإرجاعه عند تنفيذ المتطلبات المذكورة أعلاه ، تذكر عدم الكتابة بهذه الطريقة.
Override Public insertProduct (ProductBean ProductBean) {// todo method method method method sqlsession session = mybatisjdbcutil.currentsession () ؛ ProductIdao ProductIdao = Session.getMapper (ProductIdao.class) ؛ // هنا *.class // يجب أن تتوافق مع طبقة واجهة DAO Return ProductIdao.insertProduct (ProductBean) ؛ }لماذا؟
لأنه إذا كتبت كما هو موضح أعلاه ، فإن عودة معرف المفتاح الأساسي الذي تريده بعد التنفيذ ليس هو عدد الصفوف المتأثرة بعد تنفيذ عبارة قاعدة البيانات.
علاوة على ذلك ، بعد تنفيذها ، ستجد أن المطالبة ناجحة في الإدراج ، ويمكنك أيضًا قراءة البيانات التي تم إدخالها باستخدام الرمز ، ولكن هناك دائمًا سجل واحد فقط.
علاوة على ذلك ، عند فتح قاعدة البيانات ، ستجد أنه لم يتم إدخال أي بيانات بنجاح في قاعدة البيانات.
لقد تعرضت للاكتئاب هنا لفترة طويلة واكتشفت أخيرًا النقطة الرئيسية.
الفرق بين وجود قيمة إرجاع وعدم وجود قيمة إرجاع هو:
قيمة الإرجاع هي فقط للوصول إلى وضع قاعدة البيانات للقراءة فقط ، ولن يكون هناك تعديل لبيانات قاعدة البيانات ، مثل الطرق المختلفة للاستعلام.
إذا لم تكن هناك قيمة إرجاع ، فسيتم الوصول إلى قاعدة البيانات في وضع القراءة والكتابة ، وسيتم تعديل البيانات الموجودة في قاعدة البيانات ، مثل الحذف والإضافة.
بالإضافة إلى ذلك ، وفقًا للفهم الشخصي ، يجب على MyBatis أولاً ذاكرة التخزين المؤقت لها في مجموعة شبيهة بالجلسة المشتركة عند تنفيذ عبارة INSERT ، ثم اتصل بالسائق الأساسي لتشغيل قاعدة البيانات وتعديلها.
session.Commit () ؛ mybatisjdbcutil.closesession () ؛
لم يتم إرجاع البيانين أعلاه ، مما يعني أنه بعد تنفيذ هذين البيانين فقط ، سيتم تنفيذهما حقًا وإدراجهما في قاعدة البيانات وتعديل البيانات في قاعدة البيانات.
على العكس من ذلك ، إذا كانت هناك قيمة إرجاع ، لم يتم تنفيذ هذين البيانين ، لذلك يتم تنفيذ بيان الإضافة فقط في الجلسة التي تم إنشاؤها بمفرده ، ولكن لا يتم تقديمها إلى قاعدة البيانات ، لذلك لا يوجد سجل في قاعدة البيانات.
هذا ما يفسر لماذا بعد تعديل طريقة الإضافة في MyBatis للحصول على قيمة إرجاع ، على الرغم من أنه يطالب بإدراج قاعدة البيانات بنجاح ، لا يمكنك رؤية البيانات المدرجة عند فتح قاعدة البيانات.
لا ينبغي أن يكون طريقة بيان الإدراج في MyBatis قيمة إرجاع ، لأن الكتابة مثل هذه صحيحة.
Override public void insertProduct (ProductBean ProductBean) {// todo method method method squlsession session = mybatisjdbcutil.currentsession () ؛ ProductIdao ProductIdao = Session.getMapper (ProductIdao.class) ؛ // هنا *.class // يجب أن تتوافق مع طبقة واجهة DAO ProductIdao.insertProduct (ProductBean) ؛ session.Commit () ؛ mybatisjdbcutil.closesession () ؛ }ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.