استندت هذه المقالة سابقًا إلى إعادة بناء SQLSessionFactoryBean ، لذلك سأراجع بإيجاز العمليات التي قمت بها:
إنشاء SQLSessionFactoryBean جديد ، والرمز الأولي هو نفسه MyBatis-Spring ؛
Refactor the BuildSqlSessionFactory () ، استخراج العديد من العبارات في مجموعة من الطرق الصغيرة ، وحجز أساليب التكوين المخصصة ، وإضافة أساليب getter السمات الشائعة ؛
استخراج واجهات مصنع المكونات وتوفير فئة أداة إنشاء المكون SQLSessionComponetFactorys ، والتي تدير مركزيا XXX () جديدة منتشرة في أماكن مختلفة لتسهيل استبدال المكونات.
الآن دعونا نلقي نظرة على كيفية التوسع. أولاً ، قم بإنشاء schemasqlsessionfactorybean ، ورث SQLSessionFactoryBean ، وامتازه مع فئة تم إنشاؤها حديثًا في تكوين XML:
SchemasqlSessionFactorybean من الطبقة العامة يمتد sqlsessionfactorybean {}بالنسبة لبعض ملحقات الوظائف البسيطة ، مثل تعيين نوع النتيجة الافتراضية ومسح اختصار النوع المحدد ، لن أناقشه كثيرًا هنا. سأركز هنا على كيفية التوسع للتحقق من تكوين SQLMapper باستخدام XSD.
1. الكتابة فوق طريقة doparsqlmapperResource () في SQLSessionFactorybean. وظيفة هذه الطريقة هي تحليل ملف تكوين SQLMapper.
بالطبع ، من أجل التوافق ، تحتاج أولاً إلى تحديد ما إذا كان DTD. إذا كان DTD ، قم بتحليله وفقًا للطريقة الأصلية ، وإلا قم بتحليله وفقًا للطريقة المخصصة:
Package org.dysd.dao.mybatis.schema ؛ import org.apache.ibatis.executor.errorContext ؛ import org.apache.ibatis.session.configuration org.springframeworkork.util.xml.xmlvalidationModedEdEtector ؛ schemasqlsessessionfactorybean detectValidationMode (mapperlocation) ؛ if (mode == xmlvalidationModedEtector.validation_dtd) {// إذا كان dtd ، استخدم myBatis Paricing Super.DoparSesqlMapperResource (التكوين ، mapperlocation) ؛} this.doparsesqlmapperResourceWithsChema (التكوين ، mapperlocation) ؛} catch (استثناء e) {رمي netterioException جديد ("فشل في تحليل مورد رسم الخرائط: doparsesqlmapperResourceWithsChema (تكوين التكوين ، الموارد mapperlocation) {} private int detectvalidationMode (Resource MapPerlocation) يلقي NesteException {int mod detector.detectValidationMode (mapperlocation.getInputStream ()) ؛} catch (استثناء e) {رمي nestedioException جديد ("فشل في تحديد مورد رسم الخرائط: '" + mapPperLocation + "' '، e) ؛} أخيرًا {errorContext.instance (). reset () ؛}}}}نحن هنا نقترض XMLValidationModedEtector في الربيع للكشف عن وضع التحقق من ملفات تكوين XML. إنه بسيط منطقياً ، فقط اقرأ سطرًا واحدًا تلو الآخر. قبل بدء النص ، إذا وجدت أن هناك تعريف DTD ، فستقوم بإرجاع وضع DTD ، وإلا فإنك ستعود إلى وضع XSD (في الواقع ، ليس فقط وضع الوضع في الربيع ، ولكن أيضًا مساحة الاسم المخصصة خلفها أيضًا الربيع).
في هذه المرحلة ، تم تقسيم تحليل ملف تكوين SQLMapper إلى فرعين ، متوافقان مع تحليل MyBatis الرسمي ، ويتم تنقل التحليل في وضع XSD إلى الطريقة DoparSesqlMapperResourceWithsshema ().
2. اكتب ملف XSD للتحقق من SQLMapper (يتطلب بعض المعرفة الأساسية لـ XSD ، يرجى الرجوع إلى ملاحظات الدراسة على جزء XML في هذه المدونة)
1. استخدم أولاً أداة XML لتحويل ملف DTD MyBatis إلى ملف XSD الأصلي. هناك العديد من أدوات XML التي لديها هذه الوظيفة. يمكنك البحث عبر الإنترنت.
هنا ثلاثة مستويات:
(1) عنصر الجذر (عنصر mapper): المقابلة لملف SQLMapper ، هناك سمة مساحة الاسم ، تمثل تصنيفًا منطقيًا لعناصرها الفرعية. تجدر الإشارة إلى أن سمة مساحة الاسم هنا تختلف عن مساحة اسم XML. السابق هو تصنيف منطقي لـ MyBatis نفسه ، ويستخدم الأخير لتحديد عناصر XML وقيود السمات التي يمكن أن تظهر في ملفات XML.
(2) عناصر الطفل من المستوى الأول (ذاكرة التخزين المؤقت | Cache-Ref | ResultMap | parameTermap | sql | insert | update | delete | select): العناصر الفرعية للمستوى الأول من mapper. نظرًا لأن إطار عمل MyBatis يحتوي على معالجة مختلفة لعناصر الأطفال من المستوى الأول ، يتم استخدامه كمستوى منفصل. لأنه يضيف بشكل أساسي وحذف وتغييرات للتحقق من البيانات ، يطلق عليه عنصر بيان مستوى البيان.
(3) عناصر أخرى (نص تكوين SQL ، قم بتضمين | trim | حيث | set | foreach | اختر | if): النص المستخدم لتكوين البرامج النصية SQL ، وكذلك عناصر البرنامج النصي الدينامي
2. قم بإجراء التعديلات التالية بناءً على توليد ملفات XSD
(1) أضف مساحة اسم ، مثل:
<؟ xmlns = "http://dysd.org/schema/sqlmapper" targetNamesPace = "http://dysd.org/schema/sqlmapper الإصدار = "1.0">
(2) حزم العنصر من المستوى الأول في مجموعة بيانات مجموعة العناصر
(3) تعديل عنصر Mapper للسماح بالظهور في مساحات أسماء أخرى
(4) لف عناصر البرنامج النصي الدينامي
(5) استخدم DynaScriptGroup لاستبدال مكان ظهور عناصر البرنامج النصي الديناميكي ، مثل <select> عناصر
(6) بعض التحسينات الأخرى ، مثل تحديد بيان القيم الثلاثة ، والتحضير ، والقابلة للاستدعاء والتي يمكن أن تؤخذ بواسطة stateType كنوع التعداد:
<xsd: simpletype name = "ittupletype"> <xsd: resriction base = "xsd: token"> <xsd: enumeration value = "state" /> <xsd: enumeration value = "prepared" /> <xsd: enumeration value = "callable" /> < /xsd: retriction>
وتشمل تلك التي تشمل parametermode و jdbctype و javatype ، إلخ.
ما سبق هو ملخص ملف تكوين SQLMAPPER المستخدم بواسطة XSD للتحقق من myBatis. آمل أن يكون ذلك مفيدًا للجميع. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر على الجميع في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!