الفصل 1 السبات و mybatis
Hibernate هو إطار خرائط O/R الأكثر شعبية في الوقت الحاضر. ولدت في SF.NET وأصبحت الآن جزءًا من JBOSS. MyBatis هو إطار رسم خرائط O/R ممتاز آخر. ينتمي حاليًا إلى مشروع فرعي من Apache.
مراجع MyBatis الموقع الرسمي: http://www.mybatis.org/core/zh/index.html
المواد المرجعية السطحية: http://docs.jboss.org/hibernate/core/3.6/reference/zh-cn/html_single/
1.1 مقدمة في السبات
يوفر Hibernate تغليف كامل نسبيًا لهيكل قاعدة البيانات. ينفذ رسم الخرائط O/R من Hibernate بين جداول POJO و DATABASE ، وكذلك التوليد التلقائي وتنفيذ SQL. غالبًا ما يحتاج المبرمجون إلى تحديد علاقة التعيين بين جداول POJO وجداول قاعدة البيانات ، ويمكنهم إكمال عمليات طبقة الثبات من خلال الأساليب التي توفرها السبات. لا يحتاج المبرمجون إلى أن يكونوا بارعين في SQL. ستقوم Hibernate/OJB بإنشاء SQL المقابل تلقائيًا واستدعاء واجهة JDBC لتنفيذها وفقًا لمنطق التخزين المحدد.
1.2 مقدمة إلى MyBatis
ينصب تركيز Ibatis على علاقة التعيين بين Pojo و SQL. ثم ، عن طريق تعيين ملف التكوين ، يتم تعيين المعلمات المطلوبة بواسطة SQL وحقول النتائج التي تم إرجاعها إلى POJO المحدد. بالمقارنة مع السبات "O/R" ، فإن Ibatis هو تطبيق ORM لـ "SQL Mapping".
الفصل 2 مقارنة التطوير
سرعة التطوير
إتقان السبات الحقيقي أكثر صعوبة من MyBatis. MyBatis Framework بسيط نسبيًا وسهل الاستخدام ، لكنه أيضًا بسيط نسبيًا. أنا شخصياً أعتقد أن استخدام MyBatis جيدًا ، يجب عليك أولاً أن تفهم السبات.
مجتمع التنمية
يعتبر كل من السبات و mybatis أطراف تطوير طبقة الثبات الشائعة ، لكن مجتمع تطوير السبات الحيوي نسبيًا ، ويدعم العديد من الأدوات ، والتحديثات أسرع. أعلى نسخة حالية هي 4.1.8. MyBatis هادئ نسبيًا ولديه عدد أقل من الأدوات ، وأعلى إصدار حالي هو 3.2.
عبء العمل التنمية
لدى Hibernate و MyBatis أدوات توليد الكود المقابلة. يمكن إنشاء طرق طبقة DAO البسيطة والأساسية.
بالنسبة للاستعلامات المتقدمة ، يتطلب MyBatis الكتابة اليدوية لبيانات SQL و ResultMap. لدى Hibernate آلية رسم خرائط جيدة ، لذلك لا يحتاج المطورون إلى الاهتمام بتوليد SQL ورسم خرائط النتائج ، ويمكنهم التركيز أكثر على العمليات التجارية.
الفصل 3 مقارنة ضبط النظام
تقوم خطة ضبط الإسبات بتطوير استراتيجية تخزين مؤقت معقولة ؛
حاول استخدام ميزة التحميل الكسول ؛
اعتماد آلية معقولة لإدارة الجلسة ؛
استخدم الاستيلاء على الدُفعات وتعيين معلمات دفعية معقولة (Batch_size) ؛
قم بتنفيذ تصميم تعيين O/R معقول
حل ضبط MyBatis
يتوافق MyBatis مع دورة حياة جلسة السبات من حيث الجلسة ، وآلية معقولة لإدارة الجلسة مطلوبة أيضًا. MyBatis لديه أيضا آلية ذاكرة التخزين المؤقت من المستوى 2. يمكن لـ MyBatis أداء تصميم تحسين SQL مفصل.
جوانب تحسين SQL
سيقوم استعلام Hibernate بالاستعلام عن جميع الحقول في الجدول ، مما سيؤدي إلى استهلاك الأداء. يمكن لـ Hibernate أيضًا كتابة SQL نفسها لتحديد الحقول التي يجب الاستعلام عنها ، لكن هذا يدمر بساطة تطور السبات. يتم كتابة MyBatis 'SQL يدويًا ، بحيث يمكنك تحديد الحقول للاستعلام حسب الحاجة.
يتطلب ضبط عبارات HQL Hibernate طباعة SQL ، والعديد من الناس يكرهون SQL من السبات لأنه قبيح للغاية. MyBatis 'SQL مكتوبة يدويًا بنفسك ، لذلك من السهل ضبطها. لكن السبات لها إحصائيات السجل الخاصة بها. لا يحتوي MyBatis نفسه على إحصائيات السجل ويستخدم Log4J لتسجيله.
قابلية التوسع
يجب تكوين الارتباط بين Hibernate وقواعد البيانات المحددة فقط في ملف XML. جميع عبارات HQL لا علاقة لها بقاعدة البيانات المحددة المستخدمة ، وهي محمولة للغاية. تعتمد جميع عبارات SQL في مشروع MyBatis على قاعدة البيانات المستخدمة ، وبالتالي فإن دعم أنواع قواعد البيانات المختلفة ليس جيدًا.
الفصل 4 استراتيجيات إدارة الكائنات والزحف
إدارة الكائنات
Hibernate هو حل كائن كامل/تعيين علائقي يوفر وظائف إدارة حالة الكائن ، بحيث لم يعد المطورون بحاجة إلى الانتباه إلى تفاصيل نظام قاعدة البيانات الأساسي. وهذا يعني ، مقارنةً بسيناريوهات طبقة الثبات JDBC/SQL الشائعة التي تتطلب إدارة بيانات SQL ، تعتمد السبات منظورًا أكثر توجهاً على الكائنات الطبيعية لاستمرار البيانات في تطبيقات Java.
بمعنى آخر ، يجب على المطورين الذين يستخدمون السبات دائمًا الانتباه إلى حالة الكائن وليس عليهم النظر في تنفيذ عبارات SQL. تمت إدارة هذا الجزء من التفاصيل من قبل السبات ولا يحتاج المطورون إلى فهم عند ضبط أداء النظام.
ليس لدى MyBatis وثائق في هذا المجال ، لذلك يحتاج المستخدمون إلى إدارة الكائنات بأنفسهم بالتفصيل.
استراتيجية الزحف
السباتية لديها آلية جيدة لزحف الأشياء المرتبطة بالكيان. لكل علاقة بالجمعية ، يمكن تعيينها بالتفصيل ما إذا كان سيتم تأخير التحميل ، ويتم توفير أربعة أوضاع: تزحف الارتباط ، والاستعلام الزحف ، والزحف الفرعي ، والزحف. تم تكوينها ومعالجتها بالتفصيل.
تم تكوين تحميل MyBatis البطيء على مستوى العالم.
الفصل 5 مقارنة آليات ذاكرة التخزين المؤقت
ذاكرة التخزين المؤقت السباتية
ذاكرة التخزين المؤقت لـ Hibernate المستوى 1 هي ذاكرة التخزين المؤقت للجلسة. إذا استفادت من ذاكرة التخزين المؤقت من المستوى 1 ، فأنت بحاجة إلى إدارة دورة حياة الجلسة بشكل جيد. يوصى باستخدام جلسة في عملية عمل. يتطلب ذاكرة التخزين المؤقت من المستوى 1 إدارة صارمة للجلسة.
ذاكرة التخزين المؤقت لـ Hibernate Level 2 هي ذاكرة التخزين المؤقت على مستوى الجلسة. يتم تقسيم ذاكرة التخزين المؤقت لـ SessionFactory إلى ذاكرة التخزين المؤقت المدمجة وذاكرة التخزين المؤقت الخارجية. تقوم ذاكرة التخزين المؤقت المدمجة بتخزين البيانات الموجودة في بعض سمات التجميع لكائن SessionFactory (بيانات عنصر تعيين وبيانات SQL المحددة مسبقًا ، وما إلى ذلك) ، والتي هي للقراءة فقط للتطبيقات. تقوم ذاكرة التخزين المؤقت الخارجية بتخزين نسخة من بيانات قاعدة البيانات ، والتي تشبه ذاكرة التخزين المؤقت الأساسية. بالإضافة إلى استخدام الذاكرة كوسيلة للتخزين ، يمكن للذاكرة التخزين الثانوية أيضًا استخدام أجهزة التخزين الخارجية مثل الأقراص الصلبة. تسمى ذاكرة التخزين المؤقت الثانوية ذاكرة التخزين المؤقت على مستوى العملية أو ذاكرة التخزين المؤقت على مستوى الجلسة. يمكن مشاركتها من قبل جميع الجلسات ، ودورة حياتها موجودة وتختفي مع دورة حياة SessionFactory.
ذاكرة التخزين المؤقت MyBatis
يحتوي MyBatis على ميزة ذاكرة التخزين المؤقت للاستعلام القوية التي يمكن تكوينها وتخصيصها بسهولة شديدة. تم تنفيذ العديد من التحسينات على تنفيذ ذاكرة التخزين المؤقت في MyBatis 3 ، مما يجعله أكثر قوة وسهولة تكوينه.
بشكل افتراضي ، لم يتم تمكين التخزين المؤقت. بالإضافة إلى ذاكرة التخزين المؤقت للجلسة المحلية ، يمكن أن يعزز تسييل والتعامل مع التبعيات الدائرية أيضًا. لتمكين ذاكرة التخزين المؤقت من المستوى 2 ، تحتاج إلى إضافة سطر إلى ملف تعيين SQL الخاص بك: <cache/>
هذا كل شيء حرفيا. تأثير هذا البيان البسيط هو كما يلي:
سيتم تخزين جميع عبارات SELECT في ملف بيانات التعيين.
جميع إدراج البيانات وتحديثها وحذفها في ملف بيانات التعيين تحديث ذاكرة التخزين المؤقت.
سيتم استرداد ذاكرة التخزين المؤقت باستخدام الخوارزمية الأقل استخدامًا (LRU ، الأقل استخدامًا).
اعتمادًا على الجدول (مثل عدم وجود فاصل زمني للتدفق ، ولا فاصل تحديث) ، لن يتم تحديث ذاكرة التخزين المؤقت بأي ترتيب زمني.
تقوم ذاكرة التخزين المؤقت بتخزين 1024 إشارات إلى مجموعة أو كائن قائمة (بغض النظر عن ما تعيد طريقة الاستعلام).
يعتبر ذاكرة التخزين المؤقت ذاكرة التخزين المؤقت للقراءة/الكتابة (قابلة للقراءة/قابلة للكتابة) ، مما يعني أن استرجاع الكائن لم يتم مشاركته ويمكن تعديله بأمان من قبل المتصل دون التدخل في التعديلات المحتملة التي أجراها المتصلين أو المواضيع الأخرى.
يمكن تعديل كل هذه الخصائص بواسطة خصائص عناصر ذاكرة التخزين المؤقت.
على سبيل المثال: <cache expiction = "fifo" flushinterval = "60000" size = "512" readonly = "true"/>
ينشئ هذا التكوين الأكثر تقدماً ذاكرة التخزين المؤقت FIFO ويتم تحديثها كل 60 ثانية ، مما يوفر 512 إشارة إلى كائن أو قائمة النتائج ، ويعتبر الكائن الذي تم إرجاعه للقراءة فقط ، لذا فإن تعديلها بين المتصلين في مؤشرات ترابط مختلفة سيؤدي إلى تعارض. استراتيجيات الاسترداد المتاحة هي ، الافتراضي هو LRU:
LRU الأقل استخدامًا مؤخرًا: قم بإزالة الكائنات التي لم يتم استخدامها لأطول وقت.
FIFO First-In First-Out: قم بإزالة الكائنات بالترتيب الذي يدخلون به ذاكرة التخزين المؤقت.
مرجع ناعم ناعم: يزيل الكائنات القائمة على حالة جامع القمامة وقواعد المرجع الناعمة.
المراجع الضعيفة الضعيفة: قم بإزالة الكائنات بقوة أكبر على أساس حالة جامع القمامة وقواعد مرجعية ضعيفة.
يمكن ضبط Flushinterval على أي عدد صحيح إيجابي ، ويمثل شكل ميلي ثانية معقول من الفترة الزمنية. لم يتم تعيين الافتراضي ، أي أنه لا يوجد فاصل تحديث ، ويتم تحديث ذاكرة التخزين المؤقت فقط عند استدعاء البيان.
يمكن ضبط حجم (عدد المراجع) على أي عدد صحيح موجب ، تذكر عدد الكائنات التي تقوم بها ذاكرة التخزين المؤقت وعدد موارد الذاكرة المتاحة في بيئة التشغيل الخاصة بك. القيمة الافتراضية هي 1024.
يمكن ضبط خاصية ReadOnly على True أو False. تقوم ذاكرة التخزين المؤقت للقراءة فقط بإرجاع نفس مثيل كائن ذاكرة التخزين المؤقت إلى جميع المتصلين. لذلك ، لا يمكن تعديل هذه الكائنات. هذا يوفر مزايا الأداء المهمة. تقوم ذاكرة التخزين المؤقت القابلة للقراءة والقابلة للكتابة بإرجاع نسخة من كائن ذاكرة التخزين المؤقت (عن طريق التسلسل). سيكون هذا أبطأ ، لكنه آمن ، لذلك فهو خاطئ افتراضيًا.
أوجه التشابه
بالإضافة إلى استخدام آلية التخزين المؤقت الافتراضية للنظام ، يمكن لـ Hibernate و MyBatis الثانوية كتابة سلوك ذاكرة التخزين المؤقت بشكل كامل من خلال تنفيذ ذاكرة التخزين المؤقت الخاصة بك أو إنشاء محولات لحلول ذاكرة التخزين المؤقت لجهات خارجية أخرى.
الاختلافات
يتم تكوين تكوين ذاكرة التخزين المؤقت الثانوية لـ Hibernate بالتفصيل في ملف التكوين الذي تم إنشاؤه بواسطة SessionFactory ، ثم يتم تكوينه في خريطة الجدول المحددة.
يتم تكوين تكوين ذاكرة التخزين المؤقت الثانوية لـ MyBatis بالتفصيل في كل خريطة محددة من الجدول ، بحيث يمكن تخصيص آليات ذاكرة التخزين المؤقت المختلفة لجداول مختلفة. ويمكن لـ MyBatis مشاركة نفس تكوين ذاكرة التخزين المؤقت والمثيل في مساحة الاسم ، والتي يتم تنفيذها من خلال Cache-REF.
مقارنة بين الاثنين
نظرًا لأن Hibernate لديه آلية إدارة جيدة لكائنات الاستعلام ، فإن المستخدمين لا يحتاجون إلى الاهتمام بـ SQL. لذلك ، إذا ظهرت البيانات القذرة عند استخدام ذاكرة التخزين المؤقت الثانوية ، فسيقوم النظام بالإبلاغ عن خطأ ومطالبة.
في هذا الصدد ، يتطلب MyBatis رعاية خاصة عند استخدام ذاكرة التخزين المؤقت L2. إذا كان لا يمكن تحديد نطاق عمليات تحديث البيانات بالكامل ، فتجنب الاستخدام العمياء للذاكرة التخزين المؤقت. خلاف ذلك ، فإن ظهور البيانات القذرة سيؤدي إلى مخاطر خفية كبيرة للتشغيل العادي للنظام.
الفصل 6 مقارنة وملخص السبات و MyBatis
أوجه التشابه بين الاثنين
يمكن لكل من Hibernate و MyBatis إنشاء SessionFactory من ملف تكوين XML من خلال SessionFactoryBuider ، ثم إنشاء جلسة من SessionFactory ، وأخيراً تنفيذ المعاملات وبيانات SQL. من بينها ، دورات الحياة في SessionFactoryBuider و SessionFactory والجلسة متشابهة تقريبًا.
يدعم كل من Hibernate و MyBatis معاملات JDBC و JTA.
مزايا MyBatis
يمكن لـ MyBatis إجراء تحسينات SQL أكثر تفصيلاً وتقليل حقول الاستعلام.
من السهل إتقان MyBatis ، في حين أن السبات لديه عتبة أعلى.
مزايا السبات
تطوير طبقة DAO من Hibernate أبسط من MyBatis ، والذي يتطلب الحفاظ على SQL ورسم خرائط النتائج.
يحافظ Hibernate على كائنات واخبارات ذاكرة التخزين المؤقت أفضل من MyBatis ، وهو أكثر ملاءمة للحفاظ على الكائنات التي يتم إضافتها وحذفها وتعديلها والتحقق منها.
تحتوي قاعدة بيانات Hibernate على قابلية للنقل جيدة ، وقاعدة بيانات MyBatis لها قابلية للنقل ، وتحتاج قواعد البيانات المختلفة إلى كتابة SQL مختلفة.
لدى Hibernate آلية ذاكرة التخزين المؤقت L2 أفضل ، والتي يمكن أن تستخدم ذاكرة التخزين المؤقت لجهة خارجية. يوفر MyBatis نفسه آليات التخزين المؤقت الضعيفة.
ملخص آخرون
يحتوي Hibernate على وظائف قوية ، وقاعدة بيانات جيدة ، وقدرات رسم الخرائط القوية O/R. إذا كنت بارعًا تمامًا في الإسبات وتغليف السبات بشكل صحيح ، فستكون رمز طبقة الثبات بالكامل في مشروعك بسيطًا للغاية ، فهناك رمز قليل جدًا للكتابة ، وسرعة التطوير سريعة جدًا وباردة جدًا.
عيب السبات هو أن عتبة التعلم ليست منخفضة ، ويجب أن تكون بارعا فيه. يجب أن يكون لديك خبرة قوية وقدرة على تصميم رسم الخرائط O/R ، وكيفية تحقيق التوازن بين الأداء ونموذج الكائن ، وكيفية استخدام السبات جيدًا.
Ibatis سهل البدء والتعلم والاستخدام ، ويوفر وظيفة ربط الكائنات التلقائي لاستعلامات قاعدة البيانات ، وتستمر مع تجربة استخدام SQL الجيدة. إنه مثالي تمامًا للمشاريع التي لا تحتوي على متطلبات نموذج الكائن العالية.
عيب Ibatis هو أن الإطار لا يزال بسيطًا نسبيًا وأن الوظائف لا تزال مفقودة. على الرغم من تبسيط رمز ربط البيانات ، إلا أنه يجب كتابة استعلام قاعدة البيانات الأساسي بالكامل في حد ذاته ، إلا أن عبء العمل كبير نسبيًا ، وليس من السهل التكيف مع تعديل قاعدة البيانات السريعة.