SSM (Spring+SpringMVC+MyBatis), derzeit eine relativ Mainstream-Architekturlösung auf Unternehmensebene. Das Standard -MVC -Designmodell unterteilt das gesamte System in vier Ebenen: Schicht anzeigen, Controller -Ebene, Serviceschicht und DAO -Schicht. SpringMVC wird für die Anforderung für die Weiterleitung und das Ansehen von Anfrage verantwortlich, Spring Implements Business Objize Management und MyBatis wird als Datenobjekt -Persistenz -Engine verwendet.
1. Rahmendetails
Spring ist ein leichter Java -Entwicklungsrahmen, das zur Lösung der Komplexität der Entwicklung von Unternehmensanwendungen erstellt wurde. Der Zweck von Spring beschränkt sich nicht auf die serverseitige Entwicklung. Aus Einfachheit, Testbarkeit und lockerer Kopplungsperspektive kann jede Java -Anwendung vom Frühjahr profitieren. Einfach ausgedrückt, die Feder ist eine leichte Inversionskontrolle (IOC) und ein tangentorientiertes (AOP) Container-Framework
SpringMVC ist ein nachfolgendes Produkt von SpringFramework, das die Rollen von Controllern, Modellobjekten, Disponenten und Handlerobjekten trennt. Diese Trennung erleichtert es einfacher, sich anzupassen.
MyBatis ist ein Java-basierter Persistenzschicht-Framework. MyBatis bietet ein Persistenzschicht -Framework, einschließlich SQL -Karten und Datenzugriffsobjekte (DAO), die die manuelle Einstellung fast aller JDBC -Code und -Parameter sowie das Abrufen von Ergebnismengen beseitigt. MyBatis Maps -Schnittstellen und Java zu Datensätzen in Datenbanken mit einfachen XML oder Anmerkungen zur Konfiguration und zur Rohzuordnung
2. Erstellen Sie ein Maven -Projekt
1. Erstellen Sie ein Projekt mit Maven in Eclipse
2. Drücken Sie als nächstes die Standardeinstellung
3. Nachdem Sie Maven-Archetype-Webapp gefunden haben, klicken Sie auf Weiter
4. Füllen Sie die entsprechenden Informationen ein. GroupID ist die eindeutige Kennung der Projektorganisation, die der Java -Paketstruktur tatsächlich entspricht. Artefaktid ist die einzigartige Kennung des Projekts. Der Name des tatsächlichen entsprechenden Projekts ist der Name des Projektstammverzeichnisses. Nach dem Ausfüllen des Pakets können Sie standardmäßig ein Paket für Sie erstellen, und es ist in Ordnung, es nicht zu schreiben.
5. Das neu gebaute Verzeichnis ist wie folgt
6. Maven sieht vor, dass der folgende Quellordner hinzugefügt werden muss:
SRC/Main/Ressourcen
SRC/Main/Java
SRC/Test/Ressourcen
SRC/Test/Java
Vor diesem Schritt ist es am besten, mit der rechten Maustaste auf das Projekt zu klicken und Eigenschaften auszuwählen, dann auf den Java Build-Pfad unter Bibliotheken zu klicken, die JRE-Systembibliothek zu bearbeiten und die Standard-Standard-JRE auszuwählen.
7. Ändern Sie die Ausgangspfade getrennt auf, und die entsprechende Beziehung lautet wie folgt:
8. Konvertieren Sie das Projekt in ein dynamisches Webprojekt, klicken Sie mit der rechten Maustaste im Projekt und wählen Sie links Projektfacetten aus.
9. Stellen Sie den Dateiverlagungspfad während der Bereitstellung fest und löschen Sie die beiden Testelemente, da der Test zum Testen verwendet wird und keine Bereitstellung erfordert.
Einstellungen veröffentlichen das JAR -Paket von Maven an lib. Hinzufügen -> Java -Build -Pfadeinträge -> Abhängigkeiten von Maven -> Finish
3.. Maven führt die erforderlichen JAR -Pakete ein
<project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.yingjun.test</groupId> <artifactId>TradingState</artifactId> <packaging>war</packaging> <version>2.0.1</version> <properties> <project.build.sourceencoding> utf-8 </project.build.SourceCoding> <maven.build.timestamp.format> yyyymmmdhhmms </maven.build.timestamp.format> <Version> </maven.Spring.Spring.Spring.Spring.Spring.Spring.Spring.Spring.Spring.Spring.Spring.Spring.Spring.Spring.Spring.Spring.Spring.Spring.Spring.Spring.Spring.Spring.Spring.Spring.Release </Spring.SPRING <mybatis.version>3.1.1</mybatis.version> <mybatisspring.version>1.1.1</mybatisspring.version> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>${spring.version}</version> </abhängig> <abhängigkeit> <GroupId> org.springFramework </Groupid> <artifactId> Spring-webmvc </artifactid> <version> $ {Spring.version} </Version> </abhängig> <depungcen> <Groupid> org.springFramework </Groupid> </artifactid> <version> $ {spring.version} </Version> </abhängig> <depeopentcy> <GroupId> org.mybatis </Groupid> <artifactId> mybatis </artifactId> <version> $ {mybatis.version} </isuming> </abhängig> <abhängigkeit> <GroupId> oderg.Mybatis </gruppen> oderg. <artifactId>mybatis-spring</artifactId> <version>${mybatisspring.version}</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.34</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.11</version> <scope>test</scope> </dependency> <dependency> <groupId>c3p0</groupId> <artifactId>c3p0</artifactId> <version>0.9.1.2</version> </dependency> <dependency> <groupId>org.aspectj</groupId> <artifactId>aspectjweaver</artifactId> <version>1.8.1</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>3.0</version> <scope>provided</scope> </dependency> <dependency> <groupId>javax.servlet.jsp</groupId> <artifactId>jsp-api</artifactId> <version>2.2</version> <scope>provided</scope> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> </dependency> <dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>1.9</version> </dependency> <dependency> <groupId>org.apache.httpcomponents</groupId> <artifactId>httpclient</artifactId> <version>4.5</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.10</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.10</version> </dependency> <dependency> <gruppe> log4j </GroupId> <artifactId> log4j </artifactId> <version> 1.2.17 </Version> </abhängig> <depeopcy> <gruppe> com.alibaba </Groupid> <artifactId> fastjson <groupId>org.codehaus.jackson</groupId> <artifactId>jackson-mapper-asl</artifactId> <version>1.9.13</version> </dependency> </dependencies> <build> <plugins> <artifactId>maven-compiler-plugin</artifactId> <version>2.3.2</version> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> <plugin> <artifactId>maven-war-plugin</artifactId> <version>2.2</version> <configuration> <version>3.0</version> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> <finalName> $ {project.artifactId} _ $ {project.version} _ $ {maven.build.timestamp} </finalName> </build> </project>4. Verwandte Konfigurationsdateien und Integration des SSM -Frameworks
web.xml
<? xmlns: web = "http://xmlns.jcp.org/xml/ns/javaee" xsi: scheMalocation = "http://java.sun.com/xml/ns/j2ee http:/java.sun.com/xml/ns/ns/j2ee/web-app_2sun.com/xml/ns/ns/j2ee/web-app_2sun.com/xml/ns/ns/j2e/web-app_2sun.com/xml/ns/ns/j2e/web-app_2sun.d. Version = "2.4"> <!-Konfigurieren Sie Spring-> <Context-Param> <PARAM-NAME> CONTEXTCONFIGLOCATION </param-name> <param-value> classPath: Spring.xml </param-value> </context-param </listener> <!-Verhindern Sie den Spring Memory Overflow Hörer-> <Hörer> <Hörer-Klasse> org.springframework.web.util.InrospectorCleanUplistener </Listener-Klasse> </Listener> <!-Verhindern Sie den Spring Memory Overflow Hörer-> <Hörer> <Hörer-Klasse> org.springframework.web.util.InrospectorCleanuplistener </Listener-Klasse> </Listener> <!-Konfigurieren Sie SpringMVC-> <Servlet> <Servlet-name> SpringMvc </servlet-name> <servlet-class> org. <init-param> <param-name> contextconfigLocation </param-name> <param-value> classPath: Spring-mvc.xml </param-value> </init-param> <load-on-startup> 1 </load-on-Startup> </servlet-maping> <servlet-nam> fednam> </Servlet-Mapping> <!-Zeichensatzfilter-> <filter> <filter-name> codierungfilter </filter-name> <filter-class> org.springFramework.web.filter.CharactercodingFilter </Filter-Class> <init-param> <param-name> codieren </param-name> </param-name> </param-name> </param-name <param-value> utf-8 </param-value> </init-param> <init-param> <param-name> comparityCoding </param-name> <param-value> true </param-value> </init-param> </filter-mapping> <Filter-name> ash-kodierende </filter-name> ave-kodierungsfilter </filter-name> ave-kodierende </filter-name> ave-kodierende </filter-name> ave-kodierende </ave-filter-name> ave-kodierende </ave-filter-name> ave-kodierung; </filter-mapping> </web-App>
Spring.xml
<? xmlns: mvc = "http://www.springframework.org/schema/mvc" xmlns: context = "http://www.spingframework.org/schema/aop" xmlns: tx = "http://wwwwww.schema XSI: Schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/sschema/context/Schema/Schema/Schema/Schema/Schema/Schema/Schema/Schema/Schema/Schema/Schema/Schema/Schema/Schema/Schema/Schema/Schema/Schema/Schema/Schema/Schema http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd "> <!-- Scan service, dao components--> <context:component-scan base-package="com.yingjun.test" /> <!-- Decomposition jdbc.properites-> <context: Property-Placeholder location = "classPath: jdbc.properties" /> <!-Datenquelle c3p0-> <bean id = "dataSource"> <Property name = "driverClass" value = "$ {jdbc.driverClassname}" /> < value = "$ {jdbc.url}" /> <Eigenschaft name = "user" value = "$ {jdbc.username}" /> <Eigenschaft name = "password" value = "$ {jdbc.password}" /> <Property name = "maxpoolse" value = "$ {C3P0.POOL.POOL.POOL.POOL.POOL.POOL.POOL.POOL.POOL.SIZE.POOR.MAXS.MAUM.MAX". value = "$ {c3p0.pool.size.min}" /> <Eigenschaft name = "initialPoolSize" value = "$ {c3p0.pool.size <bean id="sqlSessionFactory"> <property name="dataSource" ref="dataSource" /> <property name="configLocation" value="classpath:spring-mybatis.xml" /> <property name="mapperLocations" value="classpath*:com/yingjun/test/mapping/**/*.xml" /> </bean> <bean> <property name = "basepackage" value = "com, yingjun.test.dao" /> <Eigenschaft name = "sqlSessionFactoryBeAnname" value = " Transaction-Manager = "TransactionManager"> <tx: Attribute> <tx: Methode name = "add*" Propagation = "Erforderlich" /> <tx: method name = "append*" Propagation = "Erforderlich" /> <tx: method name = "einfügen Propagation = "Erforderlich" /> <tx: method name = "modify*" Propagation = "Erforderlich" /> <tx: method name = "bearbeiten*" Propagation = "Erforderlich" /> <tx: method name = "delete*" Propagation = "Erforderlich" /> <tx: method name = "reparieren" propagation name = "delandrepair" Propagation = "Erforderlich" /> <tx: method name = "get*" propagation = "unterstützt" /> <tx: method name = "find*" propagation = "unterstützt" /> <tx: method name = "last*" propagation = "Supports" /> <tx: Methode name = "lader*" propagation = "suchname =" suchname = "propagation =" shates "« "suchname =" "suchname =" "suchname =" "suchname" "« "propagation =" suchname = "” ”” ”” «“ “-Repagation =" Supply ". propagation="SUPPORTS" /> <tx:method name="datagrid*" propagation="SUPPORTS" /> <tx:method name="*" propagation="SUPPORTS" /> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut id="transactionPointcut" expression="execution(* com.yingjun.test.service ..*impl.*(..)) " /> <AOP: Berater pointcut-ref =" transactionPointCut "Ratschläge-ref =" transactionAdvice " /> < /aop: config> < /beans>Um den manuellen Code zum Schreiben von Datenzugriffsobjekten (DAOs) durch SQLSessionDaOsupport oder SQLSessionTemplate zu ersetzen, bietet MyBatis-Spring eine dynamische Proxy-Implementierung: MapperFactoryBean. Mit dieser Klasse können Sie die Data Mapper -Schnittstelle direkt in Ihre Service -Layer -Bean injizieren. Bei Verwendung von Mappern nennen Sie sie einfach so, wie Sie es mit Ihren DaOs tun, aber Sie müssen keinen DAO-Implementierungscode schreiben, da MyBatis-Spring einen Proxy für Sie erstellt.
Spring-Mybatis.xml
<?
Spring-Mvc.xml
<? xmlns: p = "http://www.springframework.org/schema/p" xmlns: context = "http://www.springframework.org/schema/context" xmlns: mvc = "http XSI: Schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springFramework.org/schema/mvc http:/www.Springframe.org/Schema/mvc/Spring-mvc-mvc-mving-mvc-mving-mving-mving-mving-mvringframe Standard-Annotationszuordnung Support-> <MVC: Annotationsgetrieben /> <!-Das Paket automatisch scannen und SpringMVC denken, dass die von @Controller unter dem Paket kommentierte Klasse der Controller ist-> <context: component-scan base-package = "com.yingjun.Test.Controller" /> <! id = "mapingjacksonHttpMessageConverter"> <Eigenschaft name = "SupportedMediTypes"> <List> <wert> text/html; charset = utf-8 </value> </list> </Eigenschaft> </bean> <!-Definieren Sie die Vor-Suffix-Suffix. Rückgabezeichenfolge der Methode der nachfolgenden Aktion, um eine verfügbare URL-Adresse zu werden-> <Eigenschaft name = "prefix" value = "/web-inf/jsp/"/> <Eigenschaft name = "suffix" value = ". jsp"/> </bean> <!-Konfigurationsdatei-Upload, wenn Sie die Datei nicht verwenden, müssen Sie es nicht konfigurieren. Wenn Sie nicht übereinstimmen, müssen Sie natürlich keine Upload-Komponentenpakete in der Konfigurationsdatei einführen. Wert im Speicher -> <Eigenschaft name = "MaxinMemorySize" value = "40960"/> </bean> </beans>
log4j.properties
jdbc.driverClassname = com.mysql.jdbc.driver jdbc.url = jdbc: mysql: //192.168.1.194: 3306/test? useUnicode = true & charakteristischesCoding = utf-8 jdbc.username c3p0.pool.size.min = 5 c3p0.pool.size.ini = 3 c3p0.pool.size.increment = 2
jdbc.properties
log4j.rootlogger = info, console, debug, app, fehler ### console ### log4j.appender.console = org.apache.log4j.conSeAppender log4j.appender.console.target = system.out log4j.appender.console.layout = oderg.apache.log4j.Patterlayout log4j.appender.console.layout.ConversionPattern = %d %p [ %c: %l]- %m %n ### Debug ### ## log4j.appender.debug = org.apache.log4j.dailyrollingFileAppender log4j.appender.debug.fug.File = log/log/debug. log4j.appender.debug.Threshold = debug log4j.appender.debug.datepattern = '.' yyyy-mm-dd log4j.appender.debug.layout = org.apache.log4j.patternLayout log4j.appender %m %n ### App ### Log4j.Appender.app = org.apache.log4j.dailyrollingFileAppender log4j.appender.app.file = log/app.log log4j.appender.append = true log4j.appender.app.app.Threshold = info log4j.appender.appender.appender.appender.append.Append.append.datepend. log4j.appender.app.layout = org.apache.log4j.patternLayout log4j.appender.app.layout.ConversionPattern = %d %p [ %c: %l] - %m %n ### #### Log4j.appender.Arg4. log/error.log log4j.appender.Error.append = true log4j.appender.Error.Threshold = Fehler log4j.appender.Error.datepattern = '. %p [%C:%l] -%M%n
5. Verwenden Sie den MyBatis -Generator, um automatisch Entitätsklassen, Zuordnungsdateien und DAO -Schnittstellen zu erstellen
MyBatis gehört zu einem semiautomatischen Orm-Framework. Daher besteht die Hauptaufgabe darin, Mapping-Mapping-Dateien zu konfigurieren. Da jedoch handgeschriebene Zuordnungsdateien anfällig für Fehler sind, kann der MyBatis -Generator verwendet werden, um automatisch Entitätsklassen, DAO -Schnittstellen und Zuordnungsdateien zu generieren. Dies spart viel Aufwand und kopiert den generierten Code in das Projekt.
Generieren Sie die für den Code erforderlichen Dateien und Gläser und erstellen Sie die folgende Verzeichnisstruktur:
Konfigurieren Sie die relevante Datenbankverbindung in Generatorl.xml, und die Datenbanktabelle ist bereits verfügbar:
<? <!-Datenbanktreiber-> <classpathEentry location = "mysql-connector-java-5.1.34.jar" /> <context id = "db2tables" targetRuntime = "mybatis3"> <commentgenerator> <Eigenschaftsname = "Unterdrückung" value = "true". NAME = "SuppressAllComentments" value = "true"/> </commentgenerator> <!-Datenbankverbindungs-URL, Benutzername, Kennwort-> <Jdbcconnection DriverClass = "com.mysql.jdbc.driver" Connectionurl = "jdbc: MySQL: //192.168.194: 3306/NocL: //192.168. </jdbcconnection> <Javatyperesolver> <Property name = "ForceBigDecimals" value = "False"/> </javatyperesolver> <!-Generieren Sie den Paketnamen und den Ort des Modells-> <JavamodelGenerator targetPackage = "com.yingjun.Test.Model" Ziele "Targetproject =" Src ". value = "true" /> <Eigenschaft name = "trimstrings" value = "true" /> < /javamodelGenerator> <!-Generieren Sie den Paketnamen und den Speicherort der Zuordnungsdatei-> <SQLMapGenerator targetPackage = "com.yingjun.test.mapping" targetProject = "src"> <Eigenhilfe ". </sqlMapGenerator> <!-- Generate the package name and location of the DAO--> <javaClientGenerator type="XMLMAPPER" targetPackage="com.yingjun.test.dao" targetProject="src"> <property name="enableSubPackages" value="true" /> </javaClientGenerator> <!-- The table to be generated is the table Name in der Datenbank oder im Ansichtsname DomainObjectName ist der Name der Entitätsklasse -> <table tableName = "Andere_List" DomainObjectName = "Andere. </generatorConfiguration>
Öffnen Sie das CMD -Fenster und geben Sie die Verzeichnisstruktur ein und geben Sie die Befehlszeile ein:
java -jar mybatis-generator-core-1.3.2.jar -configfile generator.xml -overwrite
Nach Abschluss des Laufs wird der entsprechende Dao Mapper und das Modell generiert. Ist es nicht sehr gut?
6. Stellen Sie die Serviceschicht und die Controller -Ebene fest
Paket com.yingjun.test.service; öffentliche Schnittstelle ONDEREDERServicei {public String getoterList (); } Paket com.yingjun.test.service; Import Java.util.ArrayList; Import Java.util.Arrays; import Java.util.hashset; importieren java.util.list; import Java.util.map; Java.util.set importieren; Java.util.set importieren; import org.springframework.beans.factory.annotation.autowired; import org.springframework.stereotype.service; Import com.alibaba.fastjson.json; import com.alibaba.fastjson.serializer.SerializerFeature; import com.yingjun.test.dao.otherlistMapper; com.yingjun.test.model.otherlist; import com.yingjun.test.model.otherlistdomain; @Service Public Class OtherserviceImPL implementiert AndereServicei {@autowired private otherlistmapper otherlistMapper; @Override public String getOterList () {set <string> set = new Hashset <string> (); LIST <StonList> list = otherListMapper.Selectall (); Liste <StonListDomain> jsonList = new ArrayList <StonListDomain> (); für (otherlist Andere: Liste) {String title = other.gettitle (); if (set.contains (title)) {Fortsetzung; } else {list <StonList> t_list = new ArrayList <StonList> (); für (otherlist data: list) {if (title.equals (data.gettitle ()) {t_list.add (data); }} Otherlistdomain domain = new OtherlistDomain (); Domain.Settitle (Titel); Domain.setItems (T_LIST); jsonList.add (Domain); set.add (other.gettitle ()); }} return json.tojonstring (jsonList, serializerFeature.writemapnullValue); }} Paket com.yingjun.test.controller; import org.springframework.beans.factory.annotation.autowired; import org.springframework.stereotype.controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; Import com.alibaba.fastjson.json; import com.yingjun.test.service.therservicei; import com.yingjun.test.service.stockStatusServicei; @Controller @RequestMapping (value = "/") öffentliche Klasse TSSController {@autowired private otherservicei Otherservice; @RequestMapping (value = "/GetotherList", produziert = "text/html; charset = utf-8") @RespondeBody private String GetotherList () {String json = AndersService.GetOterList (); Rückkehr JSON; }} 7. Erstellen Sie eine Testklasse
importieren java.util.list; import org.apache.log4j.logmanager; import org.apache.log4j.logger; import org.junit.test; import org.junit.runner.runwith; import org.springframework.beans.factory.annotation.autowired; import org.springframework.test.context.contextConfiguration; import org.springframework.test.context.junit4.springjunit4ClasRunner; @Runwith (SpringJunit4ClASSRunner.class) @ContextConfiguration (SOPITATIONS = {"CLASSPATH: Spring.xml"}) public Class Testmybatis {@autowired Private Otherservicei Service; @Test public void test () {String list = service.getoterList (); logger.info (Liste); }}8. Überprüfen Sie den Browser
http: // localhost: 8080/tzyjstateService/Getotherlist
Zu diesem Zeitpunkt war der Test erfolgreich und die Integration der drei großen SSM -Frameworks wurde abgeschlossen. Wenn Sie andere Anforderungen haben, können Sie sie weiterhin auf dieser Grundlage hinzufügen.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.