بعد ذلك ، فإن المقالة السابقة "Javaweb العملية التنمية المركز التجاري (II)" تنفذ بشكل أساسي The General invlearao.java ويستخدم ResultMap لتعيين الكائنات ذات الصلة.
1. عام على أساس
نظرًا لأن الجميع يحتاجون إلى استخدامه ، يتم استخدام الأدوية الجيلية. المشكلة التي يجب ملاحظتها هي أن الرموز مثل user.getClass (). getName () تحتاج إلى تعديل. تتمثل طريقة التعديل في تمريرها باستخدام فئة المعلمة TC ، ثم استخدام TC.GetName ().
رمز كامل:
package com.dao ؛ import com.model.pager ؛ import com.util.sessionutil ؛ import com.util.systemcontext ؛ import org.apache.ibatis.session.sqlsession ؛ import java.util.hashmap ؛ import java.util.list ؛ */الفئة العامة على أساس <t> {/** * خذ نوع t على أساس معرف * param لإزالة المعرف من type type * @return */public t (class <t> tc ، int id) {sqlsession session = sessionutil.getsession () ؛ t t = null ؛ حاول {t = session.selectone (tc.getName ()+". load" ، id) ؛ } أخيرًا {sessionutil.closeessession (الجلسة) ؛ } إرجاع t ؛ } / *** أضف نوع t* param t t type لإضافته* return true ناجحة* / boolean العامة add (t t) {int isAdd = 0 ؛ SQLSession Session = SessionUtil.getSession () ؛ حاول {isAdd = session.insert (t.getClass (). getName ()+". add" ، t) ؛ SESSAL.COMMIT () ؛ // commice} catch (استثناء e) {session.rollback () ؛ // rolle back إذا فشل التقديم} أخيرًا {sessionutil.closesession (الجلسة) ؛ } إرجاع isadd> 0 ؛ } / *** حذف t -type استنادًا إلى معرف المعرف* param لحذف معرف t* @return الناجح* / public boolean delete (class <t> t ، int id) {int isDelete = 0 ؛ SQLSession Session = SessionUtil.getSession () ؛ حاول {isDelete = session.delete (t.getName ()+". delete" ، id) ؛ session.Commit () ؛ } catch (استثناء e) {session.rollback () ؛ // الفاشل system.out.println ("delete fans") ؛ E.PrintStackTrace () ؛ } أخيرًا {sessionutil.closeessession (الجلسة) ؛ } الإرجاع isDelete> 0 ؛ } / *** update t type* param t user to to explized* @return true scivent* / public boolean update (t t) {int isUpdate = 0 ؛ SQLSession Session = SessionUtil.getSession () ؛ حاول {isUpdate = session.delete (t.getClass (). getName ()+". update" ، t) ؛ session.Commit () ؛ } catch (استثناء e) {session.rollback () ؛ // الفاشل system.out.println ("فشل التحديث") ؛ E.PrintStackTrace () ؛ } أخيرًا {sessionutil.closeessession (الجلسة) ؛ } return isUpdate> 0 ؛ }/*** QUERY PARAGE استنادًا إلى الشروط المحددة* param خرائط تحديد مجموعة الحالة* @RETURN*/PUBLIC PAGER <T> find (class <t> t ، map <string ، object> maps) {int pagestart = systemcontext.getpagestart () ؛ Pager <> () ؛ Maps.put ("Pagestart" ، Pagestart) ؛ Maps.put ("pagesize" ، pagesize) ؛ SQLSession Session = SessionUtil.getSession () ؛ قائمة <T> datas = null ؛ TREE {datas = session.selectlist (t.getName ()+". pagers.setpagesize (pagesize) ؛ Pagers.setpagestart (Pagestart) ؛ int totalRecord = session.selectone (t.getName ()+". findCount" ، maps) ؛ // احصل على العدد الإجمالي من السجلات pagers.SettOtalRecord (TotalRecord) ؛ Pagers.setPageIndex (Pagestart/pagesize+1) ؛ } أخيرًا {sessionutil.closeessession (الجلسة) ؛ } عودة أجهزة الاستدعاء ؛ } / *** جلب جزء من البيانات وفقًا للشروط المحددة* param خرائط تحدد مجموعة الشروط* @RETURN* / Public Pager <T> قائمة (الفئة <T> T ، خريطة <string ، كائن> خرائط) {pager <t> pages = new pager <> () ؛ SQLSession Session = SessionUtil.getSession () ؛ قائمة <T> datas = null ؛ TREE {datas = session.selectlist (t.getName ()+". list" ، maps) ؛ // get record pagers.setDatas (datas) ؛ pagers.SetTotalRecord (datas.size ()) ؛ } أخيرًا {sessionutil.closeessession (الجلسة) ؛ } عودة أجهزة الاستدعاء ؛ }}نفس userdao.java يتطلب أيضا تعديلات المقابلة
الفئة العامة userDao يمتد على أساس <serve> { / ** * قم بإزالة مستخدم استنادًا إلى معرف المعرف * param لإزالة معرف المستخدم * regurn * / تحميل المستخدم العام (int id) {return super.load (user.class ، id) ؛ }/* لا يتم نشر وظائف أخرى واحدة تلو الأخرى ، فكلها مكتوبة بطرق مماثلة*/}2. رسم خرائط ResultMap
ببساطة ، عندما تكون معلومات الحقل في قاعدة البيانات غير متسقة مع سمات الكائن ، فمن الضروري تعيينها من خلال ResultMap.
على سبيل المثال: هناك فئة كيان مستخدم في خاصية العنوان ، على النحو التالي
عنوان الطبقة العامة {private int id ؛ اسم السلسلة الخاصة ؛ سلسلة سلسلة خاصة ؛ الرمز البريدي للسلسلة الخاصة ؛ // القرف كائن المستخدم مباشرة بدلاً من مستخدم User_id الخاص ؛ `` `` `` `` `}ثم نريد إخراج عنوان ونخرج أيضًا من مستخدمه المقابل. ومع ذلك ، فإن هاتين كائنين ، وكلاهما لهما سمات معرّف ، لذلك سيتم الخلط بين MyBatis عند استدعاء طريقة المجموعة لتعيين الخصائص. الغرض من استخدام ResultMap هو القضاء على هذه الفوضى.
اكتب تحميل SQL
<!-قم بتحميل عنوان-> <!-اتصال الجدول مطلوب هنا ، ويتم إخراج المستخدم. مطلوب الاتصال أيضًا للتأكد من أن العنوان الذي تم استرداده غير فارغ ، والاستمتاع بمعرف السمة المكررة-> <SELECT ID = "load" parametertype = "int" resultmap = "addressMap"> select *، t1.id as 'a_id' from address t1 right user t2 on (t1.user_id = t2.id) where t1.id = {id} ؛ </select>هنا نستخدم ResultMap لتخطيط ، اسم هذا النتيجة هو OddringMap.
addressMap
<resultmap id = "addractmap" type = "address" automing = "true"> <!-تعيين A_ID في النتيجة كمعرف ، و AutomingPapping = true سوف يتطابق تلقائيًا-> <id column = "a_id" property = "id"/> <!- property = "id"/> <result column = "username" property = "username"/> <result column = "labeleame"/> <result column = "lamname"/> <result column = "lamname"/> <result column = "type" propert
بعد الانتهاء من التكوين أعلاه ، عند البحث ، سيقوم MyBatis تلقائيًا بالاتصال بأسلوب مجموعة المقابلة الخاص به وتعيين السمات على فئة الكيان.
امتحان
Package com.dao ؛ import com.model.address ؛ addressdao public extensed repareao <address> {public static void main (string [] args) {addressDao addressDao = new addraddao () ؛ عنوان العنوان = addressDao.load (1) ؛ System.out.println (address.toString ()) ؛ } / *** تحميل عنوان* param معرف المعرف للعنوان المراد تحميله* regurn إرجاع العنوان المراد تحميله ، ويفشل NULL في تحميل* / address address (int id) {return super.load (address.class ، id) ؛ }} كما يتضح في الاداءات ، طالما تم إخراج سمات التعيين ، فإن جميع تلك التي لم يتم تعيينها هي فارغة.
اتبع هذه الفكرة لإكمال الوظائف الأخرى
رمز XML:
<؟ لا تتوافق قاعدة البيانات مع سمات الكائن ، فأنت بحاجة إلى تعيينه من خلال resultmap-> <resultMap id = "addressMap" type = "address" automing = "true"> <!-MAP A_ID في النتيجة في المعرف ، أو automapping = true سوف يتطابق تلقائيًا-> <id column = "a_id" الخاصية = "المعرف"/ javatype = "user"> <!-map user_id إلى معرف المستخدم-> <id column = "user_id" property = "id"/> <result column = "username" property = "username"/> <result column = "lamname" property =/"expense> </endaive </expense <! <!-اتصال الجدول مطلوب هنا ، ويتم إخراج المستخدم. يضمن الاتصال أن العنوان الذي تم استرداده ليس فارغًا ، وتعيينه لمعرف السمة المكررة -> <SELECT ID = "load" parametertype = "int" resultmap = "addressMap"> select *، t1.id as 'a_id' from address t1 right user t2 on (t1.user_id = t2.ID) where t1.id = {id} ؛ </select> <!-أضف عنوانًا-> <insert id = "add" parametertype = "address"> insert في قيم العنوان (null ،#{name} ،#{phone} ،#{postcode} ، $ {user_id}) </insert> <! </redete> <!-تعديل عنوان-> <update id = "update" parametertype = "address"> تحديث مجموعة العنوان name =#{name} ، phone =#{phone} ، postcode =#{postcode} حيث id =#{id} </ حدد *، T1.ID كـ "A_ID" من العنوان T1 Right User T2 ON (T1.USER_ID = T2.ID) حيث T1.USER_ID =#{user_id} </select> </mapper>كود جافا:
package com.dao ؛ import com.model.address ؛ import com.model.pager ؛ import java.util.hashmap ؛ import java.util.map ؛/*** تم إنشاؤه بواسطة NL101 في 2016/2/23. */addressdao الفئة العامة يمتد على أساس <address> {public static void main (string [] args) {addressDao addressDao = new addressDao () ؛ PAGER <Adter> pagers = addressDao.List (1) ؛ system.out.println (pagers.getDatas (). size ()) ؛ } / ** * تحميل عنوان * param معرف المعرف للعنوان المراد تحميله * @إعادة إرجاع العنوان المراد تحميله ، وفشل NULL * / تحميل العنوان العام (int id) {return super.load (address.class ، id) ؛ } / *** أضف عنوانًا* param العنوان المراد إضافته* param user_id user_id يتوافق مع العنوان المراد إضافته* @REGRENT True ناجح* / عنوان منطقي عام (عنوان العنوان ، int user_id) {userDao userDao = new userdao () ؛ if (userDao.load (user_id) == null) {return false ؛ } return super.add (العنوان) ؛ } / *** حذف عنوان* param معرف لحذف المعرف المقابل للعنوان* return delete بنجاح* / الحذف المنطقي العام (int id) {return super.delete (address.class ، id) ؛ } / *** تحديث عنوان* param العنوان المراد تحديثه* @RETURN TRUE UPDATE بنجاح* / تحديث منطقي عام (عنوان العنوان) {return super.update (العنوان) ؛ } / *** تحديث عنوان* param العنوان المراد تحديثه* @RETURN TRUE UPDATE بنجاح* / تحديث منطقي عام (عنوان العنوان) {return super.update (العنوان) ؛ } / ** * خذ جميع عناوين المستخدم استنادًا إلى معرف المستخدم * param user_id * @return * / Public Pager <Dounting> قائمة (int user_id) {map <string ، Object> maps = new hashmap <> () ؛ maps.put ("user_id" ، user_id) ؛ Return Super.List (address.class ، Maps) ؛ }}إذا كانت طبقة اللغط مكتوبة بهذه الطريقة ، فلن تكون هناك مشكلة.
ما سبق هو كل شيء عن هذا المقال. هذا كله عن تطوير مشروع Mall Mall بأكمله. آمل أن يكون مفيدًا لتعلمك.