1. نظرة عامة
عند تحديد رسم الخرائط في MyBatis ، يمكن استخدام نوع الإرجاع مع ResultType أو ResultMap. تمثل ResultType مباشرة نوع الإرجاع ، في حين أن ResultMap هي إشارة إلى النتيجة الخارجية ، ولكن لا يمكن وجود ResultType و ResultMap في نفس الوقت.
عندما يقوم MyBatis بالاستعلام عن التعيين ، في الواقع ، يتم وضع كل استعلام سمة في خريطة مقابلة ، حيث يكون المفتاح هو اسم السمة والقيمة هي قيمتها المقابلة.
① عندما تكون سمة نوع الإرجاع المتوفرة resultType ، ستأخذ MyBatis أزواج القيمة الرئيسية في الخريطة وتعيينها إلى السمات المقابلة للكائن المحدد بواسطة ResultType. في الواقع ، فإن نوع العودة لكل خريطة استعلام لـ MyBatis هو ResultMap. ومع ذلك ، عندما تكون سمة نوع الإرجاع المقدم هي resultType ، يقوم MyBatis تلقائيًا بتعيين القيمة المقابلة لسمات الكائن المحدد بواسطة ResultType.
② عندما يكون نوع الإرجاع المقدم هو resultmap ، لأن الخريطة لا يمكن أن تمثل نموذج المجال جيدًا ، فإنها تحتاج إلى تحويله إلى الكائن المقابل نفسه ، والذي غالبًا ما يكون مفيدًا للغاية في الاستعلامات المعقدة.
2. resultstype
blog.javapublic class Blog {private int id ؛ عنوان السلسلة الخاصة ؛ محتوى السلسلة الخاصة ؛ مالك السلسلة الخاصة ؛ القائمة الخاصة <some> التعليقات ؛}يقوم جدول قاعدة البيانات المقابل بتخزين معرف ، العنوان ، المحتوى ، وسمات المالك.
<typealias alias = "blog" type = "com.tiantian.mybatis.model.blog"/> <select id = "selectblog" parametertype = "int" resulttype = "blog"> select * from t_blog حيث id = #{id} </select>ستقوم MyBatis تلقائيًا بإنشاء كائن ResultMap ، ثم تغليف زوج قيمة المفاتيح بناءً على اسم السمة الموجود. بعد ذلك ، سترى أن نوع الإرجاع هو كائن مدونة ، ثم قم بإخراج زوج القيمة الرئيسي المقابل لكائن المدونة من ResultMap وتعيينه.
3. ResultMap
كما أنه مفيد للغاية عندما يكون نوع الإرجاع مباشرة خريطة ، يتم استخدامها بشكل أساسي لاستعلامات المفصل المعقدة ، لأنه ليس من الضروري إجراء استعلامات بسيطة. أولاً ، ألقِ نظرة على استعلام بسيط بنتيجة Return type ، ثم ألقِ نظرة على استخدام الاستعلامات المعقدة.
① كتابة استعلام بسيط
<resultmap type = "blog" id = "blogresult"> <id column = "id" property = "id"/> <result column = "title" property = "title"/> <result column = "content" property = "content"/> <result column = "owner" property = "owner" property = "owner"/> <</resultmap> <select id = "selectblog" parametertype = "int" resultmap = "blogresult"> select * from t_blog where id = #{id} </revels>قيمة ResultMap في خريطة SELECT هي معرف خريطة النتيجة الخارجية ، مما يشير إلى النتيجة التي تم تعيينها إليها. تشير سمة النوع لنتيجة النتيجة الخارجية إلى نوع نتيجة النتيجة. إليكم نوع المدونة ، لذلك سوف يخرج MyBatis ككائن مدونة. يتم استخدام معرف عقدة الطفل لعقدة ResultMap لتحديد معرف الكائن ، في حين يتم استخدام العقدة الفرعية للطفل لتحديد بعض الخصائص البسيطة. تمثل خاصية العمود السمات التي تم الاستعلام عنها من قاعدة البيانات ، وتمثل الخاصية الخاصية الخصائص التي يتم تعيين القيمة المقابلة للخاصية التي تم الاستعلام عليها إلى كائن الكيان. هذه هي كيفية كتابة ResultMap للاستعلام البسيط.
②complex استعلام
هناك فصل تعليق ، يحتوي على مرجع مدونة ، يشير إلى المدونة التي هي عليها. عند الاستعلام عن التعليق ، يجب أيضًا العثور على المدونة المقابلة وتعيينها لسمة المدونة الخاصة بها.
تعليق الفئة العامة {private int id ؛ private string content ؛ private date commentDate = new date () ؛ blog blog private ؛} <!-من ملف commentMapper.xml-> <resultmap type = "comment" id = "commentResult"> <Assistance property = "select =" selectblog "column =" blog "javatype =" blog "/> resultmap = "commentResult"> حدد * من t_comment حيث id = #{id} </select> <select id = "selectblog" parametertype = "int" resulttype = "blog"> select * from t_blog where id = # #{id} </select>أولاً ، اطلب من MAP SELECT مع ID كـ selectcomment ، ثم الحصول على كائن resultmap مع معرف كتعليقات. يمكنك أن ترى أن نوع الإرجاع من النتيجة المقابلة هو كائن تعليق ، والذي يحتوي على عقدة جمعية واحدة فقط ، ولا يوجد معرف ونتيجة للعقد الفرعية المقابلة للاستعلام البسيط المذكور أعلاه. ومع ذلك ، سيظل يعين المعرف المقابل والسمات الأخرى لكائن التعليق. هذا ما ذكره MyBatis سابقًا أنه يحتوي على وظيفة تغليف تلقائي. طالما تم توفير نوع الإرجاع ، سيستخدم MyBatis نتائج الاستعلام لتغليف الكائن المقابل وفقًا لحكمه. لذلك ، في الاستعلام البسيط أعلاه ، إذا لم يشير بوضوح إلى الحقل الذي يتوافق مع المعرف والمجال الذي يتوافق مع العنوان في النتيجة ، فإن MyBatis سيساعد أيضًا في تغليفه وفقًا لحكمه. حكم MyBatis هو مقارنة مجال الاستعلام أو الاسم المستعار المقابل مع سمات كائن الإرجاع. إذا كان يتطابق مع النوع يتطابق أيضًا ، فسيقوم MyBatis بتعيينه. ترتبط سمة المدونة في النتيجة المقابلة أعلاه ، ونوع Java المقابل هو مدونة. في طريقة الكتابة أعلاه ، يرتبط الكائن المرتبط به من خلال الفخات الفرعية ، وبالطبع ، يمكن أيضًا ربطه مباشرة من خلال استعلام الجمعية. في عقدة الطفل المذكورة أعلاه ، تشير سمة الممتلكات إلى الخاصية المرتبطة هي نوع إرجاع ResultMap. على سبيل المثال أعلاه ، سمة المدونة التي تديرها التعليق ؛ يشير SELECT إلى أي MAP لتحديد MAP لتحديد السمة المرتبطة المقابلة ، أي أنه سيطلب خريطة تحديد مع القيمة المقابلة للتحديد للاستعلام عن كائن السمة المرتبط ؛ يشير العمود إلى زوج القيمة الرئيسية المقابلة لـ ResultMap مع معرف التعليقات. سيتم استخدام زوج القيمة الرئيسية هذا كمعلمة للاستماع الفرعي للكائن المرتبط ، أي أن قيمة استعلام سمة المدونة في SelectComment يتم تمريرها كمعلمة للاستراحة الفرعية لمدونة الكائن المرتبطة بالمساع الفرعي لمدونة الكائن المرتبطة ؛ يشير Javatype إلى نوع الكائن الحالي المرتبط به في Java.
يقدم ما ورد أعلاه استعلامًا للعلاقات الفردية أو الفردية في حالة فردي. في التطبيقات الفعلية ، هناك تطبيق آخر يستخدم بشكل متكرر. هو معرفة المزيد من الأطراف المقابلة من خلال فردي. عند إخراج المزيد من الأطراف ، يحتاج أيضًا إلى ربط فرد إلى واحد: عند إخراج كائن المدونة ، وإخراج جميع التعليقات المقابلة ، وعند إخراج التعليق ، لا يزال يتعين عليهم إخراج المدونة المقابلة ، والتي يتم إخراجها في Java من خلال طلب.
<!-من ملف blogmapper.xml-> <resultmap type = "blog" id = "blogresult"> <id column = "id" property = "id"/> <collection property = "comments select =" selectommentsblog "compley =" id "oftype =" comment "> </soldemap> <desultmap type = javatype = "blog" column = "blog" select = "selectblog"/> </sultresultmap> <select id = "selectBlog" parametertype = "int" = #{blogid} </select>إدخال الطلب أعلاه هو خريطة محددة مع تحديد المعرف ، ونتيجة الإرجاع هي نتيجة مع ID blogresult. نوع blogresult هو المدونة ، والتي تحدد سمات وحقول الهوية. سيكون تحديد المعرف تأثير كبير على بناء MyBatis داخليًا. ويرتبط بكائن التعليقات. نظرًا لأن المدونة يمكن أن تحتوي على العديد من التعليقات ، وهي مجموعة ، لذلك يتم تعيينها بمجموعة مجموعة. يشير SELECT إلى الإشارة الفرعية التي يتم تنفيذها للاستعلام عن التعليقات المقابلة. يعني العمود أي قيمة الحقل الموجودة أعلاه تنتقل إلى الاسم الفرعي كمعلمة. يمثل Oftype أيضًا نوع الإرجاع. نوع الإرجاع هنا هو النوع داخل المجموعة. السبب في استخدام Offype بدلاً من الكتابة هو أنه يتم استخدامه داخل MyBatis لتمييزه عن جمعية الارتباط.
public void selectcommentsblogtest () {sqlsession session = util.getSqlSessionFactory (). opensession () ؛ commentMapper commentMapper = session.getMapper (commentMapper.class) ؛ rip التعليقات) system.out.println (comment) ؛ session.close () ؛} public void testselectone () {sqlsession session = util.getsqlsessionfactory (). opensession () ؛ blogmapper inload = session.getMapper (blogmapper.class) ؛ blog blood. (تعليقات! = null) {for (تعليق التعليق: التعليقات) system.out.println (تعليق) ؛} session.close () ؛}ما سبق هو ResultType و ResultMap في MyBatis الذي قدمه لك المحرر. آمل أن يكون ذلك مفيدًا لك. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر إليك في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!