في تطوير المشروع ، غالبًا ما نواجه مواقف حيث قد لا تكون أسماء الحقل في الجدول وأسماء السمات لفئات الكيان المقابلة للجدول هي نفسها تمامًا. سوف يوضح المحرر التالي لك كيفية حل مشكلة الصراع لأسماء الحقول المختلفة وفئات الكيانات في هذه الحالة. سوف يتعلم الأصدقاء المهتمين معًا.
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 ؛/*** Auuthor gacl*حدد فئة الكيان المقابلة لجدول الطلبات*/ترتيب الفئة العامة {/*** إنشاء أوامر الجدول (order_id int int in into_increment ، order_no varchar () ، 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 الإصدار = "." الترميز = "utf-"؟> <! Doctype Mapper Public "-// mybatis.org//dtd mapper .//en" "http://mybatis.org/dtd/mybatis--mapper.dtd"><!-حدد اسمًا فريدًا لهذه الرحم. يتم تعيين قيمة مساحة الاسم بشكل تقليدي على اسم ملف خريطة SQL ، بحيث يمكن ضمان أن تكون قيمة مساحة الاسم فريدة من نوعها. على سبيل المثال ، اسم namepace = "me.gacl.mapping.ordermapper" هو me.gacl.mapping (اسم الحزمة) + ordermapper (ordermapper.xml removiof fuctix)-> <mapper namespace = "me.gacl.mapping.ordermapper"> <!
يتم الحصول على كائن طلب بناءً على استعلام الهوية. لا يمكن لاستخدام هذا الاستعلام الاستعلام عن النتيجة التي نريدها. ويرجع ذلك أساسًا إلى أن اسم سمة فئة الكيان لا يتوافق مع اسم حقل قاعدة البيانات ، لذلك لا يمكن الاستعلام عن السجل المقابل.
-> <select id = "getorderbyid" parametertype = "int" resulttype = "me.gacl.domain.order"> حدد * من الطلبات حيث order_id =#{id} </select> <!- يتم الحصول على كائن طلب بناءً على استعلام الهوية. باستخدام هذا الاستعلام ، يمكننا عادة الاستعلام عن النتيجة التي نريدها.
هذا لأننا سنعطي الاسم المستعار للاستعلام بنفس اسم السمة كاسم سمة فئة الكيان ، بحيث يمكن أن يتوافق اسم سمة فئة الكيان واسم الحقل في نتيجة الاستعلام واحداً إلى واحد.
-> <select id = "selectorder" parametertype = "int" resulttype = "me.gacl.domain.order"> حدد order_id id ، order_no orderno ، order_price price from orders where order_id =#{id ood} </select> <!- وفقًا لاستعلام الهوية ، يمكننا الحصول على كائن طلب. باستخدام هذا الاستعلام ، يمكننا الاستعلام عن النتيجة التي نريدها بشكل طبيعي. هذا لأننا نقوم بتخطيط المراسلات الواحدة بين اسم سمة فئة الكيان واسم حقل الجدول من خلال <drederMap>->
<select id = "selectorderResultMap" parametertype = "int" resultmap = "orderresultMap"> حدد * من الطلبات التي يكون فيها order_id =#{id} </select> <!-رسم خرائط للمراسلات بين اسم السمة الفئة Quitity و name field idip Property-> <id property = "id" column = "order_id"/> <!-تعيين حقل المفاتيح غير الأولية باستخدام خاصية النتيجة-> <result property = "orderno column =" order_no "/> <result propert 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 ؛ import org.junit.test ؛ اختبار الطبقة العامة {testpublic mybatisutil.getsqlsession () ؛/*** سلسلة التعريف لرسم خرائط SQL ،* me.gacl.mapping.orderMapper هي قيمة سمة مساحة الاسم لعلامة Mapper في ملف ordermapper.xml ، من خلال قيمة سمة المعرف لعلامة تحديد العلامة ، يمكنك العثور على SQL المراد تنفيذه*/string state = "me.gacl.mapping.ordermapper.getorderbyid" ؛ // رسم خرائط لسلسلة هوية SQL // تنفيذ عملية الاستعلام وتغليفها تلقائيًا في كائن أمر وترتيب ترتيب إرجاع = sqlsession.selectOne (QualectOne ، SQL باستخدام SQLSession ، تحتاج إلى إغلاق sqlsessionsqlsession.close () ؛ system.out.println (order) ؛ // print result: null ، أي أنه لم يتم العثور على سجل مقابل} testpublic void testgetorderbyid () {sqlsession sqlsession = mybatisutil.getsqlsession (/*** map sql sql ، ملف ordermapper.xml ، * SECECTORDER هو قيمة سمة المعرف لعلامة تحديد. من خلال قيمة سمة المعرف لعلامة تحديد ، يمكنك العثور على SQL المراد تنفيذه. */string state = "me.gacl.mapping.ordermapper.selectorder" ؛ // map sql string // تنفيذ عمليات الاستعلام ، وتغليف نتائج الاستعلام تلقائيًا في كائن طلب وترتيب إرجاع = sqlsession.selectone (بيان ،) sqlsessionsqlsession.close () ؛ system.out.println (order) ؛ // print result: order [id = ، orderno = aaaa ، price =.]}@testpublic void testgetOrderById () علامة في ملف ordermapper.xml. * SelectorderResultMap هي قيمة سمة المعرف للعلامة تحديد. من خلال قيمة سمة المعرف لعلامة تحديد ، يمكنك العثور على SQL المراد تنفيذه. */string state = "me.gacl.mapping.ordermapper.selectorderResultMap" ؛ // تعيين سلسلة تعريف SQL // تنفيذ عمليات الاستعلام ، وتغليف نتائج الاستعلام تلقائيًا في جدول الطلبات وترتيب الإرجاع = sqlsession.selectone (بيان) sqlsessionsqlsession.close () ؛ system.out.println (order) ؛ // طباعة نتيجة: order [id = ، orderno = aaaa ، price =.]}} نتائج تنفيذ اختبارات الوحدة:
1. طريقة TestgetOrderByID تُرجع خالية بعد تنفيذ الاستعلام.
2. بعد تنفيذ طريقة TestgetOrderById2 وطريقة TestgetOrderById3 ، يمكنك الحصول على النتيجة المطلوبة بشكل طبيعي.
4. ملخص
يوضح رمز الاختبار أعلاه المشكلة أنه عندما يكون اسم السمة في فئة الكيان واسم الحقل في الجدول غير متناسق ، لا يمكن الاستعلام عن النتائج المقابلة عند استخدام MyBatis لعمليات الاستعلام ، ويتم اعتماد طريقتين للمشكلة:
الحل 1: تحديد الاسم المستعار لاسم الحقل في عبارة الاستعلام SQL ، بحيث يتوافق الاسم المستعار لاسم الحقل مع اسم السمة لفئة الكيان ، بحيث يمكن أن يتوافق اسم حقل الجدول واحدًا تلو الآخر مع اسم السمة لفئة الكيان. تحل هذه الطريقة علاقة التعيين بين اسم الحقل واسم السمة من خلال تحديد الاسم المستعار في عبارة SQL.
الحل 2: قم بتخطيط المراسلات الواحدة بين أسماء الحقول وأسماء سمات فئة الكيان من خلال <nrederMap>. تستخدم هذه الطريقة الحل الذي توفره MyBatis لحل علاقة التعيين بين أسماء الحقول وأسماء السمات.
ما ورد أعلاه هو البرنامج التعليمي التعليمي MyBatis الذي قدمه لك المحرر (IV) - كيفية حل الصراع بسرعة بين أسماء المجال وأسماء سمات فئة الكيان. آمل أن يكون ذلك مفيدًا للجميع. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر على الجميع في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!