هذه المقالة هي المعرفة حول مشكلات رسم كيان ومجتمع في MyBatis التي جلبها لك المحرر. إن تعلم هذا البرنامج التعليمي يمكن أن يساعدنا بسرعة في حل مشكلة الصراع لأسماء الحقول المختلفة وأسماء سمات فئة الكيان. الأصدقاء الذين يحتاجون إليها ، دعونا نلقي نظرة!
1. قم بإعداد الجداول والبيانات لاستخدامها في العرض التوضيحي
إنشاء أوامر الجدول (order_id int int key into_increment ، order_no varchar (20) ، order_price float) ؛ insert في الطلبات (order_no ، order_price) ("aaaa '، 23) ؛ إدراج في الطلبات (order_no ، order_price) قيم (' bbb '، 33) 22) ؛2. تحديد فصول الكيانات
حزمة me.gacl.domain ؛/*** author gaCl*حدد فئة الكيان المقابلة لجدول الطلبات*/ترتيب الفئة العامة {/*** إنشاء أوامر الجدول (order_id int in ins ato_increment ، order_no varchar (20) ، order_price float) ؛*///اسم السمة في فئة Entity entity و name in the Orders. // id ===> order_idprivate string orderno ؛ // orderno ===> order_noperive price float ؛ // price ===> order_pricepublic int getId () {return id ؛} public void setId (int id) {this.id = id ؛} السلسلة العامة getorderno () {return orderno ؛} public void setorderno (string orderno) {this.orderno ؛ orderno ؛ {this.price = price ؛}@sturridepublic string toString () {return "order [id =" + id + "، orderno =" + orderno + "، price =" + price + "] ؛}}3. اكتب رمز الاختبار
3.1. اكتب ملف تعيين SQL XML
1. إنشاء ملف ordermapper.xml. محتوى ordermapper.xml كما يلي:
<؟ xml version = "1.0" encoding = "utf-8"؟> <! doctype mapper public "-// mybatis.org//dtd mapper 3.0 // en" يتم تعيين قيمة مساحة الاسم بشكل تقليدي على اسم ملف التعيين + SQL ، بحيث يمكن ضمان قيمة مساحة الاسم لتكون فريدة من نوعها
على سبيل المثال ، مساحة names = "me.gacl.mapping.ordermapper" هي me.gacl.mapping (اسم الحزمة) + OrderMapper (ملف ordermapper.xml لإزالة اللاحقة)
-> <mapper namepace = "me.gacl.mapping.orderMapper"> <!-احصل على كائن طلب بناءً على استعلام المعرف. لا يمكن لاستخدام هذا الاستعلام الاستعلام عن النتيجة التي نريدها. يرجع ذلك بشكل أساسي إلى أن اسم سمة فئة الكيان لا يتوافق مع اسم الحقل لقاعدة البيانات ، وبالتالي لا يمكن الاستعلام عن السجل المقابل-> <select id = "getorderbyid" parametertype = "int" resulttype = "me.gacl.domain.order"> SELECT * من الأوامر التي يكون فيها ORDER_ID =#{id} </select </select </select باستخدام هذا الاستعلام ، يمكننا عادة الاستعلام عن النتيجة التي نريدها. هذا لأننا سنعطي الاستعلام اسم مستعار بنفس الاسم المستعار باسم اسم سمة فئة الكيان ، بحيث يمكن أن يتوافق اسم سمة فئة الكيان واسم الحقل في نتيجة الاستعلام واحدًا-> <تحديد ID = "Selectorder" parametertype = "int" resulttype = "me.gacl.domain.order" order_id =#{id} </select> <!- احصل على كائن طلب بناءً على استعلام المعرف. باستخدام هذا الاستعلام ، يمكننا الاستعلام عن النتيجة التي نريدها بشكل طبيعي. هذا لأننا نرسم المراسلات الواحدة بين اسم سمة فئة الكيان واسم حقل الجدول من خلال <RepresultMap> ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ column = "order_id"/> <!-استخدم سمة النتيجة إلى خريطة حقول المفاتيح غير الأولية-> <result property = "orderno" column = "order_no"/> <result property = "price column =" order_price "/> <result property =" price "column =" order_price "2. قم بتسجيل ملف تعيين ordermapper.xml في ملف conf.xml
<mappers> <!- سجل ملف ordermapper.xml. يقع ordermapper.xml في الحزمة me.gacl.mapping ، لذلك يتم كتابة المورد كأني/gacl/mapping/ordermapper.xml-> <mapper resource = "me/gacl/mapping/ordermapper.xml"/> </craps>
3.2. كتابة رمز اختبار الوحدة
package me.gacl.test ؛ import me.gacl.domain.order ؛ import me.gacl.util.mybatisutil ؛ import org.apache.ibatis.session.sqlSession mybatisutil.getsqlsession () ؛/*** سلسلة التعريف لرسم خرائط SQL ،* me.gacl.mapping.orderMapper هي قيمة سمة مساحة الاسم لعلامة Mapper في ملف ordermapper.xml ، من خلال قيمة سمة المعرف الخاصة بعلامة SELECT ، يمكنك العثور على SQL المراد تنفيذه*/string state = "me.gacl.mapping.ordermapper.getorderbyid" ؛ // رسم خرائط لسلسلة تعريف SQL // تنفيذ عملية الاستعلام و Quary تلقائيًا في Query table في كائن أمر وإرجاع الترتيب = sqlsession.selectOne. باستخدام SQLSession Execute SQL ، تحتاج إلى إغلاق sqlsessionsqlsession.close () ؛ system.out.println (order) ؛ // print result: null ، أي أنه لم يتم العثور على سجل مقابل} testpublic void testgetorderbyid2 () {sqlsession sqlsession = mybatisutil.getsqlsession () ملف ordermapper.xml ، * SECECTORDER هو قيمة سمة المعرف لعلامة تحديد. من خلال قيمة سمة المعرف الخاصة بعلامة SELECT ، يمكنك العثور على SQL المراد تنفيذه باستخدام قيمة سمة المعرف لعلامة SELECT*/string = "me.gacl.mapping.ordermapper.selector" ؛ المعرف 1 في جدول الطلبات // بعد تنفيذ SQL باستخدام SQLSession ، تحتاج إلى إغلاق sqlsessionsqlsession.close () ؛ system.out.println (order) ؛ // print result: order [id = 1 ، orderno = aaaa ، price = 23.0]}@testpublic void testgetorderbyid3 () من علامة mapper في ملف ordermapper.xml ، * SecectorDerResultMap هي قيمة سمة المعرف لعلامة تحديد. من خلال قيمة سمة المعرف الخاصة بعلامة SELECT ، يمكن العثور على SQL المراد تنفيذه*/string state = "me.gacl.mapping.ordermapper.selectorderResultMap" ؛ // رسم خرائط لسلسلة هوية SQL // تنفيذ عملية الاستعلام تلقائيًا ، وتغليف نتيجة الاستعلام تلقائيًا وترتيب ترتيب الإرجاع = sqlsession.selecton. جدول // بعد استخدام SQLSession لتنفيذ SQL ، تحتاج إلى إغلاق sqlsessionsqlsession.close () ؛ system.out.println (order) ؛ // print result: order [id = 1 ، orderno = aaaa ، price = 23.0]}}نتائج تنفيذ اختبارات الوحدة:
1. طريقة TestgetOrderByID تُرجع خالية بعد تنفيذ الاستعلام.
2. بعد تنفيذ طريقة TestgetOrderById2 وطريقة TestgetOrderById3 ، يمكنك الحصول على النتيجة المطلوبة بشكل طبيعي.
4. ملخص
يوضح رمز الاختبار أعلاه المشكلة أنه عندما يكون اسم السمة في فئة الكيان واسم الحقل في الجدول غير متناسق ، لا يمكن الاستعلام عن النتائج المقابلة عند استخدام MyBatis لعمليات الاستعلام ، ويتم اعتماد طريقتين للمشكلة:
الحل 1: تحديد الاسم المستعار لاسم الحقل في عبارة الاستعلام SQL ، بحيث يتوافق الاسم المستعار لاسم الحقل مع اسم السمة لفئة الكيان ، بحيث يمكن أن يتوافق اسم حقل الجدول واحدًا تلو الآخر مع اسم السمة لفئة الكيان. تحل هذه الطريقة علاقة التعيين بين اسم الحقل واسم السمة من خلال تحديد الاسم المستعار في عبارة SQL.
الحل 2: قم بتخطيط المراسلات الفردية بين أسماء الحقول وأسماء سمات فئة الكيان عن طريق التعيين. تستخدم هذه الطريقة الحل الذي توفره MyBatis لحل علاقة التعيين بين أسماء الحقول وأسماء السمات.