بالإضافة إلى الدعامات ، يحتوي إطار عمل الويب MVC السائد حاليًا أيضًا على MVC Spring. ويرجع ذلك أساسًا إلى أن SPRING MVC بسيط نسبيًا للتكوين وواضح جدًا للاستخدام. إنه مرن للغاية ، ولديه تكامل جيد مع الربيع ، ويدعم واجهات برمجة التطبيقات المريحة أفضل من الدعامات.
MyBatis هو نسخة ترقية من Ibatis. باعتباره منافسًا قديمًا لـ Hibernate ، فهو إطار طبقة ثابتة يمكنه تخصيص SQL ، والإجراءات المخزنة ، والتعيينات المتقدمة.
الفرق الرئيسي في السبات هو أن mybatis شبه أوتوماتيكي ، في حين أن السبات تلقائيًا بالكامل ، لذلك عندما تصبح متطلبات التطبيق أكثر تعقيدًا ، يبدو أن SQL الآلي أكثر خرقاء.
منذ أن أخذت مشروعًا منذ بعض الوقت ، أردت استخدام SpringMVC للقيام بذلك ، لذلك بدأت ألعب لعبة دمج الإطار بموقف تدريبي. يجب أن يعرف الأشخاص الذين يبنون إطارات في كثير من الأحيان أن جوهر بناء الإطار هو ملفات التكوين. لذلك أقوم بنشر عدد قليل من رموز ملفات التكوين. الشيء نفسه ينطبق بالنسبة لي ، بعد أن كتبت ملف التكوين ، قمت بتشغيل الخطأ وأضفت الجرة. فيما يلي حزم الجرة التي أستخدمها (يجب أن تكون على الأقل):
ملاحظة: هناك بعض الجرار الإضافية في الصورة أعلاه ، على سبيل المثال ، تجمع اتصال قاعدة البيانات الذي أستخدمه هو Druid و Druid من Alibaba ، لذلك يتم تقديم الجرار ذات الصلة. استخدام وتكوين هذين الإطارين بسيط للغاية ، لذلك لن أخوض في التفاصيل هنا.
1. دمج springMVC
springmybatis-servlet.xml:
<؟ xmlns: context = "http://www.springframework.org/schema/context" xmlns: mvc = "http://www.springframework.org/schema/mvc" XSI: Schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/sctxt http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc/spring-mvc.xsd "> <!-تمكين Spring MVC annostation-divening> <!-ضوئي اسم الحزمة تلقائيًا ، وجعل دعم الربيع التلقائي للمكونات ، مثل وحدة التحكم المميزة- <السياق: component-scan base-package = "com.alibaba.service"/> <!-عرض المحلل: تحديد ما قبل suffix للملف القفز-> <bean id = "viewResolver"> <property name = "premix" value = "/web-inf/jsp/"/> <property name " فئة التفسير استنادًا إلى الامتداد-> </bean> <!-قم بتكوين اعتراض ، اعتراضات متعددة ، تم تنفيذه بالتسلسل-> <mvc: اعتراضات> <mvc: interceptor> <!-مسار المطابقة-> <mvc: mapping path = "/user/**"/> <mvc: Mappapt <!-عند إعداد اعتراضات متعددة ، اتصل أولاً بطريقة prehandle بالتسلسل ، ثم اتصل بطرق Posthandle و Aftercompletion لكل اعتراض بترتيب عكسي-> </mvc: Interceptors> </bans>
2. دمج mybatis
Spring-dao.xml:
<؟ Xmlns: mybatis = "http://mybatis.org/schema/mybatis-spring" xmlns: context = "http://www.springframework.org/schema/context http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd ">! يمكن تقديم فئة MAPPER تلقائيًا-> <myBatis: مسح base-package = "com.alibaba.dao"/> <!-تقديم ملفات الخصائص-> <السياق: property-placeholder location = "classpath: configuration.properties"/> <! value = "$ {jdbc.url}"/> <property name = "username" value = "$ {jdbc.username}"/> <property name = "password" value = "$ {jdbc.password} name = "MaxActive"> <value> 5 </value> </sprention> <property name = "minidle"> <value> </value> </property> <!-تكوين الوقت للحصول على مهلة انتظار الاتصال-> <name name = "maxwait"> <value> 60000 </value> </propert name = "filters"> <value> stat </value> </property> <!-تكوين المدة التي يستغرقها إجراء فاصل زمني للكشف لاكتشاف اتصال الخمول الذي يجب إغلاقه ، بالمللي ثانية-> <property name = "timeBetweenevictionRunsmillis"> value> 60000 </value> </property> name = "minevictableDleTleMemillis"> <value> 300000 </value> </surrent> <!- <property name = "ValidationQuery"> <value> حدد 'x' </value> </sorterperation> <samperation name = "testwhileIdle"> <value> true </value> </propert name = "testOnreturn"> <value> false </value> </property> <property name = "poolpreparedstatements"> <value> true </value> </sopperation> <property name = "maxopenpreparedStatements"> <value> 20 </value> </value> </sultperal>-> </bean> <! Ref = "DataSource"/> </bean> </bans> 3.web.xml يدمج springmvc و mybatis
<؟ xmlns: web = "http://java.sun.com/xml/ns/javaee" XSI: schemalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" الإصدار = "3.0"> <! / ثابت / دليل. على سبيل المثال ، عندما زرت http: //localhost/foo.css ، الآن http: //localhost/static/foo.css-> <!-لا تعترض الملفات الثابتة-> </url-mapping> <Sradlet-name> الافتراضي </servlet-name> <Url-pattern> <Url-pattern>/css/*</url-pattern> <url-pattern>/images/*</url-pattern> <url-pattern>/fonts/*</url-pattern> </servlet-mapping> <!-تكوين مجموعة الأحرف-> <filter> <filter-name> الترميز <Filter-Class> org.springframework.web.filter.CharacterEncodingFilter </filter-class> <Init-param> <param-name> الترميز </init-param> <Irap-value> utf-8 </parm-value> <Param-value> true </param-value> </ith-param> </filter> <filter-mapping> <filter-name> encodingFilter </filter-name> <url-pattern>/*</url-pattern> </filter mapping> <! دليل الويب على الويب ، ويحدد الفاصوليا ذات الصلة هناك ، مما يؤدي إلى تجاوز أي حبوب محددة عالميًا-> <Servlet> <Sradlet-Name> springmybatis </servlet-name> <cervlet-class> org.springframework.web.servlet.dispatcherservlet </servlet-class> <Servlet-Name> springmybatis </servlet-name> <!-ستتم معالجة جميع الطلبات بواسطة Dispatcherservlet-> <url-pattern>/</url-pattern> </servlet mapping> <context-param> <Param-name> contextConfigLocation </param-name> </context-param> <stanker> <stanker-class> org.springframework.web.context.contextloaderListener </leaderer-class> </stanker> <!-Druid Web Monitoring-> <Srevlet> <Servlet-Name> DruidStatView </servlet-name> <Srevlet-class> com.alibaba.druid.support.http.statviewservlet </servlet-class> </stervlet> <Sradlet-mapping> <sterled-name> druidstatview </servlet-name> <Url-patern>/druid/*</url-patern> <Boint> /error/404.jsp </socation> </error-page> <rore-page> <خطأ في الكود> 500 </error-code> <socation> /error/500.jsp </location> </error-page> </web-app>
4.logback.xml تكوين السجل
<؟ Level = "Trace" /> <logger name = "com.alibaba.controller.testController" Level = "Trace" /> <logger name = "org.springframework.web.servlet.dispatcherservlet Spring-Config ، لن يتم عرض سجل SQL. Logback هو مجرد تطبيق SLF4J-> <root level = "debug"> <appender-ref ref = "stdout"/> </rout
5. التكوين. تكوين
jdbc.url = jdbc/: mysql/: // localhost/: 3306/druid؟ useUnicode/= true & characterencoding/= utf-8 & zerodateTimeBehavior/= converttonull jdbc.username = root jdbc.password = 123456
6. اختبار ما إذا كان البناء ناجحًا ، رمز الخلفية
أولاً ، قم بتسجيل الدخول ، واستخدم التشفير ، يمكنك إزالته
حزمة com.alibaba.controller ؛ استيراد javax.annotation.Resource ؛ استيراد javax.servlet.http.httpservletrequest ؛ استيراد org.apache.commons.codec.digest.digestutils ؛ استيراد org.slf4j.logger ؛ استيراد org.slf4j.loggerfactory ؛ استيراد org.springframework.stereotype.controller ؛ استيراد org.springframework.web.bind.annotation.requestmapping ؛ استيراد org.springframework.web.bind.annotation.requestmethod ؛ استيراد org.springframework.web.bind.annotation.requestparam ؛ استيراد com.alibaba.model.user ؛ استيراد com.alibaba.service.userservice ؛ استيراد com.alibaba.util.requestutil ؛ / ** * Author TFJ * 2014-7-26 */ controller الفئة العامة SystemController {private final logger log = loggerfactory.getLogger (SystemController.class) ؛ Resource الخاص userverservice uservice ؛ requestMapping (value = "/" ، method = requestMethod.get) public string home () {log.info ("return to homepage!") ؛ إرجاع "فهرس" ؛ } @requestmapping (value = "/test/hello" ، method = requestMethod.get) testHello testHello () {log.info ("تنفيذ طريقة testHello!") ؛ إرجاع "Testhello" ؛ } @requestmapping (value = "/login" ، method = requestMethod.post) سلسلة testlogin العامة (طلب httpservletrequest ، @requestparam string username ، requestparam string password) {log.info ("تنفيذ طريقة testlogin!") ؛ مستخدم المستخدم = userservice.finduserByName (اسم المستخدم) ؛ if (user! = null) {if (user.getPassword (). equals (digestutils.md5Hex (password)))) request.getSession (). setAttribute ("المستخدم" ، اسم المستخدم) ؛ return "Redirect:" + requestUtil.RetriEvesavedRequest () ؛ // Skip to Access page} else {log.info ("خطأ كلمة المرور") ؛ request.getSession (). setAttribute ("Message" ، "اسم المستخدم وكلمة المرور غير صحيحين ، يرجى تسجيل الدخول مرة أخرى") ؛ إرجاع "تسجيل الدخول" ؛ }} آخر {log.info ("اسم المستخدم غير موجود") ؛ request.getSession (). setAttribute ("Message" ، "اسم المستخدم غير موجود ، يرجى تسجيل الدخول مرة أخرى") ؛ إرجاع "تسجيل الدخول" ؛ }}} لن أكتب عن الخدمة والنموذج ، سأكتب عن خريطة فئة MyBatis 'Mapper
<؟ id = "findUserByName" resultType = "com.alibaba.model.user"> حدد المعرف ، اسم المستخدم ، كلمة المرور من sysuser حيث اسم المستخدم = #{username} </select> </mapper> 7. مكتب الاستقبال JSP هو في الأساس صفحة تنجح فيها تسجيل الدخول وتسجيل الدخول ، لذلك لن أكتبها
انشر لقطة شاشة:
في هذه المرحلة ، كان تكامل springMVC+MyBatis ناجحًا. بعد ذلك وظائف معقدة لإضافتها
أشياء يجب ملاحظتها
1. يتم نسخ تكوينات Druid وظهر التسجيل في الإطار من الموقع الرسمي ، بحيث تكون كلها أساسية. يمكن للقراء تجاهلهم ، أو يمكن استبدالهم بمكونات قاعدة البيانات وأطر السجل التي يعرفها القراء ، مثل C3P0 و LOG4J.
2. تمت إضافة الرمز لإدارة الإذن ، أي أنك تحتاج إلى تسجيل الدخول قبل الوصول ، ثم القفز إلى الصفحة ليتم الوصول إليها بعد تسجيل الدخول. للحصول على الإذن من springmvc ، يرجى الاطلاع على: http://www.vevb.com/article/99569.htm
3. هذه المقالة هي أبسط الكود الأساسي الذي تم تجريده من رمز الاختبار الخاص بي. أرجوك سامحني لبعض المجالات التي لم يتم تجريدها.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.