أنشأت المقالة السابقة "Javaweb العملية للتطوير في مشروع المركز التجاري (I)" فصول الكيانات وأدوات ترقيم الصفحات. تستخدم هذه المقالة MyBatis لإنشاء طبقات DAO.
بالإضافة إلى ذلك ، يمكن استخدام وثائق MyBatis API كمرجع
1. استخدام mybatis
1. تقديم حزمة رف
هنا أقدم حزم MyBatis و MySQL في lib
2. اكتب config.xml لتكوين بيئة قاعدة البيانات
انشر الكود أولاً ، ثم اشرح واحدًا تلو الآخر
<؟ <package name = "com.model"/> </typealiases> <البيئات default = "development"> <البيئة معرف = "التطوير"> <TransactionManager type = "jdbc"/> <dataSource type = "prouded"> <property name = "driver" value = "$ {} value = "$ {username}"/> <property name = "password" value = "$ {password}"/> </dataSource> </evality> <!-البيئة الثانية-> <البيئة معرفًا = "publish"> <المعاملات type = "jdbc"/> <datasource type =/>/environments>الخطوة الأولى هي تقديم تنسيق ملف XML ، أي DTD ، والذي يجب نسخه مباشرة من القالب الذي توفره MyBatis.
<! configuration public "-// mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3-config.dtd">
السؤال 1
تتمثل وظيفة الخصائص في تكوين ملف الخصائص المقابلة ، ويحدد المورد المسار المقابل ، ويمكننا تكوين برنامج تشغيل قاعدة البيانات وعنوان URL واسم المستخدم وكلمة المرور ، إلخ. في ملف الخصائص. الرجوع إلى ما يلي. وبهذه الطريقة ، ستقرأ MyBatis تلقائيًا المعلمات التالية ، ويمكنك استخدام $ {} للإشارة إليها في XML.
driver = com.mysql.jdbc.driver url = jdbc: mysql: // localhost: 3306/shop username = root password = 123456
السؤال 2
تكوين typeAliases الاسم المستعار تحت المسار المحدد. يمكننا تكوين اسم واحد الاسم المستعار <typealias type = "com.model.user" alias = "user"/> بهذه الطريقة ، يتم تغيير com.model.user إلى مستخدم الاسم المستعار. ليست هناك حاجة لكتابة جميع الأسماء في وقت لاحق. تحتاج فقط إلى المستخدم لاستبدال تعديل الدُفعات <package name = "com.model"/>. وبهذه الطريقة ، يمكنك تعديل جميع فئات الحزمة ، والاسم المستعار الافتراضي هو اسم فئة الكيان.
السؤال 3
تُستخدم البيئات لتكوين بيئة قاعدة البيانات ، ويمكنها تكوين بيئات متعددة ، مثل بيئة التطوير وبيئة الإصدار ، ويشير الافتراضي إلى البيئة الافتراضية
لاحظ أنه لا يوجد S في البيئة ، والتي تمثل بيئة تحت البيئات. يتميز بمعرف ، لذلك يجب أن يكون المعرف فريدًا.
تمثل TransactionManager نوع قاعدة بيانات الاتصال ، يتصل JDBC بـ Java
يهيئ DataSource وضع مصدر البيانات ، مجمع هو وضع تجمع الاتصال. بالنسبة إلى أوضاع أخرى ، يمكنك الذهاب إلى المستند الرسمي للتحقق من ذلك واختياره وفقًا لاحتياجاتك.
الخاصية هي تكوين اتصال قاعدة البيانات. لا تحرك الاسم ، قم بتعديل القيمة = "برنامج التشغيل". فيما يلي استخدام {} لقراءة التكوين في ملف الخصائص العليا. انتبه لمطابقة الاسم لقراءته.
3. اكتب رسم خرائط Mapper SQL
أنا هنا أكتب طريقة تحميل userDao ، أي اقرأ مستخدمًا استنادًا إلى المعرف. الرمز التالي يعادل وظيفة تحميل المستخدم العام (INT ID). بالنسبة إلى myBatis ، هناك نوعان من الاستبدال #{} سيتم اقتباسه تلقائيًا وفقًا للنوع ، مثل نوع السلسلة #{name} استبداله بـ 'Name'. والآخر هو استبدال $ {} ، والذي يتم استبداله مباشرة بالتنسيق الأصلي ولن يضيف أشياء أخرى.
<؟ resulttype = "user"> حدد * من المستخدم حيث id =#{id} </rection> </papper>الخطوة الأولى هي تقديم ملف رأس DTD وصياغة قواعد ملف XML
حدد العلامة ، مما يشير إلى أنها عبارة محددة حاليًا
سمة المعرف تعادل اسم الوظيفة ، المشار إليها بواسطة ID
سمة المعلمة ، والتي تمثل نوع المعلمة الواردة ، يمكن أن تحدد النوع الأساسي أو نوع مخصص. إذا كان نوعًا مخصصًا ، فسيتم استدعاء طريقة GET تلقائيًا للحصول على سماتها.
يمكن لخاصية ResultType ، ونوع قيمة الإرجاع ، تخصيص النوع مباشرة ، وسوف تستدعي تلقائيًا طريقة SET لتعيين معلمات الاستعلام واستخدام المزيد من الخصائص في المقالات اللاحقة.
4. خريطة الخريطة
قبل الاتصال ، تحتاج إلى تكوين التعيين في config.xml أولاً. لاحظ أن XML التي تم تكوينها هنا هي مسار الملف.
<mappers> <mapper Resource = "com/model/user.xml"/> </nybed>
ثم اكتب فئة اختبار
public static void main (string [] args) {try {inputStream is = resources.getResourCeasStream ("config.xml") ؛ // اقرأ ملف التكوين sqlsessionfactory factory = new sqlsessionfactory (). Session.selectone (user.class.getName ()+". load" ، 1) ؛ // استدعاء دالة التحميل system.out.println (user.getNickName ()) ؛ // الإخراج اللقب session.close () ؛ // Close Session} catch (ioException e) {E.PrintStackTrace () ؛ }} نتيجة:
5.SQLSession Tool Class
كتابة فصول اختبار مثل الفصول المذكورة أعلاه أمر مزعج للغاية ، لذلك أقوم بتغليف SQLSession لتسهيل استخدام طبقة DAO
package com.Util ؛ import org.apache.ibatis.io.resources ؛ import org.apache.ibatis.session.sqlsession ؛ import org.apache.ibatis.session.sqlsessionfactory java.io.ioException ؛ استيراد java.io.inputstream ؛/*** تم إنشاؤه بواسطة NL101 في 2016/2/23. */public class sessionutil {private static sqlsessionfactory factory = null ؛ ثابت {try {inputStream is = resources.getResourCeasStream ("config.xml") ؛ // قراءة ملف التكوين = جديد sqlsessionfactorybuilder (). build (is) ؛ // إنشاء مصنع باستخدام ملف التكوين} catch (ioException e) {E.PrintStacktrace () ؛ }} / ** * احصل على جلسة * @RETURN * / public static sqlsession getSession () {return factory.opensession () ؛ } / ** * إغلاق الجلسة * param جلسة * / static void leavesession (SQLSession Session) {if (session! = null) session.close () ؛ الجلسة = فارغة ؛ }}ما سبق هو الاستخدام الأساسي لـ MyBatis ، والآن يبدأ في تغليف طبقة DAO
2. تغليف داو
1.Userdao.java
تحميل المستخدم العام (int id) احصل على مستخدم بناءً على المعرف
لقد كتب أعلاه
إضافة منطقية عامة (مستخدم المستخدم) إضافة مستخدم
رمز XML
<!-أضف مستخدمًا-> <insert id = "add" parametertype = "user"> insert في قيم المستخدم (NULL ،#{username} ،#{password} ،#{nablem} ،#{type}) </insert>كود جافا
/** /*** أضف مستخدمًا* param المستخدم للمستخدم المراد إضافته* RETURN TRUE SUCCENT* /public boolean add (user user) {int isAdd = 0 ؛ SQLSession Session = SessionUtil.getSession () ؛ حاول {isAdd = session.insert (user.class.getName ()+". Add" ، user) ؛ Session.Commit () ؛ // submit} catch (استثناء e) {session.rollback () ؛ // rolleback إذا فشل التقديم} أخيرًا {sessionutil.closesession (الجلسة) ؛ } system.out.println (isAdd) ؛ إرجاع isadd> 0 ؛ } الحذف المنطقي العام (INT ID) حذف المستخدمرمز XML
<!-حذف المستخدم-> <delete id = "delete" parametertype = "int"> delete من المستخدم حيث id =#{id} </delete>كود جافا
/ ** * حذف المستخدم استنادًا إلى معرف المعرف * param لحذف معرف المستخدم * @RETURN النجاح الحقيقي */ الحذف المنطقي العام (int id) {int isDelete = 0 ؛ SQLSession Session = SessionUtil.getSession () ؛ حاول {isDelete = session.delete (user.class.getName ()+". delete" ، id) ؛ session.Commit () ؛ } catch (استثناء e) {session.rollback () ؛ // الفاشل system.out.println ("فشل المستخدم فشل") ؛ E.PrintStackTrace () ؛ } أخيرًا {sessionutil.closeessession (الجلسة) ؛ } الإرجاع isDelete> 0 ؛ } تحديث Boolean Update (المستخدم) تحديث المستخدمرمز XML
<!-تعديل مستخدم-> <update id = "update" parametertype = "user"> تحديث المستخدم set username =#{username} ، password =#{password} ، nabled =#{nableamكود جافا
/ *** تحديث المستخدم* param user يتم تحديث المستخدم* @RETURN True Success*/ public boolean update (user user) {int isUpdate = 0 ؛ SQLSession Session = SessionUtil.getSession () ؛ حاول {isUpdate = session.delete (user.class.getName ()+". update" ، user) ؛ session.Commit () ؛ } catch (استثناء e) {session.rollback () ؛ // الفاشل system.out.println ("فشل التحديث") ؛ E.PrintStackTrace () ؛ } أخيرًا {sessionutil.closeessession (الجلسة) ؛ } return isUpdate> 0 ؛ } يحدد تسجيل الدخول إلى المستخدم العام (اسم المستخدم ، كلمة مرور السلسلة) ما إذا كان المستخدم موجودًارمز XML
<!-حكم تسجيل الدخول المستخدم-> <حدد ID = "login" parametertype = "string" resulttype = "user"> حدد * من المستخدم حيث اسم المستخدم =#{username} </select>كود جافا
/ *** تحديد ما إذا كان المستخدم موجودًا* param اسم المستخدم المستخدم* param password password* return return لا يوجد مستخدم إرجاع null*/ تسجيل الدخول إلى المستخدم العام (اسم المستخدم ، كلمة مرور السلسلة) {مستخدم المستخدم = null ؛ SQLSession Session = SessionUtil.getSession () ؛ حاول {user = session.selectone (soapbinding.use.class.getName ()+". login" ، اسم المستخدم) ؛ // عندما تكون كلمة المرور غير صحيحة ، قم بتعيين المستخدم على NULL if (! user.getPassword (). equals (password)) {user = null ؛ }} أخيرًا {sessionutil.closesession (الجلسة) ؛ } إرجاع المستخدم ؛ } Pager Find (اسم السلسلة ، فرز السلسلة ، ترتيب السلسلة) معالجة ترقيم الصفحات رمز XML:
يتم استخدام SQL الديناميكي هنا. فيما يتعلق بـ SQL الديناميكي ، فهو استخدام علامات مثل المكان الذي ، إذا اختر ، وما إلى ذلك ، وما إلى ذلك ، يمكنك الرجوع إلى المستند الرسمي. بالإضافة إلى ذلك ، في MyBatis ، مفهوم Null غير موجود. على سبيل المثال ، تقوم بتمرير المستخدم = null ، ولكن عند الاستبدال ، يتم استبداله بسلسلة "خالية". إذا كانت هذه القيمة غير متوفرة ، فهي فارغة.
<!-رمز الصفحات-> <حدد ID = "find" parametertype = "map" resulttype = "user"> حدد * من المستخدم <if test = "name! <!-إجمالي عدد سجلات الصفحة-> <تحديد ID = "findCount" parametertype = "map" resultType = "int"> حدد العد (*) من المستخدم <test = "name! = null"> حيث (اسم المستخدم مثل #{name}رمز Java: بشكل عام ، لا يزال يعتمد على ترقيم الصفحات التي صممها المقالة السابقة
/*** استعلام الصفحة استنادًا إلى شروط محددة* شروط استعلام الاسم @param ، يمثل NULL حالة فرز الفرز غير المشروط* param ، يمثل الفارغ الفرز حسب المعرف* @param شرط فرز الترتيب ، ويمثل NULL ترتيب تصاعدي* @RETURN*/Public Pager <Sether> find (اسم السلسلة ، ترتيب السلسلة) {int pagestart = SystemContext.getPagesize () ؛ // PAGE SIZE PAGER <Sether> pagers = New Pager <> () ؛ خريطة <string ، Object> maps = new HashMap <> () ؛ if (name! = null &&! name.equals ("")) {name = "٪"+name+"٪" ؛ maps.put ("الاسم" ، الاسم) ؛ } if (sort == null || sort.equals ("")) {sort = "id" ؛ // مرتبة حسب المعرف بشكل افتراضي} if (order == null || order.equals ("")) {order = "asc" ؛ // default sort} maps.put ( Maps.put ("Order" ، Order) ؛ Maps.put ("Pagestart" ، Pagestart) ؛ Maps.put ("pagesize" ، pagesize) ؛ SQLSession Session = SessionUtil.getSession () ؛ قائمة <Sether> datas = null ؛ Try {datas = session.selectlist (user.class.getName ()+". pagers.setpagesize (pagesize) ؛ Pagers.setpagestart (Pagestart) ؛ int totalRecord = session.selectone (user.class.getName ()+". findCount" ، maps) ؛ // احصل على إجمالي عدد السجلات pagers.settotalrecord (TotalRecord) ؛ Pagers.setPageIndex (Pagestart/pagesize+1) ؛ } أخيرًا {sessionutil.closeessession (الجلسة) ؛ } صفحات العودة ؛ } هيكل المشروع الحالي
في المقالة التالية ، سأكتب مقرًا عامًا لتسهيل كتابة الكود. واستمر في تعلم استخدام خصائص MyBatis الأخرى. شكرا لك على قراءتك.