1.ResultMap
تم تعيين ملفات XML الخاصة بـ SQL حيث يتم وضع جميع عبارات SQL. تحتاج إلى تحديد مساحة عمل ، والتي يتم تعريفها عمومًا على أنها مسار فئة الواجهة المقابلة. بعد كتابة ملف تعيين بيانات SQL ، تحتاج إلى الرجوع إليه في علامة MAPPERS لملفات تكوين MyBatis ، على سبيل المثال:
<mapper resource = "com/liming/manager/mappers/usermapper.xml"/> <mapper resource = "com/manage/data/mappers/studentmapper.xml"/> <mapper resource = "com/liming/mapper/mapper/mappers/mappers/classmapper.xml"/> /> < /mappers>
عندما تكون واجهة Java في مسار نسبي إلى ملف XML ، لا يمكن الإعلان عنها في محركات ملف تكوين MyBatis.
يقوم SQL بتعيين بعض العناصر الأولية لملفات XML:
(1). تقوم ذاكرة التخزين المؤقت بتكوين ذاكرة التخزين المؤقت لنمط معين (2). يشير Cache-Ref إلى ذاكرة التخزين المؤقت من نمط آخر (3). ResultMap هذا هو العنصر الأكثر تعقيدًا ولكنه قوي ، والذي يصف كيفية تحميل الكائنات من مجموعة النتائج (4). SQL كتلة SQL التي يمكن تعددها بواسطة عبارات أخرى (5). إدراج عبارة إدراج خريطة (6). تحديث بيان تحديث الخريطة (7). حذف بيان DELEETE MAP (8). SELECT - MAP SELECT PRASE
1.1 resultmap
النتيجة هي العنصر الأكثر أهمية وقوة في MyBatis. يمكنك توفير 90 ٪ من الكود الخاص بك من مجموعات نتائج الاتصال مع JDBC ، أو يمكنك القيام بالكثير من الأشياء التي لا تدعمها JDBC. في الواقع ، قد يستغرق الأمر آلاف خطوط التعليمات البرمجية لكتابة بيان معقد يعادل رسم خرائط مشابه للتفاعل. الغرض من ResultMaps هو بيان بسيط دون تعيين نتيجة غير ضرورية. لا تتطلب البيانات الأكثر تعقيدًا أيًا غير فقط بعض العبارات اللازمة للغاية لوصف العلاقة.
السمة الناتجة: النوع هو فئة كيان Java ؛ المعرف هو معرف هذا النتيجة.
يمكن تعيين التعيين الذي يمكن تعيينه:
(1). يتم استخدام المنشئ لتعكس النتيجة إلى مُنشئ فئة تم إنشاؤه
أ) معرف معرف IDARG ؛ حدد مجموعة النتيجة كمعرف لتسهيل المكالمة العالمية
ب) متوسط انعكاس للمُنشئ
(2). نتيجة معرف المعرف ، حدد مجموعة النتائج كمعرف لتسهيل المكالمة العالمية
(3). النتيجة تعكس النتائج العادية لخصائص جافابان
(4). ارتباط مزيج من الأنواع المعقدة ؛ أنواع توليف النتائج المتعددة
أ) تعيينات النتائج المتداخلة عدة نتائج خرائط الجمعيات المتداخلة نفسها ، ويمكن الإشارة إليها أيضًا
(5). جمع مجموعة من الأنواع المعقدة
(6). يمكن أيضًا الرجوع إلى مجموعة تعيينات النتائج المتداخلة إلى أخرى
(7). يستخدم التمييز قيمة نتيجة لتحديد النتيجة التي يجب استخدامها
أ) حالة حالة حالة خريطة النتائج لبعض القيم الأساسية
أنا. تعيينات النتيجة المتداخلة سيناريو الحالة هو في حد ذاته خريطة نتيجة ، بحيث يمكن أن تشمل أيضًا بعض العناصر نفسها ، أو يشير إلى خريطة خريطة خارجية.
1.1.1 معرف ، نتيجة
المعرف والنتيجة هما أبسط التعيينات ، معرف هو رسم الخرائط الرئيسية الرئيسية ؛ خرائط النتيجة من حقول جدول قاعدة البيانات الأساسية الأخرى إلى سمات فئة الكيان.
أبسط مثال:
<resultmap type = "liming.student.manager.data.model.studententity" id = "studentResultMap"> <id property = "studentId" column = "student_id" javatype = "string" jdbctype = "varchar"/> jdbctype = "varchar"/> <result property = "studentsex" column = "student_sex" javatype = "int" jdbctype = "integer"/> <result property = "studentBirthDay" column = "student_birthday" javatype = "jdbctype = javatype = "byte []" jdbctype = "blob" typeHandler = "org.apache.ibatis.type.blobtypehandler" /> < /resultmap>
تفاصيل تكوين المعرف وخصائص بيان النتيجة:
ملكية | يصف | |
ملكية | اسم السمة الذي يجب تعيينه إلى جافابين. | |
عمود | اسم العمود أو تسمية الاسم المستعار لجدول البيانات. | |
javatype | اسم فئة كاملة ، أو نوع الاسم المستعار. إذا كنت تتطابق مع Javabean ، فإن MyBatis عادة ما يكتشفها بنفسها. ثم ، إذا كنت ترسم الخرائط إلى hashmap ، فأنت بحاجة إلى تحديد الغرض الذي يجب تحقيقه بواسطة Javatype. | |
JDBCTYPE | قائمة الأنواع المدعومة من جدول البيانات. هذه الخاصية مفيدة فقط للأعمدة التي تسمح فارغة عند إدراج أو تحديث أو حذف. يتطلب JDBC هذا ، لكن MyBatis لا. إذا كنت تقوم بالترميز مباشرة لـ JDBC ولديك أعمدة تسمح فارغة ، فأنت تريد تحديد هذا العنصر. | |
TypeHandler | استخدم هذه الخاصية لتجاوز معالج النوع. يمكن أن تكون هذه القيمة اسم فئة كامل أو نوع الاسم المستعار. |
<resultmap type = "studententity" id = "studentResultMap"> <Idarg javatype = "string" column = "student_id"/> <arg javatype = "String" </structructor> </sromeptmap>
بالطبع ، نحتاج إلى تحديد طريقة مُنشئ فئة كيان الطالب:
الطالب العام (String StudentId ، string studentName ، String StudentSex ، Date StudentBirthday) {this.studentId = studentId ؛ this.studentName = studentName ؛ this.studentSex = studentSex ؛ this.studentbirthday = studentBirthday ؛ } 1.1.3 جمعية
يتم استخدام عنصر الاتحاد للتعامل مع علاقة "فردية". تحتاج إلى تحديد خصائص فئة Java Entity المعينة و javatype من السمة (عادة ما يتعرف MyBatis على ذلك بنفسك). اسم العمود لجدول قاعدة البيانات المقابل. إذا كنت ترغب في تجاوزها ، فأرجع قيمة النتيجة ، فأنت بحاجة إلى تحديد TypeHandler.
تحتاج المواقف المختلفة إلى إخبار MyBatis بكيفية تحميل الاتحاد. يمكن تحميل MyBatis بطريقتين:
(1). حدد: قم بتنفيذ عبارة SQL أخرى لإرجاع نوع كيان Java. أكثر مرونة
(2). النتائج: استخدم خريطة النتائج المتداخلة لمعالجة مجموعات نتائج الاستعلام من خلال الانضمام ورسم خريطة لها لأنواع كيانات Java.
على سبيل المثال ، يتوافق الفصل مع مدرس الفصل.
أولاً ، حدد سمات مدرس الفصل في الفصل:
المعلم المعلم الخاص ؛
1.1.3.1 استخدم SELECT لتنفيذ الاتحاد
مثال: هناك سمة مدرس الفصل في فئة الكيانات الصفية. عندما يتم الحصول على كيان صفي من خلال الجهود المشتركة ، يتم تعيين كيان مدرس الفصل في نفس الوقت.
يمكن أن يعيد هذا مباشرة إعادة استخدام البيانات المحددة المحددة في ملف TeasherMapper.xml للاستعلام عن المعلم وفقًا لمعرفه. ولا تحتاج إلى تعديل عبارات SQL المكتوبة ، فأنت بحاجة فقط إلى تعديل ResultMap مباشرة.
جزء من محتويات ملف classMapper.xml:
<resultmap type = "classentity" id = "classresultmap"> <id property = "classid" column = "class_id" /> <result property = "className column =" class_name " /> <result property =" classyear "column =" class_year " /> id = "getClassByid" parametertype = "string" resultMap = "classResultMap"> حدد * من class_tbl ct حيث ct.class_id = #{classid} ؛ </select>جزء من ملف teachermapper.xml:
<resultmap type = "teacherentity" id = "teacherresultmap"> <id property = "teacherid" column = "teacher_id" /> <result property = "teachername column =" teacher_name " /> <result property =" teachersex "colup column = "work_date"/> <result property = "workdate" column = "work_date"/> <result property = "professional" column = "professional"/> </resultmap> <select id =
1.1.3.2 استخدم ResultMap لتحقيق الاتحاد
نفس الوظيفة على النحو الوارد أعلاه هي الاستعلام عن الفصل وكذلك الاستعلام عن مدرس الفصل. تحتاج إلى إضافة ResultMap (محدد في ملف XML للمعلم) في الجمعية ، وكتابة SQL جديد (استعلام جدول الفصل الدراسي اليسار انضم إلى جدول المعلم) ، ولا تحتاج إلى تحديد المعلم.
تعديل محتويات ملف classMapper.xml:
<resultmap type = "classentity" id = "classResultMap"> <id property = "classid" column = "class_id" /> <result property = "className column =" class_name " /> <result property =" classyear "column =" class_year " /> id = "getClassAndTeacher" parametertype = "string" resultMap = "classResultMap"> حدد * من class_tbl ct left join inc teacher_tbl tt on ct.teacher_id = tt.teacher_id where ct.class_id = #{classid} ؛ </select>بالنسبة إلى TeachRresultMap ، يرجى الاطلاع على المحتوى أعلاه في ملف TeacherMapper.xml.
1.1.4 مجموعة
تُستخدم عناصر التجميع للتعامل مع العلاقات "أحادية العمال". تحتاج إلى تحديد سمات فئة java intity رسم الخرائط ، و javatype من السمة (عادة arraylist) ؛ نوع الكائن في قائمة الكائن (فئة كيان جافا) ؛ اسم عمود جدول قاعدة البيانات المقابل ؛
تحتاج المواقف المختلفة إلى إخبار MyBatis بكيفية تحميل التجميع. يمكن تحميل MyBatis بطريقتين:
(1). حدد: قم بتنفيذ عبارة SQL أخرى لإرجاع نوع كيان Java. أكثر مرونة
(2). النتائج: استخدم خريطة النتائج المتداخلة لمعالجة مجموعات نتائج الاستعلام من خلال الانضمام ورسم خريطة لها لأنواع كيانات Java.
على سبيل المثال ، يحتوي الفصل على العديد من الطلاب.
حدد أولا سمات قائمة الطلاب في الفصل:
قائمة خاصة <Studententity> StudentList ؛
1.1.4.1 استخدم SELECT لتنفيذ التجميع
الاستخدام يشبه إلى حد كبير الاتحاد ، والفرق هو أن هذا واحد إلى حد ، لذلك يتم سرد القوائم المعينة عمومًا. لذا ، فأنت هنا تحتاج إلى تعريف javatype بأنها ArrayList ، فأنت بحاجة أيضًا إلى تحديد نوع الكائن في القائمة ، واسم بيان SELECT الذي يجب تعيينه (تجدر الإشارة إلى أن شرط بيان SELECT لطالب الاستعلام هنا يجب أن يكون المفتاح الأجنبي).
جزء من محتويات ملف classMapper.xml:
<resultmap type = "classentity" id = "classResultMap"> <id property = "classID" column = "class_id" /> <result property = "className column =" class_name " /> <result property =" classyear "colled = javatype = "arraylist" oftype = "studententity" select = "getStudentByClassId"/> </sroprealMap> <select id = "getClassByid" parametertype = "string" resultMap = "classResultMap"> select * من class_tbl ct where ct.class_id = {classid} ؛ </select>جزء من ملف studentMapper.xml:
<!-خصائص Java ، تعريف التعريف بين حقول جدول قاعدة البيانات-> <resultmap type = "studententity" id = "studentResultMap"> <id property = "studentId" column = "student_id" /> <results property = "studentname" column = "student_name" /> <result property = "studentsex column = "student_birthday" /> < /resultmap> <!-استعل قائمة الطلاب ، استنادًا إلى معرف الفصل-> <select id = "getStudentByclassid" parametertype = "string" resultMap = "ClassID} < /select>
1.1.4.2 استخدم ResultMap لتحقيق التجميع
باستخدام ResultMap ، تحتاج إلى إعادة كتابة SQL ، ترك الجدول الطالب اليسار.
<resultmap type = "classentity" id = "classResultMap"> <id property = "classID" column = "class_id" /> <result property = "className column =" class_name " /> <result property =" classyear "column =" class_year " /> column = "class_id" javatype = "arraylist" oftype = "studententity" resultmap = "studentResultMap"/> </resultmap> <select id = Teacher_tbl tt على ct.teacher_id = tt.teacher_id حيث ct.class_id = #{classid} ؛ </select>
بالنسبة إلى TeachRresultMap ، يرجى الاطلاع على المحتوى أعلاه في ملف TeacherMapper.xml. يرجى الاطلاع على طلاب الخريطة في القسم أعلاه من ملف studentMapper.xml.
1.1.5DIScriminator تمييز <BR /> في بعض الأحيان قد يؤدي استعلام قاعدة بيانات منفصل إلى إرجاع مجموعة نتيجة للعديد من أنواع البيانات المختلفة (ولكن نأمل أن تكون بعض أنواع البيانات). تم تصميم عنصر التمييز للتعامل مع هذا الموقف ، بما في ذلك التسلسل الهرمي للميراث للصفوف. من السهل جدًا فهم التمييز لأنه يتصرف تمامًا مثل عبارات التبديل في Java.
يحدد تمييز التعريف خصائص العمود و javatype. الأعمدة هي المكان الذي يبحث فيه MyBatis عن قيم المقارنة. Javatype هو النوع الصحيح الذي يجب استخدامه لضمان اختبارات مكافئة (على الرغم من أن السلاسل مفيدة في كثير من الحالات).
المثال التالي هو أنه عندما يكون ClassID 20000001 ، يتم تعيين السمة المصلية.
<resultmap type = "liming.student.manager.data.model.studententity" id = "resultmap_studententity_discriminator"> <id property = "studentid" column = "student_id" jdbctype = "varchar"/> <result property = "studentsex" column = "student_sex" javatype = "int" jdbctype = "integer"/> <result property = "studentBirthDay" column = "student_birthday" javatype = "jdbctype = javatype = "byte []" jdbctype = "blob" typeHandler = "org.apache.ibatis.type.blobtypehandler" /> <result property = "placeid" column = "place_id" javatype = "string" jdbctype = "varchar" /> jdbctype = "varchar"> <case value = "20000001" resultType = "liming.student.manager.data.model.studententity"> <result property = "classid" = "class_id" javatype = "string" jdbctype = "varchar>
2. إضافة وحذف وتعديل والتحقق والمعلمات وذاكرة التخزين المؤقت
2.1 حدد
عنصر محدد بسيط للغاية. على سبيل المثال:
<!-استعلام الطالب ، وفقًا لمعرف-> <select id = "getStudent" parametertype = "string" resultMap = "StudentResultMap"> Select St.Student_id ، St.Student_Name ، St.Student_Sex ، St.Student_birthday ، St.Class_ID من Student_tbl st.ttudent_id =
يسمى هذا البيان "getStudent ، وله معلمة سلسلة ، ويعيد كائن من نوع الطالب.
لاحظ أن تحديد المعلمة هو: #{studentId}.
حدد تفاصيل تكوين سمة البيانات:
| ملكية | يصف | احصل على القيمة | تقصير |
| بطاقة تعريف | في هذا الوضع ، يمكن الرجوع إلى معرف فريد من خلال عبارات أخرى | ||
| المعلمة | تم نقل اسم الفئة الكاملة أو الاسم المستعار للمعلمة إلى هذا البيان | ||
| النتيجة | يقوم البيان بإرجاع اسم الفئة بأكمله أو الاسم المستعار لنوع القيمة. لاحظ أنه إذا كانت مجموعة ، فسيتم ملء اسم الفصل أو الاسم المستعار للعنصر في المجموعة هنا ، بدلاً من اسم الفصل للمجموعة نفسها. (لا يمكن استخدام ResultType و ResultMap معًا) | ||
| النتيجة | اسم النتيجة الخارجية المشار إليها. تعيين مجموعة النتائج هو أقوى ميزة في MyBatis. يمكن حل العديد من التعيينات المعقدة بسهولة. (لا يمكن استخدام ResultType و ResultMap معًا) | ||
| Flushcache | إذا تم ضبطها على TRUE ، فسيتم مسح ذاكرة التخزين المؤقت في كل مرة يتم فيها استدعاء البيان. تم تعيين عبارة SELECT على FALSE بشكل افتراضي | صحيح | خطأ | خطأ شنيع |
| usecache | إذا تم تعيينه على TRUE ، فسيتم تخزين مجموعة النتائج من البيان. تم تعيين عبارة SELECT على FALSE بشكل افتراضي تضع المهلة الحد الأقصى للوقت الذي ينتظر فيه محرك الأقراص الاستجابة قبل إلقاء استثناء. الافتراضي هو بلا قيمة ، ويقرر محرك الأقراص نفسه. | صحيح | خطأ | خطأ شنيع |
| نفذ الوقت | اضبط الحد الأقصى للوقت الذي ينتظر فيه محرك الأقراص للاستجابة قبل إلقاء استثناء. يجب تعيين الافتراضي بدون قيمة ، ويقرر محرك الأقراص نفسه | عدد صحيح إيجابي | لم يتم تعيينه |
| جلب | بعد تعيين قيمة ، سيكون محرك الأقراص متحمسًا للعودة بعد أن يصل عدد مجموعات النتائج إلى هذه القيمة. لا يتم تعيين الافتراضي ، ويقرر محرك الأقراص نفسه. | عدد صحيح إيجابي | قرار القيادة |
| بيان stateTytype | بيان ، بيان أعدت ، بيان قابل للاستدعاء. بيانات معدّة ، بيانات قابلة للاستدعاء | إفادة مُعد قابلية للتطبيق | مُعد |
| resultsettype | forward_only ، scroll_sensitive ، scroll_insitist إعادة التوجيه فقط ، التمرير الحساس الحساس للحالة | forward_only Scroll_sevitive scroll_insitivity | قرار القيادة |
2.2 إدراج
بيان إدراج بسيط:
<!-أدخل الطالب-> <insert id = "insertStudent" parametertype = "studententity"> insert in student_tbl (student_id ، student_name ، student_sex ، student_birthday ، class_id) bases ( #{{} </insert>يمكن لـ Insert استخدام سياسة المفتاح الأساسي التلقائي المدعومة من قاعدة البيانات ، وتعيين uSegeneratedKeys = "true" ، ثم قم بتعيين KeyProperty على العمود المقابل ، وهذا ما يتم. على سبيل المثال ، يستخدم الطالب أعلاه المولد تلقائيًا لإنشاء مفتاح أساسي لعمود المعرف. يمكنك أيضًا استخدام عنصر SelecteKey. يستخدم المثال التالي قاعدة بيانات MySQL NextVal ("الطالب") كدالة مخصصة لإنشاء مفتاح.
<!-أدخل المفتاح الأساسي التلقائي للطلاب-> <insert id = "insertStudentAutokey" parametertype = "studententity"> <selecteKey keyProperty = "studentId" resultType = "string" order = "before" ( #{StudentId} ، #{studentName} ، #{studentsex} ، #{studentBirthday} ، #{classentity.classid}) </sert>| ملكية | يصف | احصل على القيمة | تقصير |
| بطاقة تعريف | في هذا الوضع ، يمكن الرجوع إلى معرف فريد من خلال عبارات أخرى | ||
| المعلمة | تم نقل اسم الفئة الكاملة أو الاسم المستعار للمعلمة إلى هذا البيان | ||
| Flushcache | إذا تم ضبطها على TRUE ، فسيتم مسح ذاكرة التخزين المؤقت في كل مرة يتم فيها استدعاء البيان. تم تعيين عبارة SELECT على FALSE بشكل افتراضي | صحيح | خطأ | خطأ شنيع |
| usecache | إذا تم تعيينه على TRUE ، فسيتم تخزين مجموعة النتائج من البيان. تم تعيين عبارة SELECT على FALSE بشكل افتراضي تضع المهلة الحد الأقصى للوقت الذي ينتظر فيه محرك الأقراص الاستجابة قبل إلقاء استثناء. الافتراضي هو بلا قيمة ، ويقرر محرك الأقراص نفسه. | صحيح | خطأ | خطأ شنيع |
| نفذ الوقت | اضبط الحد الأقصى للوقت الذي ينتظر فيه محرك الأقراص للاستجابة قبل إلقاء استثناء. يجب تعيين الافتراضي بدون قيمة ، ويقرر محرك الأقراص نفسه | عدد صحيح إيجابي | لم يتم تعيينه |
| جلب | بعد تعيين قيمة ، سيكون محرك الأقراص متحمسًا للعودة بعد أن يصل عدد مجموعات النتائج إلى هذه القيمة. لا يتم تعيين الافتراضي ، ويقرر محرك الأقراص نفسه. | عدد صحيح إيجابي | قرار القيادة |
| بيان stateTytype | بيان ، بيان أعدت ، بيان قابل للاستدعاء. بيانات معدّة ، بيانات قابلة للاستدعاء | إفادة مُعد قابلية للتطبيق | مُعد |
| uSgeneratedKeys | أخبر MyBatis باستخدام طريقة getGeneratedKeys من JDBC للحصول على المفتاح الأساسي الذي تم إنشاؤه بواسطة قاعدة البيانات (MySQL ، SQLServer ، إلخ. سيكون لقواعد البيانات العلائقية حقولًا يتم إنشاؤها تلقائيًا). الافتراضي: خطأ | صحيح | خطأ | خطأ شنيع |
| KeyProperty | حدد القيمة المراد إرجاعها بواسطة المفتاح الذي يتم تعيينه على MyBatis في getGeneratedKeys ، أو استخدام SelecteKey لبيان الإدراج العنصر الفرعي. |
| ملكية | يصف | احصل على القيمة |
| KeyProperty | السمة التي يجب تعيينها للنتيجة التي تم إنشاؤها بواسطة عبارة SELECTEKEY. | |
| النتيجة | توليد أنواع النتائج. يتيح MyBatis استخدام أنواع البيانات الأساسية ، بما في ذلك أنواع السلسلة وأنتي. | |
| طلب | يمكن ضبطه قبل أو بعد. إذا تم تعيينه من قبل ، فسيتم تحديد المفتاح الأساسي أولاً ، ثم قم بتعيين KeyProperty ، ثم قم بتنفيذ عبارة INSERT ؛ إذا تم ضبطه على ما بعده ، فسيقوم بتشغيل بيان الإدراج أولاً ثم تشغيل عبارة SELECTEKEY ، والتي عادة ما تكون آلية التسلسل المضمنة في عبارة INSERT في قاعدة بيانات المكالمات الداخلية (مثل Oracle). | قبل بعد |
| بيان stateTytype | على النحو الوارد أعلاه ، يدعم MyBatis البيان ، ونماذج البيانات المعدة ، والقابلة للاستدعاء ، والتي تتوافق مع البيان ، والاستجابات المعدة والاستجابات clobablestatement. | إفادة مُعد قابلية للتطبيق |
2.3 تحديث ، حذف
تحديث بسيط:
<!-تحديث معلومات الطالب-> <update id = "updateStudent" parametertype = "studententity"> تحديث student_tbl set student_tbl.student_name = #{studentName} ، student_tbl.student_sex = #{studentsex} ، student_tbl.student_birthday = #{ #{classentity.classid} حيث student_tbl.student_id = #{studentId} ؛ </uptuday>حذف بسيط:
<!-حذف الطالب-> <delete id = "deletestudent" parametertype = "studententity"> delete from student_tbl where student_id = #{studentId} </delete>
تحديث وحذف تفاصيل تكوين سمة البيانات:
| ملكية | يصف | احصل على القيمة | تقصير |
| بطاقة تعريف | في هذا الوضع ، يمكن الرجوع إلى معرف فريد من خلال عبارات أخرى | ||
| المعلمة | تم نقل اسم الفئة الكاملة أو الاسم المستعار للمعلمة إلى هذا البيان | ||
| Flushcache | إذا تم ضبطها على TRUE ، فسيتم مسح ذاكرة التخزين المؤقت في كل مرة يتم فيها استدعاء البيان. تم تعيين عبارة SELECT على FALSE بشكل افتراضي | صحيح | خطأ | خطأ شنيع |
| usecache | إذا تم تعيينه على TRUE ، فسيتم تخزين مجموعة النتائج من البيان. تم تعيين عبارة SELECT على FALSE بشكل افتراضي تضع المهلة الحد الأقصى للوقت الذي ينتظر فيه محرك الأقراص الاستجابة قبل إلقاء استثناء. الافتراضي هو بلا قيمة ، ويقرر محرك الأقراص نفسه. | صحيح | خطأ | خطأ شنيع |
| نفذ الوقت | اضبط الحد الأقصى للوقت الذي ينتظر فيه محرك الأقراص للاستجابة قبل إلقاء استثناء. يجب تعيين الافتراضي بدون قيمة ، ويقرر محرك الأقراص نفسه | عدد صحيح إيجابي | لم يتم تعيينه |
| جلب | بعد تعيين قيمة ، سيكون محرك الأقراص متحمسًا للعودة بعد أن يصل عدد مجموعات النتائج إلى هذه القيمة. لا يتم تعيين الافتراضي ، ويقرر محرك الأقراص نفسه. | عدد صحيح إيجابي | قرار القيادة |
| بيان stateTytype | بيان ، بيان أعدت ، بيان قابل للاستدعاء. بيانات معدّة ، بيانات قابلة للاستدعاء | إفادة مُعد قابلية للتطبيق | مُعد |
<!-عبارة multiplex SQL للاستعلام عن جميع حقول جدول الطالب-> <sql id = "selectudentall"> حدد St.Student_id ، St.Student_Name ، St.Student_sex ، St.Student_Birthday ، St.Class_id من student_tbl st </sql>
وبهذه الطريقة ، يمكنك الرجوع مباشرة واستخدامه في عبارة SELECT. قم بتغيير عبارة حدد أعلاه إلى:
<!-استعلام الطالب ، وفقًا لـ ID-> <SELECT ID = "getStudent" parametertype = "string" resultMap = "StudentResultMap"> <refid = "selectStudentall"/> wherestudent_id = #{thutudtid} </select> 2.5 المعلمات
تم استخدام المعلمات في العديد من الأماكن أعلاه ، مثل الاستعلام ، والتعديل ، وظروف الحذف ، والإدراج ، والبيانات المعدلة ، وما إلى ذلك. أنواع البيانات الأساسية التي يمكن أن تستخدمها myBatis وأنواع البيانات المعقدة من Java.
أنواع البيانات الأساسية ، السلسلة ، int ، التاريخ ، إلخ.
ومع ذلك ، يمكن أن يؤدي استخدام أنواع البيانات الأساسية إلى توفير معلمة واحدة فقط ، لذلك تحتاج إلى استخدام فئة Java Entity أو نوع الخريطة كنوع المعلمة. يمكن الحصول على سماتها مباشرة من خلال #{}.
2.5.1 معلمات النوع الأساسية
ابحث في قائمة الطلاب بناءً على وقت القبول:
<!-استعلام قائمة الطلاب ، وفقًا لوقت القبول-> <SELECT ID = "GetStudentListByDate" parametertype = "date" resultMap = "StudentResultMap"> حدد * من student_tbl st st st st stable class_tbl ct on st.class_id = ct.class_id حيث ct.class_year = #{classyear} ؛ </select> قائمة <Tudententity> StudentList = StudentMapper.getStudentListByClassyear (StringUtil.Parse ("2007-9-1")) ؛ لـ (entitytemp studententity: studentlist) {system.out.println (entitytemp.toString ()) ؛ } 2.5.2 معلمات نوع كيان جافا
ابحث في قائمة الطلاب بالاسم والجنس. استخدم فئات الكيانات كمعلمات:
<!-قائمة الاستعلام الطالب ، مثل الاسم ، = الجنس ، نوع كيان المعلمة-> <select id = "getStudentListing whereentity" parametertype = "studententity" resultmap = "studentresultmap" </select>
كيان الطالب = طالب جديد () ؛ entity.setStudentName ("li") ؛ entity.setStudentSex ("ذكر") ؛ قائمة <Tudententity> StudentList = studentMapper.getStudentListing Whinkentity (الكيان) ؛ لـ (entitytemp studententity: studentlist) {system.out.println (entitytemp.toString ()) ؛ } 2.5.3map المعلمات
ابحث في قائمة الطلاب بالاسم والجنس. استخدم الخريطة كمعلمات:
<!-قائمة طلاب الاستعلام ، = الجنس ، نوع خريطة المعلمة-> <تحديد المعرف = "getStudentListWherEmap" parametertype = "map" resultmap = "studentResultMap"> selec
خريطة <string ، string> map = new hashmap <string ، string> () ؛ map.put ("الجنس" ، "أنثى") ؛ map.put ("الاسم" ، "li") ؛ قائمة <Tudententity> StudentList = StudentMapper.getStudentListListWherEmap (MAP) ؛ لـ (entitytemp studententity: studentlist) {system.out.println (entitytemp.toString ()) ؛ } 2.5.4 تنفيذ المعلمات المتعددة
إذا كنت ترغب في المرور في معلمات متعددة ، فأنت بحاجة إلى إضافة شرح @Param إلى معلمات الواجهة. إعطاء مثال:
كتابة الواجهة:
القائمة العامة <StudentEntity> getStudentListwhereParam (param (value = "name") اسم السلسلة ، param (value = "sex") سلسلة الجنس ، param (value = "عيد الميلاد") تاريخ عيد ميلاد ، param (value = "classentity) classentity) ؛
طريقة كتابة SQL:
<!-قائمة طلاب الاستعلام ، مثل الاسم ، = الجنس ، = عيد ميلاد ، = الفصل ، طريقة متعددة المعلمات-> <select id = "getStudentListwhereWhereParam" resultMap = "StudentResultMap"> SELECT * SELECT * من student_tbl st <where> <test = "name! = null and name! = ''" </if> <if test = "sex! = null and sex! = ''"> و st.Student_sex = #{sex} </if> <if test = "birthday! = null"> و st.Student_BirthDay = #{birthday} </{} = #{classentity.classid} </if> </where> </select>اجعل الاستعلام:
قائمة <Tudententity> StudentList = StudentMapper.getStudentListwhereParam ("،" "،" ، stringutil.parse ("1985-05-28") ، classMapper.getClassByid ("20000002")) ؛ لـ (الطالب entitytemp: {system.out.println (entitytemp.tem 2.5.5 طريقة استبدال السلسلة
بشكل افتراضي ، يؤدي استخدام Syntax #{} إلى إنشاء خاصية المعدة المعدة واستخدام معلمة reparedstatement (=؟) لتعيين القيمة بأمان. حاول أن تكون سريعًا وآمنًا ، وتستخدم أيضًا بشكل متكرر. ولكن في بعض الأحيان قد ترغب في استبدال السلاسل التي لم تتغير في عبارات SQL مباشرة. على سبيل المثال ، بالنسبة للترتيب ، يمكنك استخدام هذا: order by $ {columnName} لكن MyBatis لن يعدل هذا السلسلة والتحايل عليها.
ملاحظة: من غير الآمن للغاية استلام وتطبيق إدخال المستخدم في بيان غير متغير بهذه الطريقة. سيسمح ذلك للمستخدم بزرع التعليمات البرمجية الفاسدة ، لذلك إما أن تتطلب الحقل بعدم السماح للعميل بالدخول ، أو يمكنك التحقق من شرعيته مباشرة.
2.6 ذاكرة التخزين المؤقت
يحتوي MyBatis على آلية ذاكرة التخزين المؤقت القوية القابلة للتكوين والقابلة للتخصيص. تم تحسين تنفيذ ذاكرة التخزين المؤقت لـ MyBatis 3 عدة مرات ، وهو أمر قوي وأسهل في التكوين. بشكل افتراضي ، لم يتم تمكين ذاكرة التخزين المؤقت. بالإضافة إلى ذاكرة التخزين المؤقت للجلسة ، يمكن أن تحسن الأداء وحل التبعيات العالمية. قم بتشغيل ذاكرة التخزين المؤقت للمستوى 2 ، تحتاج فقط إلى إضافة سطر بسيط إلى ملف تعيين SQL: <cache/>
وظيفة هذه الجملة البسيطة هي كما يلي:
(1). سيتم تخزين جميع عبارات تحديد في ملف التعيين.
(2). جميع الإدراج وتحديث وحذف العبارات في ملف التعيين سوف مسح ذاكرة التخزين المؤقت.
(3). تتم إعادة تدوير ذاكرة التخزين المؤقت باستخدام الخوارزمية "نادرًا ما تستخدم مؤخرًا" (4). لن يتم مسح ذاكرة التخزين المؤقت في الوقت المحدد.
(5). يمكن لكل ذاكرة التخزين المؤقت تخزين 1024 قوائم أو إشارات إلى الكائنات (بغض النظر عن نتيجة الاستعلام).
(6). سيتم استخدام ذاكرة التخزين المؤقت كذاكرة التخزين المؤقت "قراءة/كتابة" ، مما يعني أن الكائن الذي تم استرداده لم يتم مشاركته وهو آمن للمتصل. لن تكون هناك مكالمات أخرى (7). أو التعديلات المحتملة للخيط.
على سبيل المثال ، قم بإنشاء ذاكرة التخزين المؤقت FIFO لمسح مرة واحدة في 60 ثانية ، وتخزين نتائج كائن 512 أو مراجع قائمة ، وإرجاع نتائج القراءة فقط. لأن تعديلها في المواضيع غير المستخدمة قد يؤدي إلى تعارضات مرجعية.
<cache exfiction = "fifo" flushinterval = "60000" size = "512" readonly = "true"> </mache>
يمكنك أيضًا مشاركة نفس تكوين ذاكرة التخزين المؤقت أو مثيله في مساحات أسماء مختلفة. في هذه الحالة ، يمكنك استخدام Cache-Ref للإشارة إلى ذاكرة التخزين المؤقت الأخرى.
<cache-ref namepace = "com.liming.manager.data.studentMapper"/>
تفاصيل تكوين سمة بيان ذاكرة التخزين المؤقت:
| ملكية | يوضح | احصل على القيمة | القيمة الافتراضية |
| الإخلاء | سياسة التخزين المؤقت: LRU - الاستخدام الأقل حديثًا: قم بإزالة الكائنات التي لم يتم استخدامها في الفترة الطويلة الأخيرة. FIFI-First-Open: قم بإخراج الكائن السابق في قائمة الانتظار مرجع ناعم - استنادًا إلى قواعد مرجعية ناعمة ، استخدم آلية جمع القمامة لإزالة الكائنات مرجع ضعيف - ضعيف: استخدم آلية جمع القمامة لإزالة الكائنات القوية على أساس قواعد مرجعية ضعيفة | LRU فيفي ناعم ضعيف | LRU |
| Flushinterval | يمثل إجمالي ميلي ثانية معقول. لم يتم تعيين الافتراضي ، لذلك إذا كنت تستخدم المقاصة غير المؤسسة ، فيمكنك فقط استدعاء البيانات لمسحها. | عدد صحيح إيجابي | لم يتم تعيينه |
| مقاس | حجم الكائن المخبوق | عدد صحيح إيجابي | 1024 |
| قراءة | ستعيد ذاكرة التخزين المؤقت للقراءة فقط نفس المثيل إلى جميع المتصلين. لذلك ، لا يمكن تعديل أي منهم ، مما يمكن أن يحسن الأداء بشكل كبير. سوف تمر ذاكرة التخزين المؤقت القابلة للكتابة عبر التسلسل لإرجاع نسخة من كائن مخبأة. سيكون هذا أبطأ ، ولكن أكثر أمانًا. وبالتالي فإن القيمة الافتراضية خاطئة. | صحيح | خطأ | خطأ شنيع |