Je viens d'apprendre le cadre SpringMVC récemment, et il estime qu'il est en effet beaucoup plus pratique et réduit beaucoup de code redondant. J'ai fait un petit projet à pratiquer. Il s'agit d'un projet d'application SpringMVC de base. Mybatis n'est pas utilisé. Les fonctions du projet sont assez complètes et les fonctions de base de l'addition, de la suppression, de la modification et de la recherche sont réalisées.
Environnement du projet:
-Système: Win10
-Development Environnement: EclipseoxyGenreleSeANDIDAD3 (4.7)
-jdk Version: Java1.8 (121)
-Mysql: 5.7
-Spring: 4.0
-Tomcat: 8.5
Techniques utilisées:
Springmvcspringjspjdbcjavabeanjsjstl
Adresse d'accès: http: // localhost: 8080 / votre nom de projet / tout
Déclaration: Je ne suis qu'un novice qui vient de commencer, et il y a inévitablement des erreurs dans le code que j'ai écrit. Si vous le trouvez, veuillez le signaler, merci à tous.
Le processus détaillé est publié ci-dessous
1. Créez d'abord un projet Web (DynamicWebProject)
J'ai écrit le nom du projet moi-même, pas plus détaillé
2. Voici ma structure de projet terminée
Je viens d'utiliser la fonction et je n'ai pas utilisé l'interface. Je n'ai utilisé que trois classes simples, la classe d'entité sous le package Bean, la classe d'accès à la base de données Dao Layer et la classe de contrôle d'interface de la couche de contrôleur.
Tous les packages JAR référencés se trouvent dans le dossier / webContent / web-inf / lib, qui est différent des projets Java ordinaires.
3. Code Java spécifique
1. CLASSE STUDENT, la classe d'entité doit d'abord écrire un JavaBean. Le mien est étudiant en tant que Javabean. Le code détaillé est le suivant:
Package Bean; classe publique Student {ID entier privé; // ID d'étudiant nom de chaîne privée; // nom d'étudiant double Javascore privé; // score java score privé htmlscore; // html score privé double cssscore; // css score privé totalcore; public Integer getID () {return id; } public void setid (INGER ID) {this.id = id; } public String getName () {Nom de retour; } public void setName (string name) {this.name = name; } public double getJavascore () {return javascore; } public void setjavascore (double javascore) {this.javascore = javascore; } public double gethtmlscore () {return htmlScore; } public void sethtmlscore (double htmlscore) {this.htmlscore = htmlscore; } public double getCSSSCORE () {return CSSSCORE; } public void setcssSCore (double cssscore) {this.cssScore = cssscore; } public double getTotalsCore () {return totalCore; } public void SettotalScore (double totalCore) {this.totalscore = totalCore; }}2. StudentDao, la classe d'opération d'accès à la base de données est alors le code de la couche DAO, c'est-à-dire la couche d'accès aux données. Voici une classe encapsulée par Spring (JDBCTemplate), qui contient certaines méthodes de fonctionnement de la base de données. Il n'est pas nécessaire d'écrire beaucoup de code répété par vous-même, il suffit d'écrire des instructions SQL. Voici le code spécifique:
Package Dao; Importer java.sql.resultSet; import java.sql.sqlexception; import java.sql.types; import java.util.list; import org.springframework.jdbc.core.jdbctemplate; import org.springframework.jdbc.core.RowMapper; {/ ** * @fields jdbcTemplate: todo * / private jdbcTemplate jdbCTemplate; / ** * Classe fournie par Spring * * @param JDBCTemplate * Retour Valeur Type: void * @author Janinus * / public void setJDBCTemplate (JDBCTemplate jdbcTemplate) {this.jdbCTemplate = jdbCTemplate; } / ** * Query Tous les étudiants * * @return Retour Valeur Type: List <Student> * @Author Janinus * / public List <Student> Queryall () {String SQL = "SELECT ID, Name, Javascore, htmlScore, CSSSCcore From Student"; // mappez le résultat de la requête dans la classe étudiante, ajoutez-le à la liste et retournez return jdbctemplate.query (sql, new étudiantMapper ()); } / ** * Requête par nom * * @param name * @return Retour Valeur Type: List <Student> * @author janinus * / public List <Student> QueryByName (String Name) {String SQL = "SELECT ID, Name, Javascore, htmlsscore, CSSSCORE FROM Student Where Name Like" + name + "%" "; return jdbCTemplate.Query (SQL, new StudentMapper ()); } / ** * Ajouter l'étudiant * * @param étudiant * @return Retour Valeur Type: boolean * @author janinus * / public boolean addstu (étudiant étudiant) {String sql = "insérer dans les valeurs de l'étudiant (id, nom, javascore, htmlscore, cssscore) valeurs (0,,?,?,?)"; return jdbctemplate.update (sql, nouvel objet [] {student.getName (), student.getjavascore (), student.gethtmlscore (), student.getcssscore ()}, new int [] {types.varchar, type.double, types.double, types.double, types.double}) == 1; } / ** * Supprimer l'élève * * @param id * @return Retour Valeur Type: boolean * @author janinus * / public boolean DeleteStu (Integer id) {String sql = "Delete from Student Where id =?"; return jdbctemplate.update (sql, id) == 1; } / ** * Mettre à jour les informations de l'étudiant * * @param étudiant * @return Retour Valeur Type: Boolean * @author Janinus * / public boolean updateStu (étudiant étudiant) {String sql = "Update Student set name =?, Javascore = ?, htmlScore = ?, Objet stuoBj [] = nouvel objet [] {student.getName (), student.getJavascore (), student.gethtmlscore (), student.getcssscore (), student.getId ()}; return jdbctemplate.update (sql, Stuobj) == 1; } / ** * Renvoie le score total des n étudiants supérieurs * * @param num * @return Retour Valeur Type: List <Student> * @Author Janinus * / Public List <Student> Topnum (int num) {String SQL = "SELECT ID, Name, Javascore + HtmlScore + CSSSSCORE DU COMMANDE ÉTUMBRE DE JAVASCORE + HTMLSCORE + CSSSCORE DESC, NOM-ASSCORE + HTMLSCORE + CSSSCORE DESC, NOM-ASSCORE? return jdbctemplate.query (sql, new RowMapper <Student> () {@Override public Student maprow (resultSet rs, int Rownum) lève Sqlexception {// TODO Méthode générée automatiquement Stub Student Student = New Student (); Student.SetId (Rs.getInt (1)); Student.SetName (Rs.GetTstring (2)); Student.SetTotalsCore (Rs.GetDouble (3)); } / ** * * Mappage de la base de données StudentMapper * * @classname StudentMapper * @Author Janinus * @Date 27 juin 2017 * @version v1.0 * / classe StudentMapper implémente RowMapper <Student> {@Override Public Student Maprow (ResultSset Rs, int Rownum) Student (neuf Student ();); Student.setid (Rs.GetInt (1)); Student.SetName (Rs.getString (2)); Student.SetJavascore (Rs.GetDouble (3)); Student.SethTMLSCORE (Rs.GetDouble (4)); Student.SetCssScore (Rs.GetDouble (5)); Retour étudiant; }}}3. StudentController, la classe d'interaction frontale est enfin la classe StudentController de la couche de contrôle liée à l'interaction utilisateur. Cette classe est principalement utilisée pour combiner le front-end et le back-end pour obtenir une interaction complète. Voici le code spécifique:
Contrôleur de package; import org.springframework.context.applicationContext; import org.springframework.context.support.classpathxmlapplicationcontext; import org.springframework.sterreotype.Controller; import org.springframework.ui.model; org.springframework.web.bind.annotation.requestmapping; import bean.student; importer dao.studentdao; @ControllerPublic class StudentController {/ ** * * obtenir toutes les informations étudiantes à partir de la base de données et renvoyer les données à l'indice de page d'accueil, jsp * * @param model * @return de retour de valeur @RequestMapping (value = "/ all") public String Queryall (modèle modèle) {applicationContext context = new ClassPathXmlApplicationContext ("ApplicationContext.xml"); // Obtenez dao StudentDao dao = (StudentDao) context.getBean ("dao"); Model.AddAttribute ("Students", dao.Queryall ()); Model.AddAttribute ("Tops", dao.topnum (3)); return "index.jsp"; } / ** * Trouver les étudiants par son nom, utilisez la recherche Fuzzy et renvoyez le résultat à index.jsp * * @param name * @param modèle * @return return Value Type: String * @author janinus * / @RequestMapping (value = "/ queryByName") Public String QueryByName (nom de chaîne, modèle modèle) {application Context = new ClassPathxMlApplicationContext ("ApplicationContext.xml"); // Obtenez DAO du conteneur IOC StudentDao Dao = (StudentDao) context.getBean ("dao"); Model.AddAttribute ("Students", dao.QueryByName (nom)); Model.AddAttribute ("Tops", dao.topnum (3)); return "index.jsp"; } / ** * Ajoutez un nouvel étudiant et renvoyez le résultat à la page All, transféré de tous à la page d'accueil * @param name * @param javascore * @param htmlscore * @param cssscore * @param modèle * @return de retour de valeur: chaîne * @author janinus * / @requestmapping (value = "/ add") public String addstu addstu (string name, string javascor HTMLSCORE, String CSSSCORE, modèle modèle) {ApplicationContext context = new ClassPathXmlApplicationContext ("ApplicationContext.xml"); StudentDao Dao = (StudentDao) context.getBean ("dao"); Étudiant étudiant = nouveau étudiant (); Student.SetName (nom); Student.SetJavascore (double.Parsedouble (Javascore)); Student.SethTMLSCORE (double.Parsedouble (htmlscore)); Student.SetCssSCore (double.Parsedouble (CSSSCore)); Boolean Result = dao.addstu (étudiant); if (result) Model.AddAttribute ("msg", "<script> alert ('ajouter avec succès!') </cript>"); else Model.AddAttribute ("msg", "<cript> alert ('ajouter avec succès!') </cript>"); retourner "tout"; } / ** * Supprimer l'étudiant par id * @param id * @param modèle * @return return Value Type: String * @Author Janinus * / @RequestMapping (value = "/ DeleteByid") public String DeleteByid (String id) {applicationContext context = new ClassPathxMlapplicationContext ("applicationContext.xml"); StudentDao Dao = (StudentDao) context.getBean ("dao"); booléen result = dao.deletestu (Integer.ParseInt (id)); if (result) Model.AddAttribute ("msg", "<script> alert ('supprimer avec succès!') </cript>"); else Model.AddAttribute ("msg", "<cript> alert ('supprimer avec succès!') </cript>"); retourner "tout"; } / ** * * @param id * @param name * @param javascore * @param htmlscore * @param cssscore * @param modèle * @return return value type: String * @author janinus * / @requestmapping (value = "/ update") public String updateStu (String name, string javascore, string htmLS {ApplicationContext context = new ClassPathXmlApplicationContext ("ApplicationContext.xml"); StudentDao Dao = (StudentDao) context.getBean ("dao"); Étudiant étudiant = nouveau étudiant (); Student.SetId (Integer.ParseInt (ID)); Student.SetName (nom); Student.SetJavascore (double.Parsedouble (Javascore)); Student.SethTMLSCORE (double.Parsedouble (htmlscore)); Student.SetCssSCore (double.Parsedouble (CSSSCore)); booléen résultat = dao.updateStu (étudiant); if (result) Model.AddAttribute ("msg", msg ("modifié avec succès")); else Model.AddAttribute ("msg", msg ("Modification a échoué")); retourner "tout"; } / ** * Message de page pour faire apparaître * @param msg * @return RETOUR-RETOUR TYPE: String * @author janinus * / public String msg (String msg) {return "<script> alert ('" + msg + "') </ script>"; }}Tout le code Java a été terminé et seule la configuration XML spécifique et la page frontale sont laissées ci-dessous.
4. Page frontale
Puisqu'il s'agit d'un simple petit projet, mon JS et CSS sont tous sur la même longueur d'onde, non séparés, seulement deux pages,
1.Index.jsp
Page d'accueil, capture d'écran
modifier
Code détaillé:
<% @ page Language = "Java" contentType = "Text / html; charset = utf-8" pageencoding = "utf-8"%> <% @ taglib prefix = "fn" uri = "http://java.sun.com/jsp/jstl/functions"%> <% @ taglib prefix = "c" uri = "http://java.sun.com/jsp/jstl/core"%> <! doctype html> <html lang = "en"> <adf> <meta charset = "utf-8"> <ititle> gestion étudiante </ title> </ head> <style type = "text / css"> body {text-oalign: Centre; } .all {largeur: 40%; marge: 20px 100px; Texte-aligne: Centre; hauteur: 300px; flottant: à gauche; } Tableau {largeur: 80%; marge: 20px automatique; taille de police: 14px; débordement: auto; } # TAB02 {largeur: 80%; marge: 20px automatique; taille de police: 14px; } Tableau Th, Table TD {Border-Bottom: 1PX # 000 solide; hauteur de ligne: 23px; } #edit_comm {width: 500px; marge: 20px automatique; Border-Left: 3px Solid # 000; Affichage: aucun; } #add_comm {width: 500px; marge: 20px automatique; Border-Left: 3px Solid # 000; } #all_comm {height: 600px; } .edit_stu {width: 200px; hauteur: 30px; Contexte: #FFF; Font-Family: "Microsoft Ya Black Light", "Arial Black"; taille de police: 18px; Border: aucun; Border-Bottom: 1px solide # 000; marge: 20px 10px; } </ style> <script src = "http://code.jquery.com/jquery-latest.js"> </ script> <script type = "text / javascrip $ ("input"). addClass ("edit_stu");}) function relush () {window.location.href = "all" rel = "external nofollow" rel = "external nofollow"; } fonction add_reg () {var name = $ ("# add_edit_name"). val (); var javascore = $ ("# add_edit_java"). val (); var htmlscore = $ ("# add_edit_html"). val (); var csssccore = $ ("# add_edit_css"). val (); var namenot = name! = null && name! = ''; var javascorenot = javascore! = null && javascore! = ''; var htmlScorenot = htmlscore! = null && htmlscore! = ''; var cssscorenot = cssscore! = null && cssscore! = ''; if (namenot & javascorenot && htmlScorenot && cssscorenot) return true; else return false; } fonction delete_stu (id) {var result = confirm ("a-t-il été supprimé?"); if (result) window.location.href = "DeleteByid? id =" rel = "external nofollow" + id; } fonction edit_stu (id) {var name = $ ("# name" + id) .text (); var java = $ ("# java" + id) .text (); var html = $ ("# html" + id) .text (); var css = $ ("# css" + id) .text (); $ ("# edit_id"). Val (id); $ ("# edit_name"). Val (nom); $ ("# edit_java"). Val (java); $ ("# edit_html"). Val (html); $ ("# edit_css"). Val (CSS); $ ("# add_comm"). fadeout (); $ ("# edit_comm"). fadein (); } </ script> <body> $ {msg} <h1 align = "Center"> Student Management </H1> <div id = "all_comm"> <h2> Tous les étudiants </h2> <table id = "Items"> <Tr> <Td> ID </ TD> <TD> nom </td> <td> score Java </td> <td> score </ td> score de Java </td> <td> HTML </ TD> SCORE </TD> <Td> CSS Score </td> <td> Opération </td> </td> </tr> <c: foreach itements = "$ {étudiants}" var = "Student"> <tr> <td id = "id $ {student.id}"> $ {student.id} </ td> <td id = "name $ {Student.id}"> $ {student. <td id = "java $ {student.id}"> $ {student.javascore} </td> <td id = "html $ {student.id}"> $ {student.htmlscore} </td> <td id = "css $ {student.id}"> $ {Student.cssscore} onclick = "Delete_stu ($ {student.id})"> delete </a> | <a onclick = "edit_stu ($ {student.id})"> edit </a> </td> </tr> </c: foreach> </ table> <table id = "tab02"> <h2> Top trois </h2> <td> id </td> <td> name </td> <td> score total </td> </tr> <c: foreach items = "$ {tops}" var = "student" vastatus = "i"> <tr> <td> $ {i.index + 1} nom </td> <td id = "id $ {student.id} t"> $ {student. } </td> <td> $ {student.name} </td> <td id = "name $ {student.id} t"> $ {student.totalscore} </td> </tr> </c: ForEach> </ table> Si non affiché: <a onClick = "Regh ()"> Cliquez ici pour refresh </a> <h2> Rechercher un étudiant </h2> <formulaire form = "queryByName" method = "post"> <input type = "text" placeholder = "student name" name = "name"> <input_title "> ajout d'étudiant </h2> <formulaire d'action =" add "method =" post "> <fant type =" paceolder = "ajout" method = "post"> <fort type = "Placeolder =" NOM name = "name" /> <input type = "text" placeholder = "java score" name = "javascore" /> <input type = "text" placeholder = "html score" name = "htmlscore" /> <input type = "text" lisholder = "css score" name = "cssscore" /> <entrée = "soumettre" valorise = " id = "edit_comm"> <h2 id = "edit_title"> edit étudiant </h2> <form action = "update" metheth = "post"> <input type = "text" placeholder = "id à modifier est" id = "edit_id" name = "id" value = "L'id à être modifié est" lecture = "readOnly" /> <br> <fant type = "Placeolder =" NAMELLY = "ReadOnly" /> <br> <bout-type = "Placeolder =" NAMELLEME id = "edit_name" name = "name" /> <input type = "text" placeholder = "java score" id = "edit_java" name = "javascore"> <input type = "text" placeholder = "html score" id = "edit_html" name = "htmlscore" /> <entrée = "text" lieux lieux = "crss score" crss " id = "edit_css" name = "cssscore" /> <input type = "soumider" value = "confirmer la modification" /> <input type = "bouton" value = "Annuler Modification" id = "annuler" /> </ form> </ div> </ body> </ html>2. Login.jsp
<% @ Page Language = "Java" ContentType = "Text / Html; charSet = UTF-8" Pageencoding = "UTF-8"%> <! Doctype HTML Public "- // W3C // DTD HTML 4.01 Transitional // en" "http://www.w3.org/tr/html4/loose.dtd"><html><head><meta http-equiv =" contenu-type "contenu =" Text / html; charset = utf-8 "> <tapie> insert ici </t titre> </-head> <body> <h1 align =" rel = "external nofollow" rel = "external nofollow"> entrez la page d'accueil </a> </h1> </ body> </html>
5. Configuration détaillée du fichier
1. ApplicationContext.xml
Il s'agit du fichier de configuration du conteneur IOC de Spring, utilisé pour implémenter l'injection de dépendance. Ce qui suit est le code spécifique:
<? 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: context = "http://www.springframework.org/schema/context" xmlns: tx = "http://www.springframework.org/schema/tx" xmlns: aop/schema/aop " xsi: schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd "Default-Autowire =" Byname "Default-lazy-init =" true "> <! - Database Data Shice Configuration -> <ean id =" Dataource "> <! - Database Data Shice Configurationd -> Classe -> <propriété name = "DriverClassName" value = "com.mysql.jdbc.driver"> </ propriété> <! - Adresse d'accès de la base de données -> <propriété name = "url" value = "jdbc: mysql: // localhost: 3306 / test"> </ propriété> <! <! - Database Access Motword -> <propriété name = "mot de passe" value = "123123"> </ propriété> </ank> <! - Gestion des transactions de base de données fournie par Spring -> <bean id = "txManager"> <propriété name = "dataSource" resiven-oriven transaction-managère = "txManager" Classe d'entité javabean -> <bean id = "StudentBean"> <! - Configuration automatique des attributs -> </EAN> <! - Classe d'opération d'accès à la base de données fournie par Spring -> <bean id = "jdbcTemplate"> </Ean> <! - CLASSE DE COMMEER DAO -> <Bean Id = "Dao"> </ank name = "dao" ref = "dao"> </ propriété> </bans> </bans>
2. Springmvc-Servlet.xml, classe de configuration Spring MVC,
Nous avons mis en œuvre la majeure partie du code de servlet pour nous et nous n'avons qu'à rédiger une implémentation commerciale. Vous trouverez ci-dessous le code spécifique
<? 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 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. La classe sous le package spécifié -> <contexte: composant-scan basage Base-Package = "Controller" /> </ Beans>
3. web.xml
Il s'agit du fichier de configuration du projet Web, et ce qui suit est le code principal:
<? xml version = "1.0" encoding = "utf-8"?> <web-app xmlns = "http://java.sun.com/xml/ns/javaee" xmlns: xsi = "http://www.w3.org/2001/xmlschema-instance" XSI: ScheMalocation = "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"><!-- CONFIGURE FILTERS ENCODING FILTERS, fourni par Spring -> <Imter> <filter-name> EncodingFilter </ Filter-Name> <Filter-Class> org.springframework.web.filter.characterencodingFilter </ filter-Class> <Init-Param> <Am param-name> Encoding </ Param-name> <param-Value> Utf-8 </ param-Value> Interface -> <leen welcome-file-list> <ven welcome-file> / all </ welcome-file> <leen welcome-file> index.html </venke-file> <leen welcome-file> index.htm </venke-file> </ welcome-file-list> <! - Configurer SpringMvc Servlet -> <Serplet> <Serplet-Name> SpringMvc </serplet-name> <Serplet-Class> org.springframework.web.servlet.dispatcherServlet </ servlet-Class> <Loach-on-Startup> 1 </ Load-on-Startup> </ Servlet> <Servlet-Mapping> <Serplet-Name> Springmvc </ Servlet-Name> <Url-Pattern> / </rl-Pattern>
6. Résumé du projet et annexe
Ce projet est mon programme de pratique quotidien. Afin d'être plus compétent, j'ai à nouveau examiné le processus complet et je me suis beaucoup familier avec cela.
Annexe au package JAR utilisé pour le projet:
En plus du package de printemps, il existe également un package JAR MySQL-JBDC et un package JSTL
Adresse de téléchargement:
Package de pot Spring Framework (version facultative): site officiel du printemps
mysql-jdbc.jar (version facultative): site officiel de MySQL
jstl.jar (version facultative): adresse officielle Maven
Ce qui précède est l'intégralité du contenu de cet article sur l'exemple complet de Spring MVC implémentant la base de données MySQL Addition, suppression, modification et recherche de la base de données MySQL. J'espère que ce sera utile à tout le monde. Les amis intéressés peuvent continuer à se référer à ce site:
Explication détaillée de la configuration du module Web au printemps
Exemple d'introduction et de code d'implémentation SpringMVC Rest Style
SpringMVC Interceptor implémente une seule connexion
S'il y a des lacunes, veuillez laisser un message pour le signaler. Merci vos amis pour votre soutien pour ce site!