مقدمة إلى MyBatis
MyBatis هو مشروع مفتوح المصدر من Apache. في عام 2010 ، تم نقل هذا المشروع من مؤسسة Apache Software Foundation إلى Google Code وتم إعادة تسمية MyBatis. هاجر إلى جيثب في نوفمبر 2013.
يأتي مصطلح Ibatis من مزيج من "الإنترنت" و "Abatis" ، وهو إطار طبقة الثبات القائم على Java. يوفر Ibatis أطر طبقة الثبات بما في ذلك خرائط SQL وكائنات الوصول إلى البيانات (DAO)
1. حزمة جرة مطلوبة
نناقش هنا استخدام MyBatis بشكل منفصل ، فقط ضع حزمة MyBatis-XXXJAR.
إذا كنت تستخدم Maven لإنشاء مشروع ، فأنت بحاجة إلى وضع التكوين التالي في اعتماد pom.xml:
<Rependency> <roupiD> org.mybatis </rougeid> myBatis </stifactId> <soph>
تستخدم الشركة حاليًا 3.2.2 ، ويمكنك وضع رقم الإصدار وفقًا لحزمة JAR الخاصة بك.
إذا كنت تتكامل مع الإطار المقابل ، فأنت بحاجة إلى وضع حزمة التكامل. على سبيل المثال ، تستخدم شركتنا MyBatis لتكاملها مع الربيع.
تحتاج أيضًا إلى إضافة حزمة mybatis-spring-xxx.jar وتحديدها بناءً على الموقف الفعلي. بالطبع ، لا غنى عن حزم جرة برنامج تشغيل قاعدة البيانات.
2. بناء sqlsessionfactory من XML
يتركز كل تطبيق قائم على MyBatis على مثيل SQLSessionFactory.
يمكن الحصول على مثيل SQLSessionFactory من خلال SQLSessionFactoryBuilder.
يمكن لـ SQLSessionFactoryBuilder إنشاء مثيل لـ SQLSessionFactory من ملف تكوين XML أو مثيل تكوين مسبقًا.
من السهل جدًا إنشاء مثيل لـ SQLSessionFactory من ملف XML. يوصى باستخدام ملف المورد ضمن classpath للتكوين.
ومع ذلك ، يمكن أيضًا تكوينه باستخدام أي مثيل InputStream ، بما في ذلك مسار الملف في شكل سلسلة أو مسار ملف في شكل ملف: // url.
يحتوي MyBatis على فئة أدوات تسمى الموارد ، والتي تحتوي على بعض الطرق العملية التي تجعل من السهل تحميل ملفات الموارد من ClassPath أو مواقع أخرى.
على سبيل المثال:
String Resource = "mybatis-config.xml" ؛ inputStream هو = الموارد.
يحتوي ملف تكوين XML (التكوين XML) على الإعدادات الأساسية لنظام MyBatis ، بما في ذلك مصدر البيانات للحصول على مثيل اتصال قاعدة البيانات (DataSource)
ومدير المعاملات (TransactionManager) الذي يحدد نطاق المعاملات والتحكم. سيتم مناقشة ملف التكوين بالتفصيل لاحقًا.
على سبيل المثال:
<!-؟ value = "jdbc: mysql: //192.168.200.12: 3306/test_mybatis"> <property name = "username" value = "root"> <property = "password" value = "root123"> </property> </propert ملف usermainmapper.xml. يوجد usermainmapper.xml في الحزمة com.lanhuigu.mybatis.map ، لذلك يتم كتابة المورد ك com/lanhuigu/mybatis/map/usermainmper.xml-> <mapper resource = "com/lanhuigu/mybatis/mapermainmper.xml
يحتوي هيئة عنصر البيئة على تكوين إدارة المعاملات وتجميع الاتصال. يحتوي عنصر MAPPERS على مجموعة من MAPPER MAPPERS (تحتوي ملفات XML لهذه المخططات على رمز SQL ورسم التعريف).
3. احصل على sqlsession من sqlsessionfactory
الآن بعد أن أصبح لدينا SQLSessionFactory ، يمكننا الحصول على مثال من SQLSession منه. يحتوي SQLSession بالكامل على جميع الطرق المطلوبة لتنفيذ أوامر SQL إلى قاعدة بيانات.
يمكنك تنفيذ بيانات SQL المعينة مباشرة من خلال مثيل SQLSession. على سبيل المثال:
sqlsessionfactory sqlsessionfactory = null ؛ // xml build sqlsessionfactory factory session saqlsession = null ؛ // الحصول على كائن sqlsession من sqlsessionfactory factory try sqlsessionfactorybuilder ()
لا توجد مشكلة في تنفيذ التعيين بهذه الطريقة ، يمكننا أيضًا إجراء رسم الخرائط بطريقة أكثر إيجازًا.
استخدم واجهة يمكنها وصف المعلمات وقيم الإرجاع بشكل معقول لبيان معين (على سبيل المثال ، usermainmapper.class) ،
لا يمكنك فقط تنفيذ رمز أكثر وضوحًا وأمانًا من النوع الآن ، ولكن لا داعي للقلق بشأن الحرفيات والأسلاك المعرضة للخطأ. على سبيل المثال:
SQLSession Session = sqlsessionfactory.opensession () ؛ usermainmapper usermainmapper = session.getMapper (usermainmapper.class) ؛ مستخدم المستخدم = usermainmapper .queryusermainbyid (1) ؛
4. مثال
من السهل الخلط بين القراءة فقط ولكن لا تمارس. انظر إلى الأمثلة وعاد لقراءة المستند ، وربما سيكون التأثير أفضل.
تحضير حزمة الجرة:
mybatis-3.2.2.jar (mybatis)
mysql-connector-java-5.1.21.jar (برنامج تشغيل قاعدة البيانات)
Junit-4.4.jar (اختبار ، لا تريد استخدام هذا Junit ، يمكنك استخدام الطريقة الرئيسية لاختبارها)
هيكل المشروع:
قاعدة البيانات:
قم بإنشاء جدول `t_user_main` (` f_id` int (11) not null ، `f_username` varchar (20) default null ،` f_age` int (3) null null ، key pricial (`f_id`)) المحرك = myisam default charset = latin1 ؛
تكوين MyBatis 'XML-mybatis-config.xml:
<!-؟ value = "jdbc: mysql: //192.168.200.12: 3306/test_mybatis"> <property name = "username" value = "root"> <property = "password" value = "root123"> </property> </propert ملف usermainmapper.xml. يوجد usermainmapper.xml في الحزمة com.lanhuigu.mybatis.map ، لذلك يتم كتابة المورد ك com/lanhuigu/mybatis/map/usermainmper.xml-> <mapper resource = "com/lanhuigu/mybatis/mapermainmper.xml
user.java:
package com.lanhuigu.mybatis.entity ؛ استيراد java.io.serializable ؛ مستخدم الطبقة العامة يطبق التسلسل {private static final serialversionuid = -341206809734875984l ؛ inte inte id ؛ username private ateger ؛ {this.id = id ؛} السلسلة العامة getUsername () {return username ؛} public void setUsername (string username) {this.username = username ؛} integer getage () {return age ؛} public void prodage (integer age) {this.age = ater ؛}}}usermainmapper.xml:
<!-؟ يتم تعيين قيمة مساحة الاسم بشكل تقليدي على اسم الحزمة + قم بإزالة اسم ملف لاحقة ملف MAP SQL. هذا يمكن أن يضمن أن قيمة مساحة الاسم فريدة من نوعها. على سبيل المثال ، مساحة names = "com.lanhuigu.mybatis.map.usermainmapper" هي com.lanhuigu.mybatis.map (اسم الحزمة) + usermainmapper (usermainmapper.xml تم إزالة)-> <mapper namespace = عبارة SQL في علامة SELECT ، قم بتعيين سمة ID لعلامة SELECT إلى QUERYUSERMAINBYID ، يجب أن تكون قيمة سمة المعرف فريدة من نوعها ، ولا يمكن إعادة استخدام سمة المعلمة للإشارة إلى نوع المعلمة المستخدم في الاستعلام. تشير سمة resultType إلى نوع مجموعة النتائج الذي تم إرجاعه بواسطة Query ResultType = "com.lanhuigu.mybatis.entity.user" يعني تعبئة نتيجة الاستعلام في كائن من فئة المستخدم إلى فئة المستخدم ، وهي فئة الكيان المقابلة لجدول المستخدمين-> <SELECT ID = "QueryUsermainbyid" = "in" resultType = "com.lanhuigu.mybatis.entity.user"> حدد معرف f_id ، f_username اسم المستخدم ، عصر f_age من t_user_main حيث f_id = #{id} </select> </mapper>MyBatistest.java رمز الاختبار:
package com.lanhuigu.mybatis ؛ import java.io.ioException ؛ استيراد java.io.inputstream ؛ استيراد org.apache.ibatis.io.resources ؛ import org.apache.ibatis.session.sqlsession ؛ import org.apathe.ibatis.squels org.apache.ibatis.session.sqlsessionfactorybuilder ؛ استيراد org.junit.test ؛ استيراد com.lanhuigu.mybatis.entity.user ؛ الطبقة العامة mybatistest {testpublic void testmybatis () {sqlsessionfessouraStory SqlsAction Sqls = null ؛ SQLSessionFactory Factory مثيل SQLSession Session = null ؛ // الحصول على كائن SQLSession Try {//1.mybatis مسار ملف التكوين ، والذي يتم وضعه تحت classpath ، وهو ما يعادل سلسلة Resource = "MyBatis-Config.xml" ؛ // 2. اقرأ ملف تكوين MyBatis وإنشاء مثيل SQLSessionFactory Factory // ================ Loader Class لتحميل ملف تكوين MyBatis (كما أنه يقوم أيضًا بتحميل ملف التعيين المرتبط) = SQLSessionFactoryBuilder () // بناء SQLSessionFactory Factory // sqlsessionfactory = sqlsessionfactorybuilder () SQLSessionFactoryBuilder (). Build (IS) ؛ // 3. إنشاء sqlsessionsession يمكنه تنفيذ SQL في ملف التعيين = sqlsessionfactory.opensession () ؛/*** سلسلة التعريف لرسم الخرائط sql:* com.lanhuigu.mybatis.map.usermainmapper من علامة تحديد ملف usermainmapper.xml. من خلال قيمة سمة المعرف لعلامة SELECT ، يمكن العثور على SQL المراد تنفيذه من خلال مزيج من هذين. */// تنفيذ الاستعلام وإرجاع كائن مستخدم فريد. ملاحظة: "com.lanhuigu.mybatis.map.usermainmapper.queryusermainbyid" هي سلسلة التعريف التي تعيد تعيين SQL. مستخدم المستخدم = session.selectone ("com.lanhuigu.mybatis.map.usermainmapper.queryusermainbyid" ، 1)إخراج وحدة التحكم:
على سبيل المثال أعلاه ، في رمز الاختبار:
مستخدم المستخدم = session.selectone ("com.lanhuigu.mybatis.map.usermainmapper.queryusermainbyid" ، 1) ؛ system.out.println (user.getuserName ()) ؛هل هذا الرمز غير سار للغاية للاستخدام؟ لقد قلنا أن هناك طريقة أكثر مباشرة:
أضف واجهة رسم الخرائط إلى خريطة بنية المشروع:
package com.lanhuigu.mybatis.map ؛ استيراد com.lanhuigu.mybatis.entity.user ؛ الواجهة العامة usermainmapper
في الوقت نفسه ، قم بتعديل رمز الاختبار على النحو التالي:
package com.lanhuigu.mybatis ؛ import java.io.ioException ؛ استيراد java.io.inputstream ؛ استيراد org.apache.ibatis.io.resources ؛ import org.apache.ibatis.session.sqlsession ؛ import org.apathe.ibatis.squels org.apache.ibatis.session.sqlsessionfactorybuilder ؛ استيراد org.junit.test ؛ استيراد com.lanhuigu.mybatis.entity.user {sqlsessionfactory sqlsessionfactory = null ؛ // xml build sqlsessionfactory factory session sqlsession session = // احصل على كائن sqlsession try {//1.mybatis ، اقرأ ملف تكوين MyBatis وإنشاء مثيل SQLSessionFactory Factory // ================ Loader Class لتحميل ملف تكوين MyBatis (كما أنه يقوم أيضًا بتحميل ملف التعيين المرتبط) = SQLSessionFactoryBuilder () // بناء SQLSessionFactory Factory // sqlsessionfactory = sqlsessionfactorybuilder () SQLSessionFactoryBuilder (). Build (IS) ؛ // 3. إنشاء sqlsessionsession يمكنه تنفيذ SQL في ملف التعيين = sqlsessionfactory.opensession () ؛/*** سلسلة التعريف لرسم الخرائط sql:* com.lanhuigu.mybatis.map.usermainmapper من علامة تحديد ملف usermainmapper.xml. من خلال قيمة سمة المعرف لعلامة SELECT ، يمكن العثور على SQL المراد تنفيذه من خلال مزيج من هذين. */// تنفيذ الاستعلام وإرجاع كائن مستخدم فريد. ملاحظة: "com.lanhuigu.mybatis.map.usermainmapper.queryusermainbyid" هي سلسلة التعريف التي تقوم بتخطيط مستخدم sql/** 1) ؛ system.out.println (user.getUserName ()) ؛*/usermainMapper usermainMapper = session.getMapper (usermainmapper.class) ؛ مستخدم المستخدم = UserMainMapper.queryUserMainByid (1) ؛ System.Println (user.getsername () تعديل جزء الاستعلام السابق إلى:
usermainmapper usermainmapper = session.getMapper (usermainmapper.class) ؛ مستخدم المستخدم = usermainmapper.queryusermainbyid (1) ؛
استخدم واجهة يمكنها وصف المعلمات وقيم الإرجاع بشكل معقول لبيان معين (على سبيل المثال ، usermainmapper.class) ،
لا يمكنك فقط تنفيذ رمز أكثر وضوحًا وأمانًا من النوع الآن ، ولكن لا داعي للقلق بشأن الحرفيات والأسلاك المعرضة للخطأ.
قم بتشغيل رمز الاختبار والتأثير هو نفسه.
موقع واجهة UserMainMapper:
نظرًا لأننا أضفنا الواجهة ، يمكن لـ MyBatis-Config.xml تغيير التكوين لجزء Mapper وخريطة ملف الحزمة مباشرةً حيث توجد واجهة UserMainMapper:
هذا هو
تعديل إلى
التكوين الكامل كما يلي ، ويمكنك التحقق منه عن طريق تشغيل رمز الاختبار. هذه الممارسة أسهل في الحفاظ على الخرائط وإدارتها بطريقة موحدة:
<!-؟ value = "jdbc: mysql: //192.168.200.12: 3306/test_mybatis"> <property name = "username" value = "root"> <property = "password" value = "root123"> </property> </propert ملف usermainmapper.xml. يقع usermainmapper.xml في الحزمة com.lanhuigu.mybatis.map ، وبالتالي يتم كتابة المورد ك com/lanhuigu/mybatis/map/usermainmapper.xml-> <!-<mapper resource = "com/lanhuigu/mybatis/map/usermainml. name = "com.lanhuigu.mybatis.map"> </package> </nedgers> </ispicturation>
على النحو الوارد أعلاه ، يمكننا أن نرى أنه بغض النظر عن كيفية لعبنا ، هل ما زالت SQL تم تعيينها في usermainmapper.xml؟
هل هذا التنفيذ فريد؟ هل يجب علي استخدام XML؟
بالطبع لا. إذا تم تعديل الكود أعلاه واختباره بنجاح ، فلنقوم بإجراء التعديل الأخير.
بدلاً من استخدام usermainmapper.xml لتنفيذ التعيين ، نستخدم تعليقات Java لتنفيذ التعيين.
التعديل الرئيسي هو واجهة usermainmapper.java ، وإضافة طريقة جديدة QueryUserMainbyidnew ، واستخدام التعليقات التوضيحية لتنفيذ التعيين
MyBatis رسم الخرائط لحل الذات.
تعديل usermainmapper.java واجهة:
package com.lanhuigu.mybatis.map ؛ import org.apache.ibatis.annotations.param ؛ import org.apache.ibatis.annotations.select ؛ com.lanhuigu.mybatis.entity التعليق التوضيحي*/@select ("حدد معرف f_id ، f_username اسم المستخدم ، عصر f_age من t_user_main where f_id = $ {id}") المستخدم العام QueryUserMainbynew (param ("id") int) ؛} رمز الاختبار المعدل ، قم بتشغيله بالطرق التالية:
package com.lanhuigu.mybatis ؛ import java.io.ioException ؛ استيراد java.io.inputstream ؛ استيراد org.apache.ibatis.io.resources ؛ import org.apache.ibatis.session.sqlsession ؛ import org.apathe.ibatis.squels org.apache.ibatis.session.sqlsessionfactorybuilder ؛ استيراد org.junit.test ؛ استيراد com.lanhuigu.mybatis.entity.user {sqlsessionfactory sqlsessionfactory = null ؛ // xml build sqlsessionfactory factory session sqlsession session = // احصل على كائن sqlsession try {//1.mybatis ، اقرأ ملف تكوين MyBatis وإنشاء مثيل SQLSessionFactory Factory // ================ Loader Class لتحميل ملف تكوين MyBatis (كما أنه يقوم أيضًا بتحميل ملف التعيين المرتبط) = SQLSessionFactoryBuilder () // بناء SQLSessionFactory Factory // sqlsessionfactory = sqlsessionfactorybuilder () SQLSessionFactoryBuilder (). Build (IS) ؛ // 3. إنشاء sqlsessionsession يمكنه تنفيذ SQL في ملف التعيين = sqlsessionfactory.opensession () ؛/*** سلسلة التعريف لرسم الخرائط sql:* com.lanhuigu.mybatis.map.usermainmapper من علامة تحديد ملف usermainmapper.xml. من خلال قيمة سمة المعرف لعلامة SELECT ، يمكن العثور على SQL المراد تنفيذه من خلال مزيج من هذين. */// تنفيذ الاستعلام وإرجاع كائن مستخدم فريد. ملاحظة: "com.lanhuigu.mybatis.map.usermainmapper.queryusermainbyid" هي سلسلة التعريف التي تقوم بتخطيط مستخدم sql/** 1) ؛ system.out.println (user.getUserName ()) ؛*//*usermainMapper usermainMapper = session.getMapper (usermainmapper.class) ؛ مستخدم المستخدم = usermainMapper.queryUsermainByid (1) ؛ system.out.println (user.getusername () session.getMapper (usermainmapper.class) ؛ مستخدم المستخدم = usermainmapper.queryusermainbyidnew (1) ؛ system.out.println (user.getusername ()) ؛} أخيرًا {session.close () ؛}}}ما سبق هو المجموعة الكاملة لمقدمة MyBatis (2) التي قدمها لك المحرر. آمل أن يكون ذلك مفيدًا لك. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر إليك في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!