SSM (Spring+SpringMVC+MyBatis) ، وهو حاليًا حل هندسة على مستوى المؤسسة السائدة نسبيًا. يقسم نموذج تصميم MVC القياسي النظام بأكمله إلى أربع طبقات: طبقة العرض وطبقة وحدة التحكم وطبقة الخدمة وطبقة DAO. يتم استخدام springMVC لتكون مسؤولة عن إعادة توجيه الطلب وإدارة العرض ، ويقوم Spring بتنفيذ إدارة كائنات الأعمال ، ويتم استخدام MyBatis كمحرك ثبات كائن البيانات.
1. تفاصيل الإطار
Spring عبارة عن إطار عمل خفيف الوزن Java تم إنشاؤه لحل تعقيد تطوير تطبيقات المؤسسة. لا يقتصر غرض الربيع على تطوير من جانب الخادم. من منظور البساطة ، قابلية الاختبار والاقتران الفضفاض ، يمكن لأي تطبيق Java الاستفادة من الربيع. ببساطة ، الربيع هو إطار حاويات (AOP) الموجه (AOP) الموجه (AOP)
SpringMVC هو منتج لاحق من Springframework ، يفصل أدوار وحدات التحكم ، وكائنات النموذج ، ومرسلات وكائنات المعالج. هذا الفصل يجعلها أسهل في التخصيص.
Mybatis هو إطار طبقة الثبات القائم على Java. يوفر MyBatis إطار عمل طبقة الثبات بما في ذلك خرائط SQL وكائنات الوصول إلى البيانات (DAO) مما يزيل الإعداد اليدوي لجميع كود ومعلمات JDBC تقريبًا واسترجاع مجموعات النتائج. MyBatis Maps واجهات وجافا للتسجيلات في قواعد البيانات باستخدام XML البسيط أو التعليقات التوضيحية للتكوين ورسم الخرائط الخام
2. إنشاء مشروع Maven
1. إنشاء مشروع باستخدام Maven في Eclipse
2. اضغط على الافتراضي التالي
3. بعد العثور على Maven-Archetype-Webapp ، انقر فوق التالي
4. ملء المعلومات المقابلة. GroupID هو المعرف الفريد لمؤسسة المشروع ، والذي يتوافق فعليًا مع بنية حزمة Java. Artifactid هو المعرف الفريد للمشروع. اسم المشروع المقابل الفعلي هو اسم دليل جذر المشروع. بعد ملء الحزمة ، يمكنك إنشاء حزمة لك افتراضيًا ، ولا بأس بعدم كتابتها.
5. الدليل الذي تم بناؤه حديثًا كما يلي
6. ينص مافن على أنه يجب إضافة مجلد المصدر التالي:
SRC/MAIN/الموارد
SRC/Main/Java
SRC/اختبار/الموارد
SRC/اختبار/جافا
قبل هذه الخطوة ، من الأفضل النقر بزر الماوس الأيمن على المشروع وتحديد الخصائص ، ثم انقر فوق Java Build Path ، ضمن المكتبات ، وتحرير مكتبة JRE System ، وحدد JRE الافتراضي.
7. تغيير مسارات الإخراج بشكل منفصل ، والعلاقة المقابلة هي كما يلي:
8. تحويل المشروع إلى مشروع الويب الديناميكي ، انقر بزر الماوس الأيمن فوق خصائص المشروع ، وحدد جوانب المشروع على اليسار.
9. قم بتعيين مسار نشر الملف أثناء النشر وحذف عنصرين من الاختبار ، لأنه يتم استخدام الاختبار للاختبار ولا يتطلب النشر.
الإعدادات تنشر حزمة جرة Maven إلى Lib. إضافة -> إدخالات مسار بناء Java -> تبعيات Maven -> إنهاء
3. Maven يقدم حزم الجرة المطلوبة
<project xmlns = "http://maven.apache.org/pom/4.0.0" http://maven.apache.org/maven-v4_0_0.xsd "> <DodelVersion> 4.0.0 </daseversal> <roupiD> com.yingjun.test </groupid> </intifactid> TradingState </stifactid> <project.build.sourceencoding> utf-8 </project <merbatis.version> 3.1.1 </mybatis.version> <MyBatisspring.version> 1.1.1 </mybatisspring.version> </sperties> <ependencies> <redence> <roupid> org.springframework </rougiD> <Rependency> <roupEd> org.springframework </rougiD> <StifactId> spring-webmvc </attifactid> <الإصدار> $} </reperency> <reperency> <roupiD> org.mybatis </rougiD> <intifactid> mybatis </stifactid> <sophy> $ {mybatis.version} </version> </rependency> <redency> <roupiD> org.mybatis </groupid> <terfactid> mybatis <soph> $ {myBatisspring.version} </version> </sependency> <reperency> <roupiD> mysql </rougeid> <StifactId> mysql-connector-java </stifactid> <splistid> 5.1.34 </version> <soph> 4.11 </version> <scope> اختبار </scope> </sependency> <redency> <roupiD> c3p0 </rougeid> <StifactId> <soph> 1.8.1 </version> </sependency> <redency> <roupiD> javax.servlet </rougeid> <StifactId> jstl </sontifactid> <sored> 1.2 </version> </rependency> <sperence> <sropencid> javax.servlet </groupid> <scope> المقدمة </scope> </sependency> <redency> <roupiD> javax.servlet.jsp </rougiD> <ArtifactId> jsp-api </stifactid> <sored> 2.2 </version> <scope> يتم توفيره </scope> <StifactId> commons-filepload </artifactId> <sored> 1.3.1 </version> </reperency> <reperency> <roupiD> commons-lang </rougiD> <serfactid> commons-lang </groupiD> </version> 2.6 </version> </reperenc <StifactId> commons-codec </stifactid> <soph> 1.9 </version> </sependency> <reperency> <roupiD> org.apache.httpcomponents </rougiD> <StifactId> httpclient </stifactid> <splement> 4.5 </sophid> <StifactId> slf4j-api </stifactid> <الإصدار> 1.7.10 </version> </reperency> <reperence> <roupled> org.slf4j </groupId> </srefactid> slf4j-log4j12 </stifactid> <StifactId> log4j </shintifactid> <الإصدار> 1.2.17 </version> </sependency> <reperency> <roupiD> com.alibaba </rougeid> <StifactId> fastjson </stifactid> <splex> 1.1.41 </version> </rependency> <croupid> org.codehus.J <StifactId> Jackson-Mapper-Asl </shintifactid> <الإصدار> 1.9.13 </version> </reperence> </repreadencies> <buy> <ultizins> <StifactId> maven-compiler-plugin </sharpactid> <Xucplin> <StifactId> maven-war-plugin </artifactId> <الإصدار> 2.2 </version> <socation> <sored> 3.0> <NinalName> $ {project.artifactid} _ $ {project.version} _ $ {maven.build.timestamp} </finalname> </build> </project>4. ملفات التكوين ذات الصلة وتكامل إطار SSM
web.xml
<؟ xmlns: web = "http://xmlns.jcp.org/xml/ns/javaee" الإصدار = "2.4"> <!-تكوين Spring-> <context-param> <Param-Name> contextConfigLocation </param-name> <param-value> classpath: spring.xml </parm-value> </sutext-param> <Stanker> <!-منع مستمع تدفق الذاكرة الربيع-> <Stexer> <Canker-class> org.springframework.web.util.introspectorcleanuplistener </beader-class> </nistener> <!-منع مستمع ذاكرة الربيع-> <stanker> <Cankerer-Class> org.springframework.web.util.introspectorcleanuplistener </stanterer-class> </stanker> <!-configmvc-> <vervlet> <sterlet-name> springmvc </servlet-name> <IRING-PARAM> <PARAM-NAME> CONTEXTCONFIGLOCATION </param-name> <param-value> classpath: spring-mvc.xml </parm-value> </IPAR-PARAM> <LOAD-ON-STARTUP> 1 </odl-on-startup> </isherl </servlet-mapping> <!-مرشح مجموعة الأحرف-> <lipter> <filter-name> encodingFilter </filter-name> <filter-class> org.springframework.web.filter.characterencodingfilter </filter-Class> </ith-param> <INIT-PARAM> <PARAM-NAME> FORCENCODING </param-name> <param-value> true </parm-value> </IPAR-PARAM> </filter> <filter-mapping> <filter-name> isrodingfilter </filter-name>
spring.xml
<؟ Xmlns: mvc = "http://www.springframework.org/schema/mvc" Xmlns: tx = "http://www.springframework.org/schema/tx" http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springfframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd "> <!-خدمة المسح الضوئي ، مكونات DAO-> <السياق: component-scan base-package =" com.yingjun.test "/> <! location = "classpath: jdbc.properties" /> <!-مصدر البيانات c3p0-> <bean id = "datasource"> <property name = "driverClass" value = "$ {jdbc.driverclassname}" /> <property name = "jdbcurl" value = "$ {jdbc.url}" value = "$ {jdbc.username}" /> <property name = "password" value = "$ {jdbc.password}" /> <property name = "maxpoolsize" value = "$ {c3p0.pool.size.max}" /> <property name = "minpoolsize" name = "initialPoolSize" value = "$ {c3p0.pool.size.ini}" /> <property name = "quiverIncrement" value = "$ {c3p0.pool.size.increment}" /> </bean> <! ref = "datasource"/> <property name = "configlocation" value = "classpath: spring-mybatis.xml"/> <property name = "mapperlocations" value = "classpath*: com/yingjun/test/mapping/**. name = "sqlsessionfactorybeanname" value = "sqlsessionfactory" /> </bean> <bean id = "TransactionManager"> <property name = "dataSource" ref = "dataSource" /> </bean> <tx: exploy id = "TransactionAdvice-Manager = الانتشار = "مطلوب" /> <tx: method name = "append*" spection = "required" /> <tx: method name = "insert*" spection = "required" /> <tx: method name = "save*" spection = "required" /> <tx: method name = "update* الانتشار = "مطلوب" /> <tx: method name = "delete*" spection = "required" /> <tx: method name = "remove*" spection = "required" /> <tx: method name = "repair" sparcel = "required" /> <tx: method name = "delandrepair الانتشار = "دعم" /> <tx: method name = "load*" spection = "supports" /> <tx: method name = "load*" spection = "supports" /> <tx: method name = "search*" sparcation = "supports" /> <tx: method name = "datagrid*" sparcel = "support" /> </tx: entributes> </sx: expled> <aop: config> <aop: pointcut id = "TransactionPointCut" expression = "execution (*com.yingjun.test.service ..لاستبدال الكود اليدوي لكائنات الوصول إلى البيانات (DAOS) باستخدام SQLSessionDaosupport أو SQLSessionTemplate ، يوفر MyBatis-Spring تطبيقًا ديناميكيًا للوكيل: MapPerfactorybean. يتيح لك هذه الفئة حقن واجهة Mapper مباشرة في حبة طبقة الخدمة الخاصة بك. عند استخدام MAPPERS ، يمكنك فقط الاتصال بهم كما تفعل مع DAOS الخاص بك ، لكنك لا تحتاج إلى كتابة أي رمز تنفيذ DAO ، لأن MyBatis-SPRENC سوف يخلق وكيلًا لك.
Spring-mybatis.xml
<؟
spring-mvc.xml
<؟ xmlns: p = "http://www.springframework.org/schema/p" XSI: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/context/spring-context-3.0.xsd <!-دعم تعيين التعليقات التوضيحية الافتراضية-> <mvc: يحركه التعليق التوضيحي /> <!-مسح الحزمة تلقائيًا ، مما يجعل springmvc يعتقد أن الفئة المشروحة بواسطة controller ضمن الحزمة هي وحدة التحكم-> <contex id = "mappingjacksonhttpmessageconverter"> <property name = "supportedMediAtypes"> <list> <suality> text/html ؛ charset = utf-8 </value> </list> </sprention> </propert طريقة الإجراء اللاحق لتصبح عنوان URL متاحًا-> <property name = "prefix" value = "/web-inf/jsp/"/> <property name = "falue" value = ". بالطبع ، إذا لم تقم بالتطابق ، فلا داعي لإدخال حزم مكون التحميل في ملف التكوين-> <bean id = "multipartresolver"> <!-الترميز الافتراضي-> <property name = "defaultencoding" value = "utf-8" /> <! في الذاكرة -> <property name = "maxinmemorysize" value = "40960"/> </bean> </bans>
log4j.properties
jdbc.driverClassName = com.mysql.jdbc.driver jdbc.url = jdbc: mysql: //192.168.1.194: 3306/test؟ useUnicod c3p0.pool.size.min = 5 c3p0.pool.size.ini = 3 c3p0.pool.size.increment = 2
JDBC.Properties
log4j.rootlogger = info ، وحدة التحكم ، التصحيح ، التطبيق ، الخطأ ### وحدة التحكم ### log4j.appender.console = org.apache.log4j.consoleAppender log4j.appender.console.target = system.out log4j.appender.console.layout = org.log4j.patternlayout log4j.appender.console.layout.conversionpattern = ٪ d ٪ p [٪ c: ٪ l]- ٪ m ٪ n ### debug ### log4j.appender.debug = org.apache.log4j.dailyrollingfilePender log4j.appender.debug.file = log/debug.log.log.log.logdender log4j.appender.debug.throshold = debug log4j.appender.debug.datepattern = '.' التطبيق ### log4j.appender.app = org.apache.log4j.dailyrollingfileappender log4j.appender.app.file = log/app.log log4j.appender.app.append = true log4j.appender.App.Thold = info log4j.appender.app.datepatern = '. org.apache.log4j.patternlayout log4j.appender.app.layout.conversionpattern = ٪ d ٪ p [٪ c: ٪ l] - ٪ m ٪ n ### error #### log4j.appender log4j.appender.error.append = true log4j.appender.error.throshold = خطأ log4j.appender.error.datepattern = '.' ٪ م ٪ ن
5. استخدم مولد MyBatis لإنشاء فئات كيان تلقائيًا ورسم خرائط وواجهات DAO
تنتمي MyBatis إلى إطار ORM شبه التلقائي ، وبالتالي فإن وظيفتها الرئيسية هي تكوين ملفات رسم الخرائط. ومع ذلك ، نظرًا لأن ملفات التعيين المكتوبة بخط اليد عرضة للأخطاء ، يمكن استخدام مولد MyBatis لإنشاء فئات الكيانات تلقائيًا وواجهات DAO وملفات رسم الخرائط. هذا يوفر الكثير من الجهد ونسخ الكود الذي تم إنشاؤه في المشروع.
قم بإنشاء الملفات والجرار المطلوبة للرمز وإنشاء بنية الدليل التالية:
قم بتكوين اتصال قاعدة البيانات ذات الصلة في generatorl.xml ، وجدول قاعدة البيانات متاح بالفعل:
<؟ برنامج تشغيل قاعدة البيانات-> <classpathentry location = "mysql-connector-java-5.1.34.jar" /> <context id = "db2tables" targetruntime = "mybatis3"> <es commentGenerator> <property name = "cumpressdate" value =! value = "true"/> </commentGenerator> <!-عنوان URL لارتباط قاعدة البيانات ، اسم المستخدم ، كلمة المرور-> <JDBCConnection DriverClass = "com.mysql.jdbc.driver" connectionurl = "jdbc: mysql: //192.168.194: 3306/noc" userid = <javatyperesolver> <property name = "forcebigdecimals" value = "false" /> </javatyperesolver> <!-إنشاء اسم الحزمة وموقع النموذج-> <javamodelgenerator targetpackage = "com.yingjun.test.model" targetproject = "src"> name = "trimstrings" value = "true" /> < /javamodelgenerator> <!-إنشاء اسم الحزمة وموقع ملف التعيين-> <sqlmapgenerator targetpackage = "com.yingjun.test.mapping وموقع dao-> <javaclientgenerator type = "xmlmapper" targetpackage = "com.yingjun.test.dao" targetproject = "src"> <property name = "enlabesUbackages" value = "true" /> </javaclientgenerator> <! اسم فئة الكيان -> <جدول tablename = "others_list" domainObjectName = "others" enableCountByExample = "fasle" enableupDateBateExample = "false" enableletebyexample = "false" enlabeselectbyexample = "false" selectByeExample =
افتح نافذة CMD وأدخل بنية الدليل وأدخل سطر الأوامر:
java -jar mybatis-generator-core-1.3.2.jar -configfile generator.xml -overwrite
بعد اكتمال التشغيل ، سيتم إنشاء Mapper DAO المقابل. أليس هذا جيد جدا؟
6. إنشاء طبقة الخدمة وطبقة وحدة التحكم
حزمة com.yingjun.test.service ؛ الواجهة العامة الأخرى {سلسلة عامة getOterList () ؛ } حزمة com.yingjun.test.service ؛ استيراد java.util.arraylist ؛ استيراد java.util.arrays ؛ استيراد java.util.hashset ؛ استيراد java.util.list ؛ استيراد java.util.map ؛ استيراد java.util.set ؛ استيراد java.util.set ؛ استيراد org.springframework.beans.factory.annotation.autowired ؛ استيراد org.springframework.stereotype.service ؛ استيراد com.alibaba.fastjson.json ؛ استيراد com.alibaba.fastjson.serializer.SerializerFeature ؛ استيراد com.yingjun.test.dao.OtherListMapper ؛ import com.yingjun.test.model.otherlist ؛ import com.yingjun.test.model.otherlistdomain ؛ service public class othererviceImpl تنفذ otherservicei {autowired private splistmapper OtherListMapper ؛ Override public string getOterList () {set <string> set = new hashset <string> () ؛ قائمة <Listlist> list = OtherListMapper.SelectAll () ؛ قائمة <LostListDomain> jsonlist = new ArrayList <LovelListDomain> () ؛ لـ (قائمة أخرى أخرى: قائمة) {string title = other.getTitle () ؛ if (set.contains (title)) {contert ؛ } آخر {list <ShoList> t_list = new ArrayList <ShoList> () ؛ for (datalist data: list) {if (title.equals (data.getTitle ())) {t_list.add (data) ؛ }} domain domain alshollistdomain = newListDomain () ؛ Domain.Settitle (العنوان) ؛ domain.setItems (t_list) ؛ jsonlist.add (المجال) ؛ set.add (other.getTitle ()) ؛ }} return json.tojsonstring (jsonlist ، serializerfeature.writemapnullvalue) ؛ }} package com.yingjun.test.controller ؛ استيراد org.springframework.beans.factory.annotation.autowired ؛ استيراد org.springframework.stereotype.controller ؛ استيراد org.springframework.web.bind.annotation.requestmapping ؛ استيراد org.springframework.web.bind.annotation.ResponseBody ؛ استيراد com.alibaba.fastjson.json ؛ استيراد com.yingjun.test.service.otherservicei ؛ استيراد com.yingjun.test.service.stockstatusservicei ؛ controller @requestmapping (value = "/") class public tsscontroller {Autowired private otherservicei otherservice ؛ requestMapping (value = "/getotherlist" ، تنتج = "text/html ؛ charset = utf-8") @responsebody سلسلة getotherlist () {string json = otherservice.getoterlist () ؛ إرجاع JSON ؛ }} 7. إنشاء فئة اختبار
استيراد java.util.list ؛ استيراد org.apache.log4j.logmanager ؛ استيراد org.apache.log4j.logger ؛ استيراد org.junit.test ؛ استيراد org.junit.runner.runwith ؛ استيراد org.springframework.beans.factory.annotation.autowired ؛ استيراد org.springframework.test.context.contextConfiguration ؛ استيراد org.springframework.test.context.junit4.SpringJunit4ClassRunner ؛ Runwith (springJunit4ClassRunner.Class) contextConfiguration (مواقع = {"classpath: spring.xml"}) الفئة العامة testMyBatis {autowired private service Otherervicei ؛ test public void test () {string list = service.getOterList () ؛ logger.info (قائمة) ؛ }}8. تحقق من خلال المتصفح
http: // localhost: 8080/tzyjstateservice/getotherlist
في هذه المرحلة ، كان الاختبار ناجحًا وتم الانتهاء من دمج أطر SSM الرئيسية الثلاثة. إذا كان لديك أي احتياجات أخرى ، فيمكنك الاستمرار في إضافتها على هذا الأساس.
ما سبق هو كل محتوى هذه المقالة. آمل أن يكون ذلك مفيدًا لتعلم الجميع وآمل أن يدعم الجميع wulin.com أكثر.