1. جمعية فردية
1.1. اقتراح المتطلبات
معلومات فئة الاستعلام بناءً على معرف الفصل (معلومات مع المعلم)
1.2. إنشاء جداول وبيانات
إنشاء جدول المعلم وجدول الفصل. هنا نفترض أن المعلم مسؤول فقط عن تدريس فصل واحد ، وبالتالي فإن العلاقة بين المعلم والصف هي علاقة فردية.
إنشاء معلم الجدول (T_ID int int الأساسي مفتاح Auto_increment ، t_name varchar ()) ؛ إنشاء فئة الجدول (C_ID int المفتاح الأساسي AUTO_INCREMENT ، C_NAME VARCHAR () ، TECHERMENT_ID Int) ؛ ALTER TABLE CLASS أضف قيود FK_TEACHER_ID المفتاح الأجنبي (TECHERSER_ID) المعلم (T_ID) ؛ إدراج في قيم المعلم (T_Name) ('المعلم') ؛ إدراج في قيم المعلم (T_Name) ('المعلم') ؛ أدخل في الفصل (C_Name ، Teacher_id) القيم ('class_a' ،) ؛ إدراج في الفئة (C_Name ، Teacher_id) القيم ('class_b' ، 2) ؛ العلاقة بين الجداول هي كما يلي:
1.3. تحديد فصول الكيان
1. فئة المعلم ، فئة المعلم هي فئة الكيان المقابلة لجدول المعلم.
حزمة me.gacl.domain ؛ /*** Author GACL* حدد فئة الكيان المقابلة لجدول المعلم*/مدرس الطبقة العامة {// تحديد سمات فئة الكيان ، المقابلة للحقول في جدول المعلم الخاص. // id ===> t_id اسم السلسلة الخاصة ؛ // name ===> t_name public int getId () {return id ؛ } public void setId (int id) {this.id = id ؛ } السلسلة العامة getName () {return name ؛ } public void setName (اسم السلسلة) {this.name = name ؛ } Override Public String ToString () {return "Teacher [id =" + id + "، name =" + name + "]" ؛ }}2. فئة الفئات ، فئة الفئات هي فئة الكيان المقابلة لجدول الفئة
حزمة me.gacl.domain ؛ /*** Author GACL* حدد فئة الكيان المقابلة لجدول الفئة*/فئات الفئة العامة {// تحديد سمات فئة الكيان ، المقابلة للحقول في جدول الفئة الخاص int id ؛ // id ===> c_id اسم السلسلة الخاصة ؛ // name ===> c_name /** * يوجد حقل معلم في جدول الفصل ، لذلك يتم تعريف سمة المعلم في فئة الفصول ، * يتم استخدامها للحفاظ على العلاقة الواحدة بين المعلم والفصل. من خلال سمة المعلم هذه ، يمكنك معرفة المعلم المسؤول عن هذا الفصل*/ مدرس المعلم الخاص ؛ public int getId () {return id ؛ } public void setId (int id) {this.id = id ؛ } السلسلة العامة getName () {return name ؛ } public void setName (اسم السلسلة) {this.name = name ؛ } المعلم العام getTeacher () {Return Teacher ؛ ) } Override public string toString () {return "classes [id =" + id + "، name =" + name + "، teacher =" + teacher + "]" ؛ }} 1.4. تحديد ملف التعيين SQL ClassMapper.xml
<؟ xml الإصدار = "." الترميز = "UTF-"؟> <! Doctype Mapper Public "-// mybatis.org//dtd mapper .//en" "http://mybatis.org/dtd/mybatis--mapper.dtd"> <! يتم تعيين قيمة مساحة الاسم بشكل تقليدي على اسم ملف التعيين + SQL ، بحيث يمكن ضمان قيمة مساحة الاسم لتكون فريدة من نوعها. على سبيل المثال ، NamePace = "me.gacl.mapping.classmapper" IS ME.GACL.MAPPE (اسم الحزمة) + classMapper (ClassMapper.xml File File Fuctix)-> <mapper namepace = "me.gacl.mapping.classmapper"> <! استعلام الجدول المشترك حدد * من الفئة C ، المعلم T حيث c.teacher_id = t.t_id و c.c_id = ؛ ##. تنفيذ اثنين من الاستعلامات حدد * من الفئة حيث c_id = ؛ // teacher_id = select * من المعلم حيث t_id = ؛ // استخدم المعلم الذي تم الحصول عليه أعلاه-> <!-الطريقة 1: النتائج المتداخلة: استخدم خريطة النتائج المتداخلة لمعالجة المجموعة الفرعية لنتائج المفصل المكررة لتغليف بيانات الجدول المشترك (إزالة البيانات المكررة) SELECT * من الفئة C ، Teacher T حيث parametertype = "int" resultmap = "classResultMap"> حدد * من الفئة c ، المعلم t حيث c.teacher_id = t.t_id و c.c_id =#{id} </select> <!-استخدم resultMap لرسم خريطة المراسلات الفئة بين الفصول الدراسية-المعرف ". property = "id" column = "c_id"/> <result property = "name" column = "c_name"/> <Assistance property = "Teacher" javatype = "me.gacl.domain.teacher من خلال تنفيذ عبارة رسم خرائط SQL آخر حدد * من الفئة حيث C_ID = ؛ حدد * من المعلم حيث T_ID = // هي قيمة المعلم الذي تم الحصول عليه من الاستعلام السابق-> <SELECT ID = "getClass" parametertype = "int" resultmap = "classresultmap"> حدد * من الفئة حيث c_id =#{id} </select> <! type = "me.gacl.domain.classes" id = "classResultMap"> <id property = "id" column = "c_id"/> <result property = "name" column = "c_name"/> <ensivand property = "teacher" columeTy = "teacher_id" select = "getTeacher"/> resultType = "me.gacl.domain.teacher"> حدد معرف T_ID ، اسم T_NAME من المعلم حيث T_ID =#{id} </select> </kapper> تسجيل classmapper.xml في ملف conf.xml
<mappers> <!- سجل ملف classMapper.xml. يقع classMapper.xml في الحزمة me.gacl.mapping ، لذلك يتم كتابة المورد كأني/gacl/mapping/classmapper.xml-> <mapper resource = "me/gacl/mapping/classmapper.xml"/> </mabers>
1.5. كتابة رمز اختبار الوحدة
حزمة me.gacl.test ؛ استيراد me.gacl.domain.classes ؛ استيراد me.gacl.util.mybatisutil ؛ استيراد org.apache.ibatis.session.sqlsession ؛ استيراد org.junit.test ؛ اختبار الفئة العامة {test public void testgetClass () {sqlsession sqlsession = mybatisutil.getsqlsession () ؛ /** * MAP SQL IDEFISTION String ، * ME.GACL.MAPPE.CLASSMAPPER هي قيمة سمة مساحة الاسم لعلامة MAPPER في ملف classMapper.xml ، * getClass هي قيمة سمة المعرف للعلامة المحددة. يمكن العثور على SQL المراد تنفيذه من خلال قيمة سمة المعرف لعلامة SELECT */string strup تنفيذ SQL باستخدام sqlsession sqlsession.close () ؛ system.out.println (clazz) ؛ // print result: ide [id = ، name = class_a ، teacher = id = ، name = teacher]} test public void testgetclass () {sqlsession sqlsession = mybatisutil.getsqlsession () ؛ /** * MAP SQL IDEFISTION String ، * ME.GACL.MAPPE.CLASSMAPPER هي قيمة سمة مساحة الاسم لعلامة MAPPER في ملف classMapper.xml ، * getClass هي قيمة سمة المعرف للعلامة المحددة. يمكن العثور على SQL المراد تنفيذه من خلال قيمة سمة المعرف لعلامة SELECT */string strup SQLSession لتنفيذ SQL ، تحتاج إلى إغلاق sqlsession sqlsession.close () ؛ system.out.println (clazz) ؛ // طباعة النتيجة: الفصول [id = ، name = class_a ، المعلم = المعلم = ، الاسم = المعلم]]}} 1.6. ملخص استعلام جمعية MyBatis الفردي
يستخدم MyBatis علامة الارتباط لحل استفسارات الجمعية الفردية. الخصائص المتاحة لعلامة الجمعية هي كما يلي:
• الخاصية: اسم خاصية الكائن
• javatype: نوع سمة الكائن
• العمود: اسم حقل المفتاح الخارجي المقابل
• حدد: استخدم استعلامًا آخر لتغليف النتيجة
2. رابطة واحدة إلى حد كبير
2.1. اقتراح المتطلبات
الاستعلام عن معلومات الفصل المقابلة وفقًا لـ ClassID ، بما في ذلك الطلاب والمعلمين
2.2. إنشاء جداول وبيانات
في عرض استعلام الارتباط الفردي أعلاه ، أنشأنا جدول الفصل وجدول المعلم ، لذلك نحن هنا ننشئ جدول طالب آخر
قم بإنشاء طالب طالب (S_ID int int key ato_increment ، s_name varchar (20) ، class_id int) ؛ insert في الطالب (s_name ، class_id) القيم ('student_a' ، 1) ؛ insert في القيم الطالب (s_name ، class_id) ('student_b' ، 1) class_id) القيم ('student_d' ، 2) ؛ insert في القيم الطالب (s_name ، class_id) ('student_e' ، 2) ؛ insert في القيم الطالب (s_name ، class_id) ('student_f' ، 2) ؛ 2.3. تحديد فصول الكيانات
1. فصل الطالب
حزمة me.gacl.domain ؛ /*** Author GACL* حدد فئة الكيان المقابلة لجدول الطالب*/طالب الفئة العامة {// تحديد السمات ، المقابلة للحقول في جدول الطالب الخاص int ID ؛ // id ===> s_id اسم السلسلة الخاصة ؛ // name ===> s_name public int getId () {return id ؛ } public void setId (int id) {this.id = id ؛ } السلسلة العامة getName () {return name ؛ } public void setName (اسم السلسلة) {this.name = name ؛ } Override Public String ToString () {return "student [id =" + id + "، name =" + name + "]" ؛ }} 2. قم بتعديل فئة الفصول ، وأضف سمة القائمة <Tudtude> للطلاب ، واستخدم قائمة مجموعة <Tudtude> لتمثيل الطلاب المملوكة للصف ، على النحو التالي:
حزمة me.gacl.domain ؛ استيراد java.util.list ؛ /*** Author GACL* حدد فئة الكيان المقابلة لجدول الفئة*/فئات الفئة العامة {// تحديد سمات فئة الكيان ، المقابلة للحقول في جدول الفئة الخاص int id ؛ // id ===> c_id اسم السلسلة الخاصة ؛ // name ===> c_name /** * يوجد حقل معلم في جدول الفصل ، لذلك يتم تعريف سمة المعلم في فئة الفصول ، * يتم استخدامها للحفاظ على العلاقة الواحدة بين المعلم والفصل. من خلال سمة المعلم هذه ، يمكنك معرفة المعلم المسؤول عن هذا الفصل*/ مدرس المعلم الخاص ؛ // استخدم قائمة Collection List <Student> لتمثيل الطلاب المملوكة لقائمة الفصل الدراسي <Student> الطلاب ؛ public int getId () {return id ؛ } public void setId (int id) {this.id = id ؛ } السلسلة العامة getName () {return name ؛ } public void setName (اسم السلسلة) {this.name = name ؛ } المعلم العام getTeacher () {Return Teacher ؛ ) ) } القائمة العامة <Tudture> getStudents () {return students ؛ } setStudents public void (قائمة <Tudtude> الطلاب) {this.students = students ؛ } Override public string toString () {return "classes [id =" + id + "، name =" + name + "، teacher =" + teacher + "، students =" + students + "]" ؛ }} 2.4. تعديل SQL تعيين ملف classMapper.xml
أضف معلومات تعيين SQL التالية
<!-استعل عن معلومات الفصل المقابلة وفقًا للفئة ClassID ، بما في ذلك الطلاب والمعلمين-> <!-الطريقة 1: النتائج المتداخلة: استخدم خريطة النتائج المتداخلة لمعالجة مجموعة فرعية من نتائج المفصل المتكررة SELECT * من الفئة C ، المعلم T ، الطالب S حيث C.Teacher_ID = T.T_ID و C.C_ID = S.Class_ID و C.C_ID =- resultMap = "classResultMap"> حدد * من الفئة C ، المعلم T ، الطالب S حيث C.Teacher_id = T.T_ID و C.C_ID = S.Class_ID و C.C_ID =#{id} </select> <resultmap type = "me.gacl.domain.classes" id = "classresultmap"> column = "c_id"/> <result property = "name" column = "c_name"/> <Assistance property = "teacher" column = "teacher_id" javatype = "me.gacl.domain.teacher"> <id property = "id" column = "t_id"/> <collection property = "students" oftype = "me.gacl.domain.student"> <id property = "id" column = "s_id"/> <result property = "name" column = "s_name"/> </collection> </resultmap> <! حدد * من المعلم حيث t_id = // هي قيمة المعلم_د الذي تم الحصول عليه بواسطة الاستعلام السابق حدد * من الطالب حيث class_id = // هي قيمة حقل C_ID الذي تم الحصول عليه بواسطة الاستعلام الأول -> <select id = "getClass" parametertype = "int" resultmap = "classresultmap" type = "me.gacl.domain.classes" id = "classResultMap"> <id property = "id" column = "c_id"/> <result property = "name" column = "c_name"/> <ensivand property = "teacher" column = "teacher_id" javatype = "me me.gacl.domain.teacher" Oftype = "me.gacl.domain.student" column = "c_id" select = "getStudent"> </roucky> </resultmap> <select id = "getTeacher" parametertype = "int" resulttype = "me.gacl.domain.teacher id = "getStudent" parametertype = "int" resulttype = "me.gacl.domain.student"> حدد معرف S_ID ، اسم S_Name من الطالب حيث class_id =#{id} </select> 2.5. كتابة رمز اختبار الوحدة
حزمة me.gacl.test ؛ استيراد me.gacl.domain.classes ؛ استيراد me.gacl.util.mybatisutil ؛ استيراد org.apache.ibatis.session.sqlsession ؛ استيراد org.junit.test ؛ اختبار الفئة العامة {test public void testgetClass () {sqlsession sqlsession = mybatisutil.getsqlsession () ؛ /** * MAP SQL IDEFISTION String ، * ME.GACL.MAPPE.CLASSMAPPER هي قيمة سمة مساحة الاسم لعلامة MAPPER في ملف classMapper.xml ، * getClass هي قيمة سمة المعرف للعلامة المحددة. يمكن العثور على SQL المراد تنفيذه من خلال قيمة سمة المعرف لعلامة SELECT */string strup تنفيذ SQL باستخدام sqlsession sqlsession.close () ؛ // طباعة النتيجة: الفصول [id = ، name = class_a ، المعلم = المعرف = ، الاسم = المعلم] ، الطلاب = [الطالب = ، name = student_a] ، الطالب [id = ، name = student_b] ، الطالب [id = ، name = ، student_c]]] system.out.println (clazz) ؛ } test public void testgetClass () {sqlsession sqlsession = mybatisutil.getsqlsession () ؛ /** * MAP SQL IDEFISTION String ، * ME.GACL.MAPPE.CLASSMAPPER هي قيمة سمة مساحة الاسم لعلامة MAPPER في ملف classMapper.xml ، * getClass هي قيمة سمة المعرف للعلامة المحددة. يمكن العثور على SQL المراد تنفيذه من خلال قيمة سمة المعرف لعلامة SELECT */string strup تنفيذ SQL باستخدام sqlsession sqlsession.close () ؛ // طباعة النتيجة: الفصول [id = ، name = class_a ، المعلم = المعرف = ، الاسم = المعلم] ، الطلاب = [الطالب = ، name = student_a] ، الطالب [id = ، name = student_b] ، الطالب [id = ، name = ، student_c]]] system.out.println (clazz) ؛ }} 2.6. ملخص استعلام جمعية MyBatis واحد إلى حد كبير
يستخدم MyBatis علامة التجميع لحل استفسارات جمعية أحادية إلى العديد ، وتحدد السمة Oftype نوع الكائن للعناصر في المجموعة.
حول MyBatis Learning Tutorial (v) - سأقدم لك الكثير حول تطبيق استعلام جدول الجمعيات ، وآمل أن يكون مفيدًا لك!