MyBatis هو إطار طبقة دائم شائع في هذه الصناعة. إنه خفيف الوزن وسهل الاستخدام. إنه يقود تمامًا في مجال تكنولوجيا المعلومات المالي. إنه أكثر شعبية من السبات ، مع العديد من المزايا ويستحق أيضًا التعلم منها. لكن MyBatis ليس مثاليًا ، ولا يزال تصميمه وترميزه لديهما العديد من أوجه القصور ، وحتى العيوب. يناقش هذا المقال بإيجاز هذه العيوب:
1.MyBatis يستخدم DTD كملف التحقق لملفات تكوين XML ، ولكن من الواضح أن DTD هي تقنية محوّة تقريبًا. لها وظائف محدودة للغاية ، وسوء التوسع للغاية ، وسوء التوسع للغاية ، وسوء التوسع للغاية ، وسوء القراءة. يمكن أن يتحول الربيع بشكل رائع من DTD إلى XSD ، لكن MyBatis لم يكن لديه هذه الشجاعة.
2. إذا لم يتم توافق الإصدار بشكل جيد ، خذ 3.3.0―> 3.4.0 كمثال. وفقًا للمواصفات العامة للصناعة ، يمكن ترقية رقم الإصدار من المستوى الثاني ، ويمكن إضافة وظائف ، ولكن يجب ضمان التوافق المتخلف. ومع ذلك ، فإن نهج MyBatis ليس مثل هذا بالضبط. ألقِ نظرة على الطريقة الرئيسية لـ itshandler للتحضير:
.
لا توجد طريقة مضاف هنا ، ولكن تتم إضافة معلمة مباشرة إلى الطريقة الأصلية! هناك العديد من الأمثلة المماثلة ، لذلك لن أدرجها واحدة تلو الأخرى.
3. يستخدم المكون الإضافي MyBatis واجهة اعتراضية عامة ، مصحوبة بتعليقات مثل @intercepts و signature لتنفيذ طرق متعددة لاعتراض مكونات متعددة. يبدو مرنًا جدًا. في رأيي ، الهيكل غير واضح في الواقع بما فيه الكفاية. أثناء التطوير الفعلي ، هل ستضع تعزيز اعتراض Handler و Resultsethandler في فصل واحد؟ أليس هذا صحيحًا (نعم؟ هل أنت مبدأ المسؤولية الفردية ومبدأ الافتتاح والإغلاق كل القرف؟) ، فلماذا من الضروري فرض نفس الواجهة؟
بالإضافة إلى ذلك ، استخدم التعليق التوضيحي signature لتحديد طرق المكون التي تحتاج إلى اعتراض. إذا كان التعليق التوضيحي خاطئًا ، فلن يبلغ التجميع عن خطأ. يمكنك الانتظار فقط حتى يتم تشغيله لاكتشافها. دعونا نلقي نظرة على المثال أعلاه:
افترض أنني قمت بتطبيق مكون إضافي للإصدار 3.3.0:
intercepts ({signatureature (type = ittuplehandler.class ، method = "prepared" ، args = {connection.class})}) public class staterlerLerNtroptor يطرف اعتراض {OverRidepublic intercept (target invocation) {return invocation.proceed () ؛ هذا) ؛}@Overridepublic void setProperties (خصائص الخصائص) {}}ثم ، تمت ترقيته إلى 3.4.0. نتيجة لذلك ، كان التجميع طبيعيًا ، ولكن عندما تم تشغيله ، تم طرح استثناء.
4. ذاكرة التخزين المؤقت MyBatis ببساطة عديمة الفائدة ، وبغض النظر عما إذا كان هناك تكوين ، من الضروري استخدام ذاكرة التخزين المؤقت أو تحديث ذاكرة التخزين المؤقت ، من الضروري حساب ذاكرة التخزين المؤقت. إذا لم يكن هناك ذاكرة التخزين المؤقت أو تحديث ذاكرة التخزين المؤقت ، فإن هذا الحساب هو مضيعة.
5. لتنفيذ الدُفعات من MyBatis ، راجع مثال JDBC التالي:
public void testjdbcbatch (connection conn) يلقي الاستثناء {try {conn.setautocommit (false) ؛ batchupdate (conn) ؛ cleartestdata (conn) ؛ conn.Commit () ؛ conn.setautocommit (true) ؛} catch (استثناء e) {preparedStatement ps = null ؛ حاول {ps = conn.preparestateMent ("delete table_name1 where field_name1 =؟") ؛ ps.SetString (1 ، "test") ؛ int d = ps.executeupdate () ؛ system.out.println ("حذف العد:" + d) ؛ e) {}}} batchupdate private void (connection conn) يرمي sqlexception {preparedStatement ps = null ؛ try {string sql = "insert في table_name2 (field_name1 ، field_name2 ، field_name2) القيم (؟ ،؟ ،؟)" i ++) {string random = randomstringutils.randomalphabetic (8) ؛ ps.SetString (1 ، "test") ؛ // field_name1ps.SetString (2 ، "data" + random) ؛ // field_name2ps.esetstring (3 ، "parameter" + randland) ؛ ps.ExecuteBatch () ؛} أخيرًا {try {ps.close () ؛} catch (استثناء e) {}}}لا يوجد رمز لا شعور بالتناقض ، ويمكن تنفيذه بشكل طبيعي ، ويمكن أن يتراجع كما هو متوقع. وهذا يعني أن نفس الاتصال في نفس المعاملة يمكن أن يعمل SQL و SQL العاديين في نفس الوقت ، لكنك تجربه في SQLSession من نفس المعاملة ، وما تفسدك هو أنه لا يمكنك تبديل طريقة التنفيذ في نفس المعاملة!
6. توافق منتجات قاعدة البيانات: تم تسليم MyBatis على سيطرة SQL للمطورين ، لذلك احتلت أخلاقيا المرتفعات القادة - ما كتبته غير متوافق ، وهذا هو مستواك الخاص! ولكن هل هذا هو الصحيح لإطار جيد حقًا؟ لماذا لا يمكن توفير بعض التنفيذ المتوافق مع بعض التنفيذ؟ على سبيل المثال ، إذا كانت وظيفة Decode ، التي تعتبر إلهًا في أوراكل ، يمكن تزويدها بعلامة <code> في sqlmapper وتم تعديلها بصمت إلى حالة وقت لاحق؟ بمعنى آخر ، لا يهم ما إذا كان المسؤول لا يوفرها ، ولكن يجب عليك توفير طريقة توسع ، لذلك أعود إلى: قابلية التوسع سيئة للغاية ، قابلية التوسع سيئة للغاية ، وقابلية التوسع سيئة للغاية. قلت الأشياء المهمة ثلاث مرات ، لكنني قلت لهم ست مرات.
ما سبق هو عيوب MyBatis التي قدمها لك المحرر. آمل أن يكون ذلك مفيدًا لك!