SSM (Spring + SpringMVC + MyBatis), actuellement une solution d'architecture de niveau d'entreprise relativement grand public. Le modèle de conception MVC standard divise l'ensemble du système en quatre couches: calque d'affichage, couche de contrôleur, couche de service et couche DAO. SpringMVC est utilisé pour être responsable du transfert des demandes et de la gestion de la vue, Spring implémente la gestion des objets commerciaux et MyBatis est utilisé comme moteur de persistance d'objet de données.
1. Détails du cadre
Spring est un cadre de développement Java léger créé pour résoudre la complexité du développement d'applications d'entreprise. L'objectif de Spring ne se limite pas au développement côté serveur. Du fait de la simplicité, de la testabilité et de la perspective de couplage lâche, toute application Java peut bénéficier du printemps. En termes simples, le printemps est un cadre de conteneur léger sur l'inversion (CIO) et à la tangente (AOP)
SpringMVC est un produit ultérieur de SpringFramework, séparant les rôles des contrôleurs, des objets modèles, des répartiteurs et des objets de gestionnaire. Cette séparation les rend plus faciles à personnaliser.
Mybatis est un cadre de couche de persistance basé sur Java. MyBatis fournit un cadre de couche de persistance, y compris les cartes SQL et les objets d'accès aux données (DAO) qui élimine le paramètre manuel de presque tous les code et paramètres JDBC et la récupération des ensembles de résultats. MyBatis Map Maps Interfaces et Java sur les enregistrements dans les bases de données à l'aide de XML ou d'annotations simples pour la configuration et la cartographie brute
2. Créer un projet Maven
1. Créez un projet à l'aide de maven dans Eclipse
2. Appuyez sur la valeur par défaut suivante
3. Après avoir trouvé Maven-Archetype-Webapp, cliquez sur Suivant
4. Remplissez les informations correspondantes. GroupID est l'identifiant unique de l'organisation du projet, qui correspond en fait à la structure du package Java. Artifactid est l'identifiant unique du projet. Le nom du projet correspondant réel est le nom du répertoire racine du projet. Après avoir rempli le package, vous pouvez créer un package pour vous par défaut, et il est acceptable de ne pas l'écrire.
5. Le répertoire nouvellement construit est le suivant
6. Maven stipule que le dossier source suivant doit être ajouté:
SRC / Main / Ressources
src / main / java
SRC / Test / Ressources
src / test / java
Avant cette étape, il est préférable de cliquer avec le bouton droit sur le projet et de sélectionner les propriétés, puis de cliquer sur Java Build Path, sous les bibliothèques, de modifier la bibliothèque du système JRE et de sélectionner JRE par défaut de l'espace de travail.
7. Changez les chemins de sortie séparément en et la relation correspondante est la suivante:
8. Convertissez le projet en projet Web dynamique, cliquez avec le bouton droit sur les propriétés du projet et sélectionnez Facets du projet à gauche.
9. Définissez le chemin de publication de fichiers pendant le déploiement et supprimez les deux éléments de test, car le test est utilisé pour les tests et ne nécessite pas de déploiement.
Les paramètres publient le package JAR de Maven à Lib. Ajouter -> Java Build Path Entrées -> Dépendances Maven -> Finition
3. Maven présente les forfaits de pot requis
<project xmlns = "http://maven.apache.org/pom/4.0.0" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xsi: schemalation = "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd "> <ModelVersion> 4.0.0 </ ModelVersion> <ProupId> com.yyingjun.test </proupId> <ArtifActid> TradingState </ Artifactid> <packaging> war </packaging> <version> 2.0.1 <project.build.sourceencoding> utf-8 </project.build.sourceencoding> <maven.build.timestamp.format> yyyymmddhhmmss </maven.build.timestamp.format> <printemps <mybatis.version> 3.1.1 </mybatis.version> <mybatisspring.version> 1.1.1 </ /mybatisspring.version> </properties> <dependces> <dependency> <proupId> org.springframework </proupId> <Artifactid> Spring-core </ptifactid> </Dependency> <Dedency> <ProupId> org.springFramework </rom grouped> <ArtifActid> printemps-webmvc </ artifactid> <in version> $ {printemps.version} </ version> </dEpendency> <Dependency> <proupId> org.springIdD> <version> $ {printemps.version} </ version> </pependance> <dependency> <proupId> org.mybatis </rom grouped> <Artifactid> Mybatis </ artifactId> <Dependance> $ {mybatis.version} </ version> </peedendency> <Dedency> <proupId> Org.Mybatis </prouverID> <ArtefactId> Mybatis-Spring </ Artifactid> <Sease> $ {mybatisspring.version} </-version> </dependency> <dependency> <proupId> MySql </pruimId> <ArtifActid> MySQL-Connector-Java </tatifactid> <version> 5.1.34 </DERNÉRATION> </Dedency> <Dedency> <GroupId> JUnit </rom grouped> <Artifactid> JUnit </ Artifactid> <Dersion> 4.11 </-version> <ccope> Test </cope> </Dependance> <Dendency> <ProupID> C3P0 </proupId> <ArtefactId> C3P0 </ Artifactid> <Dersion> 0.9.1. <GroupId> org.AspectJ </proupId> <ArtifActid> AspectJwweaver </ ArtifactId> <Dersion> 1.8.1 </DERNIER> </ Dependency> <Dedency> <ProupId> Javax.servlet </proupId> <ERFACTID> JSTL </ artifactid> <version> 1.2 </DERNIFRÉNÉE> </DENDENCENCY> <Dependance> <GroupId> javax.servlet </rom grouped> <Artifactid> servlet-api </ artifactid> <frision> 3.0 </preent> <ccope> fourni </cope> </dependency> <dependency> <proupId> javax.servlet.jsp </proupId> <e Artifactid> jsp-api </ptetifactid> <frision> <version> * version> </Dependency> <Dedency> <GroupId> Commons-fileupload </rompuprid> <ArtifActid> Commons-fileupload </ artifactid> <version> 1.3.1 </ version> </ Dependency> <Dendency> <proupId> Commons-Lang </prouprid> <eRtifActid> COMMONS-LANG </RIFACTIDE> <DERVIÈRE> 2.6 </DERNIERSE> <GroupId> Commons-codec </romp grouped> <Artifactid> Commons-codec </letifactid> <DERSE> 1.9 </ version> </ Dependency> <Dedency> <ProupId> org.apache.httpComponents </prouprid> <Artifactid> httpclient </Rifactid> <version> 4.5 </De version> <Dedency> <GroupId> org.slf4j </prôdId> <Artifactid> Slf4j-API </ artifactive> <version> 1.7.10 </ version> </ Dependency> <Dedency> <ProupId> Org.Slf4j </prouprid> <Artifactid> SLF4J-LOG4J12 </RetifActid> <De version> <GroupId> LOG4J </ GroupId> <ArtifActid> LOG4J </ ARTIFACTID> <DERSE> 1.2.17 </ Version> </Dependency> <Dependency> <ProupId> com.alibaba </prouvenid> </ptefactId> FastJSON </ Artifactid> <Derson> 1.1.41 </DERTISE> </Dedency> </ Dependency> <GroupId> org.codehaus.jackson </rompuprid> <Ertifactid> Jackson-Mapper-Asl </ ArtifactId> <DersonD> 1.9.13 </ version> </Dependency> </Dependces> <Duild> <Glugins> <Artefactid> Maven-Compiler-Plugin </ artifactid> <version> 2.3.2 </Dection> <Barget> 1.7 </ Target> </ Configuration> </ Plugin> <Glugin> <ErtifactId> Maven-War-Plugin </ ArfactId> <Seffect> 2.2 </ Version> <Fonfitinging> <DreaLaMissing </ Version> <MailSORSINGSINGWEBXML> FALSE </cailLissingWebxml> </FICIGURATION> <FinalName> $ {project.artifactid} _ $ {project.version} _ $ {maven.build.timestamp} </ finalName> </Duild> </randing>4. Fichiers de configuration connexes et intégration du cadre SSM
web.xml
<? xml version = "1.0" Encoding = "utf-8"?> <web-app xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns = "http://java.sun.com/xml/ns/j2ee" xmlns: web = "http://xmlns.jcp.org/xml/ns/javaee" xsi: schemalocation = "http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsdd" Version = "2.4"> <! - Configurez Spring -> <Text-Param> <Am param-name> contextConfigLocation </ Param-Name> <Amam-Value> CLASSPATH: Spring.xml </ Param-Value> </ftext-Param> <Dounerder> <auditeur-Class> ORG.SPRINGFRAME.Web.Context.Context. Empêcher Spring Memory Overflow auteur -> <ousiner> <auditeur-classe> org.springframework.web.util.introspectorcleanupListener </ auteur-class> </diner> <! - Empêcher Spring Memory Overflow auditeur -> <ouniner> <auditeur-Class> org.springframework.web.util.introsightclEnptener </servener-web.util.introspectClatClean </ouciner> <! - Configurez SpringMvc -> <Servlet> <Servlet-Name> SpringMvc </vrlett-Name> <Servlet-Class> org.springFramework.web.servlet.DispatcherServlet </vrlet-Class> <Init-Param> <Am param-Name> ContextConFiglocation </ Param-Name> <Am param-Value> CLASSPATH: Spring-mvc.xml </ Param-Value> </Init-Param> <Choad-on-Startup> 1 </ Load-on-Startup> </Servlet> <Serplet-Mapping> <Serplet-Name> Springmvc </vttlet-name> <url-Pattern> / </url-Pattern> </vrlet-mapping> <! <filter-name> EncodingFilter </ Filter-Name> <Filter-Class> org.springframework.web.filter.characterencodingFilter </ filter-Class> <Init-Param> <Am param-name> Encoding </ Param-name> <Am param-Value> UTF-8 </onsam-Value> <param-name> Forceencoding </ param-name> <param-value> true </ param-value> </ init-param> </filter> <filter-mapping> <filter-name> EncodingFilter </filter-name> </ url-pattern> / * </ url-Pattern> </ Filter-Mapping> </ Web-appather>
printemps.xml
<? xml version = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns: mvc = "http://www.springframework.org/schema/mvc" xmlns: context = "http://www.springframework.org/schema/aop" xmlns: tx = "http://www.springframework.org/schea/tx" xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/springframeworks http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd http://www.springframework.org/schema/Contex http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsdd 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 " JDBC.Properites -> <Context: Property-placeholder location = "classPath: jdbc.properties" /> <! - Data source c3p0 -> <bean id = "dataSource"> <propriété name = "driverclass" value = "$ {jdbc.driverclassName}" /> <propriété name = "jdbcurl" value = "$ {jdb.url ' /> <propriété name = "user" value = "$ {jdbc.Username}" /> <propriété name = "mot de passe" value = "$ {jdbc.password}" /> <propriété name = "maxpoolSize" value = "$ {c3p0.pool.size.max}" /> <propriété name = "minpoolsize" Value = "$ {c3p0.pool.size.min}" /> <propriété name = "initialPoolSize" value = "$ {c3p0.pool.size.ini}" /> <propriété name = "AcquireIncrement" value = "$ {c3p0.pool.size.increment}" /> </Egle> <! id = "sqlSessionFactory"> <propriété name = "dataSource" ref = "dataSource" /> <propriété name = "configLocation" value = "classpath: printemps-mybatis.xml" /> <propriété name = "mapperlocations" value = "classpath *: com / yingjun / test / mapping / ** / *. name = "basepackage" value = "com, yingjun.test.dao" /> <propriété name = "sqlSessionFactoryBeanName" value = "sqlSessionFactory" /> </ bean> <bean id = "TransactionManager"> <propriété name = "DataSource" Ref = "DataSource" /> </Ean> <TX: Advice Id = "Transactionad" transaction-manager = "transactionManager"> <tx: attributs> <tx: méthode name = "add *" propagation = "requise" /> <tx: méthode name = "append *" propagation = "requise" /> <tx: méthode name = "insert *" propagation = "requise" /> <tx: méthode name = "SAVE *" propagation = "requise" /> <tx: méthode = "update * propagation = "requise" /> <tx: méthode name = "modifier *" propagation = "requise" /> <tx: méthode name = "edit *" propagation = "required" /> <tx: méthode name = "delete *" propagation = "requise" /> <tx: méthode name = "dispos name = "delAndrepair" propagation = "requis" /> <tx: méthode name = "get *" propagation = "supports" /> <tx: méthode name = "find *" propagation = "supports" /> <tx: méthode name = "Load *" propagation = "supports" /> <tx: méthode name = "loss *" propagation = "supports" /> <tx: méthode = "seech * propagation = "supports" /> <tx: méthode name = "dataGrid *" propagation = "supports" /> <tx: méthode name = "*" propagation = "supports" /> </ tx: attributs> </ tx: conseils> <aop: config> <aop: Pointcut id = "TransactionPoint" expression = "Exécution (* * com.yyingjun.test.service .. * impl. * (..)) "/> <aop: conseiller Pointcut-ref =" TransactionPointcut "conseils-ref =" TransactionAdvice "/> </ aop: config> </ beans>Afin de remplacer le code manuel d'écriture des objets d'accès aux données (DAOS) à l'aide de SQLSessionDaOSupport ou SQLSessionTemplate, MyBatis-Spring fournit une implémentation de proxy dynamique: MappenfactoryBean. Cette classe vous permet d'injecter directement l'interface de mapper de données dans votre bean de couche de service. Lorsque vous utilisez des mappeurs, vous les appelez simplement comme vous le faites avec votre DAOS, mais vous n'avez pas besoin d'écrire de code d'implémentation DAO, car MyBatis-Spring créera un proxy pour vous.
printemps-mybatis.xml
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype Configuration public "- // mybatis.org//dtd config 3.0 // en" "http://mybatis.org/dtd/mybatis-3config.dtd"> <configuration> <!
printemps-mvc.xml
<? xml version = "1.0" encoding = "utf-8"?> <beans xmlns = "http://www.springframework.org/schema/beans" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" xmlns: p = "http://www.springframework.org/schema/p" xmlns: context = "http://www.springframework.org/schema/contex xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/springframeworks-3.0.xschemma/contex http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring Annotation Mapping Support -> <MVC: Annotation-Driven /> <! - Scannez automatiquement le package, faisant en sorte que SpringMvc pense que la classe annotée par @Controller sous le package est le contrôleur -> <Context: Component-Scan Base-Package = " id = "MappingJackSonHttpMessageConverter"> <propriété name = "SupportEdMediaTypes"> <sist> <value> text / html; charset = utf-8 </ value> </ list> </parem> </ank> <! - Définissez la configuration de la configuration de la configuration, de la configuration du mode de vue, de la configuration de la vue pour la prédéfinie pour la pré-avant pour la prédéfinie et le revergin chaîne de la méthode de l'action suivante pour devenir une adresse URL disponible -> <propriété name = "prefix" value = "/ web-inf / jsp /" /> <propriété name = "suffix" value = ". jsp" /> </ bean> <! - Téléchargement de fichiers de configuration, si vous n'utilisez pas le téléchargement de fichiers, vous n'avez pas besoin de le configurer. Bien sûr, si vous ne correspondez pas, il n'est pas nécessaire d'introduire des packages de composants de téléchargement dans le fichier de configuration -> <bean id = "MultipartResolver"> <! - Encoding par défaut -> <propriété name = "Defayencoding" value = "utf-8" /> <! - MAXIM FILE SIZE VALUE -> <Propriété Nom = "MAXUPLOADSIZE" Valeur = "10485760000" <propriété name = "maxinMemorySize" value = "40960" /> </bEAN> </bans>
log4j.properties
jdbc.DriverClassName = com.mysql.jdbc.driver jdbc.url = jdbc: mysql: //192.168.1.194: 3306 / test? useunicode = true & caractères. c3p0.pool.size.min = 5 c3p0.pool.size.ini = 3 c3p0.pool.size.increment = 2
jdbc.properties
log4j.rootlogger = info, console, debug, app, error ### console ### log4j.appender.console = org.apache.log4j.consoleAppender log4j.appenden log4j.appender.console.layout.conversionPattern =% d% p [% c:% l] -% m% n ### debug ### log4j.appendender.debug = org.apache.log4j.dailyrollingFileAppender log4j.apprender.debug.file = log / débug.Log log4j.apprender.debug. log4j.appender.debug.threshold = debug log4j.appendender.debug.datepattern = '. ### app ### log4j.appender.app = org.apache.log4j.dailyrollingFileAppender log4j.appender.app.file = log / app.log log4j.appender.app.apprend = truepattern. log4j.appender.app.layout = org.apache.log4j.patternlayout log4j.appender.app.layout.conversionPattern =% d% p [% c:% l] -% m% n ### error #### log4j.appender.error = org.apache.Log4j.DailyRollingfileAia log / error.log log4j.appender.error.append = true log4j.appender.error.threshold = error log4j.appender.error.datepattern = '. % p [% c:% l] -% m% n
5. Utilisez le générateur MyBatis pour créer automatiquement des classes d'entités, des fichiers de mappage et des interfaces DAO
MyBatis appartient à un cadre ORM semi-automatique, donc son travail principal est de configurer des fichiers de mappage de mappage. Cependant, comme les fichiers de mappage manuscrits sont sujets aux erreurs, le générateur MyBatis peut être utilisé pour générer automatiquement des classes d'entités, des interfaces DAO et des fichiers de mappage de mappage. Cela permet d'économiser beaucoup d'efforts et de copier le code généré dans le projet.
Générez les fichiers et les pots requis pour le code et créez la structure du répertoire suivant:
Configurez la connexion de la base de données pertinente dans generatorl.xml, et la table de base de données est déjà disponible:
<? xml version = "1.0" Encoding = "UTF-8"?> <! Doctype GeneratorConfiguration public "- // Mybatis.org//dtd Mybatis Generator Configuration 1.0 // en" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> <GeneratorConcure> <! - Database Driver -> <classpathentry location = "mysql-connector-java-5.1.34.jar" /> <context id = "db2tables" cibleruntime = "mybatis3"> <commentgenerator> <propriété name = "supressdate" value = "true" /> <! Value = "true" /> </ commentgenerator> <! - Url de liaison de base de données, nom d'utilisateur, mot de passe -> <jdbcconnection driverclass = "com.mysql.jdbc.168.1.194: 3306 / noc" userrid = "root" mot de passe "root"> </ jdbcconneur> "userrid =" root "=" root "> </ jDBCCE>" <JavatyPeresolver> <propriété name = "ForceBigDecimals" value = "false" /> </ javatyperesolver> <! - Générez le nom du package et l'emplacement du modèle -> <javamodelgenerator targetpackage = "COM.yyingjun.test.model" TargetProject = "src"> <Property Name = "Implaces" name = "TrimStrings" value = "true" /> </ javamodelgenerator> <! - Générez le nom du package et l'emplacement du fichier de mappage -> <SqlMapGenerator TargetPackage = "Com.yyingjun.test.mapping" TargetProject = "src"> <propriété named = "Perquent le package" Nom et emplacement du dao -> <javaclientGenerator type = "xmlmapper" ciblePackage = "com.yyingjun.test.dao" targetproject = "src"> <propriété name = "activebpackages" value = "true" /> </ javaclientGenerator> <! Nom de la classe entité -> <table tableName = "autre_List" domainObjectName = "autreList" aperviseCountByExample = "Fasle" activerupdateyExample = "false" ENTIVELETEEBYEXample = "false" actidElectByExample = "false" selectByExampleQuery = "false"> </ table> </ context> </eneratorConfiguration>
Ouvrez la fenêtre CMD et entrez la structure du répertoire et entrez la ligne de commande:
java -jar mybatis-generator-core-1.3.2.jar -configfile generator.xml -overwrite
Une fois l'exécution terminée, le mappeur et le modèle DAO correspondants seront générés. N'est-ce pas très bon?
6. Établir la couche de service et la couche de contrôleur
package com.yyingjun.test.service; Interface publique Autresservicei {public String getOterList (); } package com.yyingjun.test.service; import java.util.arraylist; import java.util.arrays; import java.util.hashset; Importer java.util.list; importation java.util.map; import java.util.set; import java.util.set; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.sterreotype.service; import com.alibaba.fastjson.json; import com.alibaba.fastjson.serializer.serializerfeature; import com.yingjun.test.dao.otherListmapper; import com.yingjun.test.model.otherlist; import com.yingjun.test.model.otherListDomain; @Service Public Class OtherserviceImpl implémente AUTHRERVICEI {@Autowired Private OtherListMapper autreListMapper; @Override public String getOterList () {set <string> set = new HashSet <string> (); List <autres liste> list = autreListMapper.Selectall (); List <autres listDomain> JSONList = new ArrayList <OtherListDomain> (); pour (autre liste autre: list) {string title = autre.getTitle (); if (set.contains (title)) {continuant; } else {list <altomlist> t_list = new ArrayList <OtherList> (); pour (autres listes de données: liste) {if (title.equals (data.getTitle ())) {t_list.add (data); }} Autre listDomain domain = new autreListDomain (); domain.setTitle (titre); domain.setItems (t_list); JSONList.add (domaine); set.add (autre.GetTitle ()); }} return JSON.TojSontring (JSONList, SerializerFeature.WriteMapNullValue); }} package com.yyingjun.test.Controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.sterreotype.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.otherservicei; import com.yingjun.test.service.stockstatusservicei; @Controller @RequestMapping (value = "/") classe publique TSSController {@Autowired private autre pour autresservice; @RequestMapping (value = "/ getotherList", produit = "text / html; charset = utf-8") @ResponseBody private string getotherList () {String JSON = autres pourvice.getOterList (); retourner JSON; }} 7. Créer une classe de test
Importer 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.springjunit4classrunner; @Runwith (springjunit4classrunner.class) @contextconfiguration (Locations = {"classpath: spring.xml"}) public class testMyBatis {@autowired private autre service devicei; @Test public void test () {String list = service.getOterList (); logger.info (liste); }}8. Vérifiez le navigateur
http: // localhost: 8080 / tzyjstatesservice / getotherlist
À ce stade, le test a été réussi et l'intégration des trois principaux cadres SSM a été achevé. Si vous avez d'autres besoins, vous pouvez continuer à les ajouter sur cette base.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.