مشروع MyBatis-Spring
حاليًا ، تم تصميم معظم مشاريع الإنترنت Java باستخدام Spring MVC + Spring + MyBatis.
يمكن أن يؤدي استخدام الربيع IOC إلى إدارة موارد Java المختلفة بشكل فعال وتحقيق وظيفة التوصيل والتشغيل ؛ من خلال إطار عمل الربيع AOP ، يمكن تكليف معاملات قاعدة البيانات بإدارة الربيع ، والقضاء على جزء كبير من رمز المعاملة ، والدمج مع المرونة العالية ، وخصائص SQL القابلة للتكوين ، والمحسّنة لـ MyBatis ، من الممكن بناء مواقع ويب كبيرة عالية الأداء.
ليس هناك شك في أن الإطارين الرئيسيين ، MyBatis و Spring ، أصبحا مزيجًا إطارًا رئيسيًا من تقنية Java Internet. لقد صمدوا اختبار حجم البيانات الكبيرة والطلبات الكبيرة وقد تم استخدامها على نطاق واسع في أنظمة الإنترنت. استخدام MyBatis-Spring يجعل طبقة العمل وطبقة النموذج مفصولة بشكل أفضل. في الوقت نفسه ، يكون استخدام MyBatis في بيئة الربيع أكثر بساطة ، مما يوفر الكثير من التعليمات البرمجية ، ويمكنك حتى تجنب استخدام كائنات مثل SQLSessionFactory و SQLSession ، لأن MyBatis-Spring تغلفها لنا.
مقتطف من: "Java ee Internet Lightweight Framework Development"
الخطوة 1: إنشاء مشروع اختبار
الخطوة الأولى هي إنشاء مشروع جديد لـ WebProject يسمى [MyBatisandspring] في الفكرة:
ثم قم بإنشاء 4 حزم فارغة في [SRC]:
ثم قم بإنشاء مجلد مصدر جديد [config] لوضع ملفات تكوين الموارد المختلفة:
ثم قم بإنشاء مجلد أمان افتراضي جديد [Web-INF] ضمن مجلد [الويب] ، وقم بإنشاء [فئات] و [lib] تحتها ، وقم بتغيير موقع الإخراج للمشروع ضمن [الفئات]:
الهيكل الأولي الكامل للمشروع هو كما يلي:
الخطوة 2: إدخال حزمة جرة التبعية
الخطوة الثانية هي إعداد حزمة جرة التبعية للمشروع:
ضع حزمة JAR المدرجة أعلاه في المجلد [lib] ضمن مجلد [Web-Inf] ، ثم إضافة تبعيات.
الخطوة 3: اكتب ملفات تكوين الربيع
الخطوة الثالثة هي كتابة ملف تكوين الربيع:
<؟ xmlns: context = "http://www.springframework.org/schema/context" http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd "> id = "datasource"> <property name = "driverClassName" value = "$ {jdbc.driver}"/> <property name = "url" value = "$ {jdbc.url}"/> <property name = "username" value = "$ {jdbc.username}"/> <!-sqlsessionfactory-> <bean id = "sqlsessionfactory"> <!-تحميل ملف تكوين myBatis-> <property name = "configlocation" value = "myBatis/sqlMapConfig.xml"/> <!الخطوة 4: اكتب ملف تكوين MyBatis
الخطوة 4: اكتب ملف التكوين العالمي لـ MyBatis ضمن حزمة [MyBatis] SQLMapConfig.xml:
<؟ <setting name = "lazyloadingEnabled" value = "true"/> <!-تغيير التحميل النشط إلى التحميل السلبي (أي التحميل عند الطلب)-> <إعداد name = "aggressivelazyload" <TypeAliases> <package name = "cn.wmyskxz.pojo"/> </typealiases> <!-قم بتحميل ملف الخريطة-> <mappers> <!-تحميل ملف خريطة واحد في وقت واحد من خلال طريقة المورد-> <mapper resource = "sqlmap/usermapper.xml"/>! </mappers> </isplicuration>
في ملف التكوين هذا:
الخطوة 5: اكتب Mapper وملفات التكوين الأخرى
الخطوة 5: اكتب ملف تعيين Mapper. هنا ، لا يزال يتم تعريف اسم ملف تعيين Mapper على أنه "usermapper.xml" (وهو ما يتوافق مع التكوين في sqlmapconfig.xml). من أجل اختبار التأثير ، تم تكوين خريطة SQL من فئة استعلام واحدة فقط:
<؟ parametertype = "_ int" resulttype = "user"> حدد * من المستخدم حيث id = #{id} </reprict> </mapper>في هذا التكوين ، يتم تعيين معلمات الإخراج إلى "مستخدم" ، لأن فئة الكيان ضمن حزمة "cn.wmyskxz.pojo" تم تكوينها في sqlmapconfig.xml قبل استخدام الاسم المستعار (أي ، اسم الفئة مع الأحرف الأولية الصغيرة) ، لذلك هنا تحتاج فقط إلى إنشاء مستخدم Criper Criper java "indudgeberbide" تحت "cn. طَرد:
Package cn.wmyskxz.pojo ؛ import java.io.serializable ؛ مستخدم الفئة العامة ينفذ serializable {private int id ؛ اسم المستخدم الخاص بالسلسلة الخاصة ؛ / * getter و setter */}إن تنفيذ الواجهة القابلة للتسلسل هو الاستعداد للاستخدام اللاحق للوكيل الديناميكي Mapper ، ولا يوجد وكيل ديناميكي يستخدم هنا.
يتم تكوين معلومات اتصال قاعدة البيانات في مورد قاعدة البيانات "db.properties" وتكوينها في شكل "مفتاح = القيمة". تستخدم السلسلة "$ {}" للحصول على القيمة المقابلة للمفتاح:
jdbc.driver = com.mysql.jdbc.driverjdbc.url = jdbc: mysql: // localhost: 3306/mybatis؟ characterencoding = utf-8jdbc.username = rootjdbc.password = root
بالإضافة إلى ذلك ، فإن تكوين السجل هو نفسه التكوين السابق ، لذلك قمت بلصقه مباشرة:
# تكوين التسجيل العالمي# في بيئة التطوير ، يجب تعيين مستوى السجل على تصحيح ، ويجب تعيين بيئة الإنتاج على المعلومات أو errorlog4j.rootlogger = debug ، stdout# console الإخراج ... log4j.appender.stdout = org.apache.log4j.consoleAppenderLog4j.appender.stdout.layout = org.apache.log4j.patternlayoutlog4j.appender.stdout.layout.conversionpattern = ٪ 5p [٪ t] - ٪ m ٪ n
الخطوة 6: اكتب طبقة داو
الخطوة 6: اكتب طبقة كائن الوصول إلى البيانات.
نظرًا لأن هذا المشروع يستفسر عن المستخدم فقط ، فهناك فئة واحدة فقط في طبقة DAO. يتم إنشاء واجهة واجهة طبقة DAO تحت حزمة "cn.wmyskxz" ، والتي تحدد طريقة FindUserById والمعلمة هي قيمة معرف المستخدم (نوع int):
Package cn.wmyskxz.dao ؛ استيراد cn.wmyskxz.pojo.user ؛ واجهة عامة userdao {// Query user information ster ton id ide insuserbyid (int id) rems stispion ؛}ثم قم بإنشاء فئة تطبيق واجهة userdao userDaoImpl ضمن نفس الحزمة:
حزمة cn.wmyskxz.dao ؛ استيراد cn.wmyskxz.pojo.user ؛ استيراد org.apache.ibatis.session.sqlsession ؛ import org.mybatis.spring.support.sqlsessiondaosupt ؛ FindUserById (int id) يلقي استثناء {// ويرث sqlsessiondaosupport ومرر هذا. مستخدم المستخدم = sqlsession.selectone ("test.finduserbyid" ، id) ؛ إرجاع المستخدم ؛ }}هناك بعض التفسيرات:
<!-واجهة DAO الأصلية-> <bean id = "userDao"> <property name = "sqlsessionfactory" ref = "sqlsessionfactory"/> </bean>
ملاحظة: بعد أن ترث فئة تنفيذ DAO فئة الوالدين SQLSessionDaosupport ، ليست هناك حاجة لتحديد طريقة الحصول على فئة مثيل جلسة SQLSession بنفسها. ستقوم الفئة الأصل بتحميل معلومات مصدر البيانات بشكل افتراضي وتوفير طريقة للحصول على فئة SQLSession.
الخطوة 7: كتابة فئة اختبار الخدمة
قم بإنشاء فئة اختبار [uservicetest] ضمن حزمة "cn.wmyskxz.test":
package cn.wmyskxz.test ؛ استيراد cn.wmyskxz.dao.userdao ؛ استيراد cn.wmyskxz.pojo.user ؛ استيراد org.junit.beore ؛ org.springframework.context.support.classpathmlapplicationContext ؛ public class uservicetest {private ApplicationContext ApplicationContext ؛ // احصل على كائن ملف تكوين الربيع أولاً قبل تنفيذ طريقة الاختبار // التعليق التوضيحي @Before هذه الطريقة قبل تنفيذ جميع أساليب الاختبار لهذا الفئة BEFORE Public Void Setup () Riseves {ApplicationContext = new ClassPathmLapPlicationContext ("classpath: spring/applicationcontxt.xml") ؛ } test public void testfinduserbyid () يلقي استثناء {// الحصول على كائن userDao عن طريق تكوين كائنات المورد userDao userDao = (userDao) ApplicationContext.getBean ("userDao") ؛ // اتصل بمستخدم المستخدم = userDao.finduserByid (1) ؛ // إخراج معلومات المستخدم system.out.println (user.getId () + ":" + user.getuserName ()) ؛ }}قم بتشغيل طريقة الاختبار ونتائج الإخراج على النحو التالي:
الوكيل الديناميكي + تنفيذ التعليقات التوضيحية
لم يتم إكمال برنامج المثال أعلاه باستخدام الوكيل والتعليقات الديناميكية Mapper. دعونا نحاول كيفية استخدام الوكيل الديناميكي والتعليقات التوضيحية:
الخطوة 1: اكتب userquerymapper
قم بإنشاء واجهة بروكسي [userQueryMapper] الجديدة ضمن [Mapper] واستخدم التعليقات التوضيحية:
package cn.wmyskxz.mapper ؛ استيراد cn.wmyskxz.pojo.user ؛ استيراد org.apache.ibatis.annotations.select ؛ واجهة عامة userQueryMapper { @select ("حدد * من المستخدم حيث id = #id}")ملاحظة: افتراضيًا ، فإن اسم الفول هو userquerymapper (أي ، الحرف الأول هو أحرف صغيرة)
الآن بعد أن أصبح لدينا فئة الوكيل ، نحتاج إلى إخطار Spring لمسح هذه الفئة هنا. يحتاج Mapper إلى استخدام ماسح ضوئي خاص لمسح كائن التكوين:
<!-Mapper Scanner-> <bean> <!-مسح المكونات الموجودة أسفل حزمة cn.wmyskxz.mapper-> <property name = "basepackage" value = "cn.wmyskxz.mapper"/> </bean>
الخطوة 2: اكتب فئة اختبار
هذه المرة لم نعد نجلب كائن userDao ، ولكن userQueryMapper Mapper Proxy المحدد:
package cn.wmyskxz.test ؛ استيراد cn.wmyskxz.mapper.userquerymapper ؛ استيراد cn.wmyskxz.pojo.user ؛ استيراد org.junit.forefore ؛ استيراد org.junit.test ؛ استيراد org.springframework.contex org.springframework.context.support.classpathmlapplicationContext ؛ public class uservicetest {private ApplicationContext ApplicationContext ؛ // احصل على كائن ملف تكوين الربيع أولاً قبل تنفيذ طريقة الاختبار // التعليق التوضيحي @Before هذه الطريقة قبل تنفيذ جميع أساليب الاختبار لهذا الفئة BEFORE Public Void Setup () Riseves {ApplicationContext = new ClassPathmLapPlicationContext ("classpath: spring/applicationcontxt.xml") ؛ } test public void testfinduserbyid () يلقي استثناء {// الحصول على كائن userDao عن طريق تكوين كائنات المورد userQueryMapper userQueryMapper = (userQueryMapper) ApplicationContext.getBean ("userQueryMapper") ؛ // call userdao method user user = userQueryMapper.FinduserById (1) ؛ // إخراج معلومات المستخدم system.out.println (user.getId () + ":" + user.getuserName ()) ؛ }}قم بتشغيل طريقة الاختبار واحصل على النتيجة الصحيحة:
يمكنك أن ترى أن نتائج الاستعلام هي نفس نتائج الوكلاء غير المتبادلين السابقين.
لخص
ما سبق هو طريقة التكامل المثالية بين MyBatis و Spring المقدمة لك من قبل المحرر. آمل أن يكون ذلك مفيدًا لك. إذا كان لديك أي أسئلة ، فيرجى ترك رسالة لي وسوف يرد المحرر إليك في الوقت المناسب. شكرا جزيلا لدعمكم لموقع wulin.com!