البرمجة في تشغيل الواجهة
بشكل عام ، عندما نقوم ببناء فصول تعطيف واجهات SQL ، يبدو عادةً مثل هذا:
public static void testbasicquery (int id) {sqlsession session = mybatisutils.getSqlSession () ؛ جرب { / * * يجب أن يتوافق David.Mybatis.demo.ivisitoroperation.basicquery هنا مع مساحة الاسم في التكوين في الشكل أدناه * / زوار الزوار = (الزوار) session.selectone ("david.mybatis.demo.ivisitoroperation.basicquery" ، id) ؛ mybatisutils.closesession (جلسة) ؛ system.out.println (زائر) ؛ } catch (استثناء e) {// todo: استثناء التعامل}}}<!-هنا يتوافق مساحة الاسم مع المعلمة السلسلة التي مررت بها-> <mapper namepace = "david.mybatis.demo.ivisitoroperation"> <!-هنا resultType يتوافق مع الاسم المستعار الذي تم تحديده فقط في edsitor * exititor extory * where#ed extory = اطلب عن طريق المعرف </select> </mapper>
وبهذه الطريقة ، إذا كانت الأسماء على كلا الجانبين غير مقابلة بطريق الخطأ أثناء عملية التطوير الحقيقية ، فسيحدث استثناء. لتجنب مثل هذا الموقف ، يمكننا استخدام طريقة الواجهة لأداء العمليات المقابلة. دعنا نعدل هذه المقالة أدناه.
أولاً ، نقوم بإنشاء فئة جديدة من IVISITOperation تحت اسم الحزمة david.mybatis.demo ، مما يشير إلى أنه سيتم تشغيل واجهات جميع أساليب قاعدة البيانات في المستقبل ، كما هو موضح أدناه:
package david.mybatis.demo ؛ import java.util.list ؛ import david.mybatis.model.pagenateargs ؛ import david.mybatis.model.visitor ؛ public interface ivisitoroperation { /*** basic query* / public dissitor basicquery (int id) ؛ = mybatisutils.getsqlsession () ؛ حاول {ivisitoroperation voperation = session.getMapper (ivisitoroperation.class) ؛ زائر الزائر = Voperation.BasicQuery (ID) ؛ mybatisutils.closesession (جلسة) ؛ system.out.println (زائر) ؛ } catch (استثناء e) {// todo: استثناء التعامل}}}يتم ذلك ، لذلك لا داعي للقلق بشأن عدم التطابق الذي قد ينتج عن أسماء طريقة الكتابة اليدوية.
عملية CRUD
سيشرح ما يلي إنشاء عمليات CRUD و GetList استنادًا إلى عمليات جدول واحد. من أجل إنشاء بعض بيانات الاختبار ، دعنا أولاً نحصل على طريقة إضافة.
استمر في إضافة أساليب واجهة إضافة وحذف وتحديث والاستعلام و Getlist في فئة واجهة IvisitorOperation الأخيرة ، كما هو موضح أدناه:
/** الاستعلام الأساسي*/ Public Dissitor BasicQuery (int id) ؛ /** إضافة زائر*/ int العام إضافة (زائر الزائر) ؛ /** حذف الزائر*/ public int delete (int id) ؛ /** تحديث الزائر*/ int public update (زائر الزوار) ؛ /** استعلام زائر*/ استعلام الزوار العام (INT ID) ؛ / * * قائمة زوار الاستعلام */ قائمة عامة <Sisitor> getList () ؛
بالنسبة لعمليات CRUD المقابلة ، تكون العقد الإدراج ، والتحديث ، والحذف ، واختيار العقد على التوالي ضمن عقدة <mapper> من VisitorMapper.xml. للحصول على تفاصيل التكوين التفصيلية ، يرجى الرجوع إلى الموقع الرسمي http://mybatis.github.io/mybatis-3/sqlmap-xml.html.
التكوين في هذا المثال هو كما يلي: استخدم #{parameter_name} لتمرير المعلمات ، وبالطبع ، يمكنك أيضًا استخدام $ {parameter_name} مباشرة.
بالطريقة السابقة ، سيقوم MyBatis بتحويله إلى نموذج محدد ، على سبيل المثال ، إدراج في الجدول (الاسم) قيم (#{name}) => إدراج إلى قيم الجدول (الاسم) (؟) (في حالة MySQL)
بالطريقة الأخيرة ، سيقوم MyBatis بتمرير المعلمات دون القيام بأي عمليات ، مثل الإدراج في قيم الجدول (الاسم) ($ {name}) => إدراج في قيم (الاسم) ([القيمة التي مررت بها]) ، تمرير AA ، وهنا AA ، تمرير 'aa' ، هنا 'aa'.
<؟ <!-تعني usegeneratedKeys = "true" ما إذا كان يجب استخدام تسلسل النمو الذاتي ، يحدد keyproperty = "id" عمود النمو الذاتي ، حيث يشير المعلمة = "الزوار" إلى النوع المقابل الذي تم تمريره في التعريف في QuortiperOp interface resulttype ، مثل النموذج الذي تم إرجاعه ، مثل النتيجة المربعة في Query. يعد نوع الإرجاع المخصص هو الخيار الأفضل لإرجاع الأنواع المعقدة وهو أيضًا أقوى سلاح في MyBatis-> <insert id = "add" parametertype = "visitor" usegeneratedkeys = "true" keyproperty = "id" </sert> <delete id = "delete" parametertype = "int"> delete من الزائر حيث الحالة> 0 و id =#{id} </delete> <update id = "update" parametertype = "visitor"> update set set name =#{name} ، email =#{elem} ، status = </uptuday> <select id = "query" parametertype = "int" resultType = "Visitor"> حدد المعرف ، الاسم ، البريد الإلكتروني ، الحالة ، createTime من الزائر حيث id =#{id} و status> 0 order by id </select> <تحديد المعرف = "basicquery" المعلمة = int </select> <select id = "getList" resultmap = "visitorrs"> <refid = "getListsql" /> </select> <resultmap type = "visitor" id = "visitors"> <id column = "id" propert column = "createTime" property = "CreateTime"/> </sromeptmap> <sql id = "getListsQl"> حدد * من الزائر حيث الحالة> 0 </sql> </t.شيء واحد يجب ملاحظته هنا هو أن المعرف في عقدة التشغيل يجب أن يتوافق مع اسم الواجهة في تعريف الواجهة ، ويجب أن يتوافق نوع المعلمة أيضًا إليه. على سبيل المثال ، يتم إضافة الواجهة (زائر الزوار). ثم عند تكوين عقدة إدراج ، id = "add" و parametertype = "visitor"
خلاف ذلك ، سيتم الإبلاغ عن استثناء مقابل. على سبيل المثال ، إذا كانت عقدة المعرف لا تتوافق مع اسم الواجهة ، فسيظهر الاستثناء التالي:
يمكنك أن تلاحظ أنه عند الحصول على قائمة في ملف تكوين VisitorMapper.xml ، يمكنك استخدام ResultMap. عند استخدام ResultMap ، يمكنك تحديد الحقول التي تقوم بها خرائط بيان SQL الخاصة بك ، لأنه في بعض الأحيان لا تحتاج إلى العديد من الأعمدة ، لذلك لا تحتاج إلى تكوين العديد من الخرائط عند تكوين التعيين ، أو أن العمود الخاص بك قد تم استبعاده ، لذلك لا يمكنك استخدام ResultType مباشرة = "الزائر". يمكنك أيضًا التحكم في ما إذا كنت تريد تعيين قيمة السمة <Stepts> ضمن عقدة <Sified> للتحكم في ما إذا كنت تريد تحديد تسمية الجمال في Javabean على النحو التالي.
<Steptss> <setting name = "mapunderscoretocamelcase" value = "false" /> < /settings>
للحصول على تكوينات أخرى تعدل Mapper ، يمكنك عرضها على http://mybatis.github.io/mybatis-3/configuration.html#settings.
بالنسبة لفئة Mapper للزوار كما يلي:
<mapper namespace = "david.mybatis.demo.ivisitoroperation"> <sql id = "getListsql"> حدد معرفًا كزوار ، الاسم ، البريد الإلكتروني ، الحالة ، createTime من الزائر حيث الحالة> 0 </sql> <select id = "getlist" resultmap = "visitors"> الممتلكات. يجب أن تكون الحقول الموجودة في ذلك هي الخصائص التي تحددها في الكيان. هذا حساس للحالة ، وإلا فلن يجد Setter الافتراضي الخاصية المقابلة عند تعيين القيم إلى الخاصية. يمكنك تجربة خاصية العمود المقابلة لاسم مجموعة النتائج التي تم إرجاعها بواسطة عبارة الاستعلام. إذا تم إعطاء اسم مستعار للحقل المقابل ، على سبيل المثال ، يصبح المعرف زوارًا ، فيجب أن يتوافق اسم العمود المقابل أيضًا مع -> <resultmap type = "visitor" id = "visitors"> <id column = "visitor_id" propert Column = "CreateTime" Property = "CreateTime"/> </sromept
ستلاحظ هنا أيضًا أن هناك عقدة <sql>. يستخدم هذا لاستخراج بيانات SQL العامة أو الحقول لإعادة الاستخدام في أماكن أخرى. للحصول على تعليمات مفصلة أخرى ، يرجى الرجوع إلى http://mybatis.github.io/mybatis-3/sqlmap-xml.html.
الباقي هو نفس العملية الآن. يمكنك إنشاء فئة Demorun في البرنامج التجريبي لتخزين طرق الاختبار المختلفة ، على النحو التالي:
package david.mybatis.demo ؛ استيراد java.util.arrays ؛ استيراد java.util.list ؛ import org.apache.ibatis.session.sqlsession ؛ import david.mybatis.model.basicquergs ؛ استيراد david.mybatis.model.crud_enum ؛ استيراد david.mybatis.moDel.MoDel.Channel. david.mybatis.model.pagenateargs ؛ import David.MyBatis.Model.Visitor ؛ Import David.MyBatis.Model.Website ؛ public demorun {public Static void testbasicquery (int id) {sqlsession {mybatisutils.getsqlsession () ؛ جرب { / * * يجب أن يتوافق David.Mybatis.demo.ivisitoroperation.basicquery هنا مع مساحة الاسم في التكوين في الشكل أدناه * / زوار الزوار = (الزوار) session.selectone ("david.mybatis.demo.ivisitoroperation.basicquery" ، id) ؛ mybatisutils.closesession (جلسة) ؛ system.out.println (زائر) ؛ } catch (استثناء e) {// todo: التعامل مع الاستثناء e.printStackTrace () ؛ }} public static void testbasicquerybyinterfaceway (int id) {sqlsession session = mybatisutils.getsqlsession () ؛ حاول {ivisitoroperation voperation = session.getMapper (ivisitoroperation.class) ؛ زائر الزائر = Voperation.BasicQuery (ID) ؛ mybatisutils.closesession (جلسة) ؛ system.out.println (زائر) ؛ } catch (استثناء e) {// todo: التعامل مع الاستثناء e.printStackTrace () ؛ }} /** أضف سجل الزوار في دفعات* / addvisitors الفراغ الثابتة () {sqlsession session = mybatisutils.getsqlsession () ؛ قائمة <Sititor> الزوار = Arrays.aslist (زائر جديد [] {زائر جديد ("mongodb" ، "[email protected]") ، زائر جديد ("redis" ، "[email protected]") ، زائر جديد ("memcached" ، "[email protected]") ، "couchdb" ، زائر ("hbase" ، "[email protected]") ، زائر جديد ("bigtable" ، "[email protected]") ، زائر جديد ("hive" ، "[email protected]") ، زائر جديد ("mapreduce" ، "[email protected]") ،}) ؛ لـ (زوار الزوار: الزوار) {addVisitor (زائر ، جلسة) ؛ } mybatisutils.closesession (جلسة) ؛ mybatisutils.showmessages (crud_enum.list ، visitors.size ()) ؛ } /** إضافة معلومات الزائر* / suppressWarnings ("غير مستخدمة") private static void addvisitor (زائر الزوار ، جلسة SQLSession) {if (session = null) session = mybatisutils.getsqlsession () ؛ ivisitoroperation voperation = session.getMapper (ivisitoroperation.class) ؛ int recordCount = voperation.add (زائر) ؛ session.Commit () ؛ if (الجلسة == null) mybatisutils.closesession (الجلسة) ؛ MyBatisutils.ShowMessages (crud_enum.add ، recondCount) ؛ } /** overload add additor* / public static void addvisitor (زائر الزوار) {addVisitor (زائر ، null) ؛ } /** حذف معلومات الزائر* / public static void deletevisitor (int id) {sqlsession session = mybatisutils.getsqlsession () ؛ ivisitoroperation voperation = session.getMapper (ivisitoroperation.class) ؛ int recordCount = voperation.delete (id) ؛ session.Commit () ؛ mybatisutils.closesession (جلسة) ؛ MyBatisutils.ShowMessages (crud_enum.delete ، recondCount) ؛ } /** تحديث معلومات الزائر* / public static void updateVisitor (int id) {sqlsession session = mybatisutils.getsqlsession () ؛ ivisitoroperation voperation = session.getMapper (ivisitoroperation.class) ؛ زائر زائر = voperation.query (id) ؛ System.out.println ("الكائن الأصلي:" + زوار) ؛ اسم السلسلة = visitor.getName () ؛ if (name.contains ("updated"))) {visitor.setName (name.substring (0 ، name.indexof ("updated"))) ؛ } آخر {visitor.setName (name + "updated") ؛ } int recordCount = voperation.update (زائر) ؛ session.Commit () ؛ mybatisutils.closesession (جلسة) ؛ MyBatisutils.ShowMessages (crud_enum.update ، recordCount) ؛ System.out.println ("تحديث كائن:" + زائر) ؛ } /** معلومات زائر الاستعلام* / public static void queryvisitor (int id) {sqlsession session = mybatisutils.getsqlsession () ؛ ivisitoroperation voperation = session.getMapper (ivisitoroperation.class) ؛ زائر زائر = voperation.query (id) ؛ mybatisutils.closesession (جلسة) ؛ mybatisutils.showmessages (crud_enum.query ، 1) ؛ system.out.println (زائر) ؛ } /** Query قائمة الزوار* / public static void queryvisitorlist () {sqlsession session = mybatisutils.getsqlsession () ؛ ivisitoroperation voperation = session.getMapper (ivisitoroperation.class) ؛ قائمة <Sisitor> الزوار = voperation.getList () ؛ لـ (زائر الزوار: الزوار) {system.out.println (زوار) ؛ } mybatisutils.closesession (جلسة) ؛ mybatisutils.showmessages (crud_enum.list ، visitors.size ()) ؛ }} تدير فئة Demorun طاولة واحدة بسيطة ، ويتم الانتهاء من العرض التوضيحي.