私は最近SpringMVCフレームワークを学びましたが、それは本当にはるかに便利であり、多くの冗長コードを減らすと感じています。私は練習するために小さなプロジェクトをしました。これは、基本的なSpringMVCアプリケーションプロジェクトです。 MyBatisは使用されていません。プロジェクト機能は非常に完全であり、追加、削除、変更、および検索の基本的な機能が実現されます。
プロジェクト環境:
- システム:Win10
- 開発環境:EclipseoxygenreaseCandidate3(4.7)
-JDKバージョン:Java1.8(121)
-mysql:5.7
- スプリング:4.0
-tomcat:8.5
使用されるテクニック:
springmvcspringjspjdbcjavabeanjsjstl
アクセスアドレス:http:// localhost:8080/your project name/all
声明:私は始めたばかりの初心者であり、私が書いたコードに必然的にエラーがあります。あなたがそれを見つけたら、それを指摘してください、みなさん、ありがとう。
詳細なプロセスを以下に示します
1.最初にWebプロジェクトを作成する(dynamicwebproject)
私はプロジェクト名を自分で書きましたが、これ以上詳細はありません
2。これは私の完成したプロジェクト構造です
この機能を使用したばかりで、インターフェイスを使用しませんでした。 Beanパッケージの下のエンティティクラス、DAOレイヤーデータベースアクセスクラス、およびコントローラーレイヤーのインターフェイス制御クラスの3つの単純なクラスのみを使用しました。
参照されているすべてのJARパッケージは、/webcontent/web-inf/libフォルダーにあり、通常のJavaプロジェクトとは異なります。
3.特定のJavaコード
1.学生クラス、エンティティクラスは、最初にJavabeanを書く必要があります。鉱山はJavabeanとしての学生です。詳細なコードは次のとおりです。
パッケージBean; Public Class Student {Private Integer ID; // Student ID Private String Name; // Student Name Private Double Javascore; // Java Score Private double Htmlscore; // HTMLスコアプライベートダブルCSSSCORE; // CSSスコアプライベートダブルトーカル; public Integer getId(){return id; } public void setid(integer id){this.id = id; } public string getname(){return name; } 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 totalScore; } public void settoToTotScore(double totalscore){this.totalscore = totalscore; }}2。StudentDao、データベースアクセス操作クラスは、DAOレイヤーのコード、つまりデータアクセスレイヤーです。以下は、Spring(JDBCtemplate)によってカプセル化されたクラスです。これには、データベースを操作する方法がいくつか含まれています。自分で多くの繰り返しコードを書く必要はありません。SQLステートメントを書くだけです。これが特定のコードです:
パッケージdao; import 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 StudentDao { / ** * @fields jdbctemplate:todo * / private jdbctemplate jdbctemplate; / ** * springが提供するクラス * * @param jdbctemplate * return値タイプ:void * @author janinus */ public void setjdbctemplate(jdbctemplate jdbctemplate){this.jdbctemplate = jdbctemplate; } / ** * queryすべての学生 * * @return return値タイプ:リスト<Student> * @Author Janinus * / public List <Student> queryall(){string sql = "Select id、name、javascore、htmlscore、cssscore from sudent"; //クエリの結果を学生クラスにマップし、リストに追加し、jdbctemplate.query(sql、new StudentMapper())を返します。 } / ** * query by name * * @param name * @return return valueタイプ:リスト<Student> * @author janinus * / public list <Student> queryByname(string name){string sql = "select id、name、javascore、htmlscore、htmlscore、cssscore jdbctemplate.query(sql、new StudentMapper())を返します。 } / ** *学生の追加 * * @param学生 * @return return値タイプ:boolean * @author janinus * / public boolean addstu(student student){string sql = "inserting intout intout(name、javascore、htmlscore、cssscore)値(0、?、?、?、?、?)"; return jdbctemplate.update(sql、new object [] {desutent.getName()、sustent.getjavascore()、student.gethtmlscore()、student.getcssscore()}、new [] {types.varchar、types.double、types.double、型、タイプ、タイプ、タイプ、タイプ、タイプ、タイプ、タイプ、タイプ、タイプ、タイプ、タイプ、 } / ** * delete Student * * @param id * @return return値タイプ:boolean * @author janinus * / public boolean deletestu(integer id){string sql = "delete from Student where id =?"; jdbctemplate.update(sql、id)== 1を返します。 } / ** *学生情報の更新 * * @param学生 * @return return値タイプ:boolean * @author janinus * / public boolean updatestu(学生学生){string sql = "update student name =?、javascore =?、htmlscore =?、csscore =?"; where id =? "; object stuobj [] = new object [] {sustent.getName()、sustent.getjavascore()、student.gethtmlscore()、student.getcssscore()、student.getid()}; jdbctemplate.update(sql、stuobj)== 1; } / ** *トップn学生の合計スコアを返します * * @param num * @return return値タイプ:リスト<sudident> * @author janinus * / public list <sudtent> topnum(int num){string sql){select id、name、javascore+htmlscore+csscore return jdbctemplate.query(sql、new rowmapper <sustent>(){@override public sudent maprow(resultet rs、int rownum)throws sqlexception {// dodo auto-figenated method stub stust stust stust student stust dew sustent(); sudine.setid(rs.getint(1)); Student.SettotAlscore(rs.getDouble(3)); } / ** * * StudentMapper Database Mapping * * @classname StudentMapper * @Author Janinus * @date 2017年6月27日 * @version V1.0 * / class StudentMapperはRowmapper <sudtent <Student> {@Override Public Student MapRow(Resultset Rs、int rownum)shlows Stubcepteceptece 学生(); 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));学生を返します。 }}}3. StudentController、フロントエンドインタラクションクラスは、最終的にユーザーインタラクションに関連するControl Layer StudentControllerクラスになります。このクラスは、主にフロントエンドとバックエンドを組み合わせて完全な相互作用を実現するために使用されます。これが特定のコードです:
パッケージコントローラー; Import org.springframework.context.applicationcontext; Import org.springframework.context.support.classpathxmlapplicationcontext; Import org.springframework.stereotype.controller; import org.springframework.ui.model; org.springframework.web.bind.annotation.requestmapping; Import bean.student; import dao.studentdao; @controllerpublic Class StudentController { /** * *データベースからすべての学生情報を取得し、ホームページインデックスにデータを返し、JSP * @return値タイプ: @RequestMapping(value = "/all")public string queryall(model model){applicationContext Context = new ClassPathxMLApplicationContext( "ApplicationContext.xml"); // get dao sustentdao dao =(studentdao)context.getbean( "dao"); model.addattribute( "desustor"、dao.queryall()); Model.Addattribute( "Tops"、dao.topnum(3)); "index.jsp"を返します。 }/** *名前で生徒を見つけ、ファジー検索を使用し、index.jsp * * @param name * @return return value type:string * @author janinus */@requestmapping(value = "/querybyname")public string querybyname(string name、Model {approacted -contex classPathXMLApplicationContext( "ApplicationContext.xml"); // IOCコンテナからDAOを取得しましたdaodao dao =(studentdao)context.getbean( "dao"); Model.Addattribute( "desustor"、dao.querybyname(name)); Model.Addattribute( "Tops"、dao.topnum(3)); "index.jsp"を返します。 }/** *新しい学生を追加して、結果をすべてのページに戻し、ホームページに転送 * @param name * @param javascore * @param htmlscore * @param cssscore * @return値タイプ:string * @author janinus */@requestmapping(@requestmapping(valuation = "/add")public string jav(string jav) htmlscore、string cssscore、model model){applicationContext Context = new ClassPathxMLApplicationContext( "ApplicationContext.xml"); StudentDao dao =(studentdao)context.getBean( "dao");学生学生= new Student(); Student.setName(name); Student.setJavaScore(double.ParseDouble(JavaScore)); Student.sethtmlscore(double.parsedouble(htmlscore)); Student.SetCSSSCORE(double.ParseDouble(cssscore)); boolean result = dao.addstu(学生); if(result)model.addattribute( "msg"、 "<script> alert( 'addded ressuletfull!')</script>"); else model.addattribute( "msg"、 "<script> alert( 'ressuletfully')</script>"); 「すべて」を返します。 }/** * delete delete delete delete by id * @param id * @param model * @return return value Type:string * @author janinus */@requestmapping(value = "/deletebyid")public string deletebyid(string id、model){applicationcontext context = new classpathxmlapplicationcontext( "ApplicationContext.xml"); StudentDao dao =(studentdao)context.getBean( "dao"); boolean result = dao.deletestu(integer.parseint(id)); if(result)model.addattribute( "msg"、 "<script> alert( 'delete resseffully')</script>"); else model.addattribute( "msg"、 "<script> alert( 'delete ressuletly!')</script>"); 「すべて」を返します。 }/** * * @param id * @param name * @param javascore * @param htmlscore * @param cssscore * @param model * @return return値タイプ:@author janinus */@requestmapping(value = "/update")public string updatestue {applicationContext Context = new ClassPathXMLApplicationContext( "ApplicationContext.xml"); StudentDao dao =(studentdao)context.getBean( "dao");学生学生= new Student(); Student.setID(integer.parseint(id)); Student.setName(name); Student.setJavaScore(double.ParseDouble(JavaScore)); Student.sethtmlscore(double.parsedouble(htmlscore)); Student.SetCSSSCORE(double.ParseDouble(cssscore)); boolean result = dao.updatestu(学生); if(result)model.addattribute( "msg"、msg( "Modified usglected")); else model.addattribute( "msg"、msg( "Modification failed")); 「すべて」を返します。 }/** *ポップアップへのページメッセージ * @param msg * @return return値タイプ:string * @author janinus */public string msg(string msg){return "<script> alert( '" + msg + "')</script>"; }}すべてのJavaコードが完了しており、特定のXML構成とフロントエンドページのみが以下に残ります。
4。フロントエンドページ
それは単純な小さなプロジェクトであるため、私のJSとCSSはすべて同じページにあり、分離されておらず、2ページしかありません。
1.index.jsp
ホームページ、スクリーンショット
編集
詳細なコード:
<%@ page Language = "Java" contentType = "text/html; charset = utf-8" pageencoding = "utf-8"%> <%@ taglib prefix = "fn" uri = "http://java.sun.com/jsp/jstl/functions" uri = "http://java.sun.com/jsp/jstl/core"%> < } .all {width:40%;マージン:20px 100px;テキストアライグ:センター;高さ:300px;フロート:左; }テーブル{幅:80%;マージン:20px Auto;フォントサイズ:14px;オーバーフロー:自動; }#tab02 {width:80%;マージン:20px Auto;フォントサイズ:14px; }テーブルTh、テーブルTD {border-bottom:1px#000 solid;ラインハイト:23px; } #edit_comm {width:500px;マージン:20px Auto;国境左:3pxソリッド#000;表示:なし; } #add_comm {width:500px;マージン:20px Auto;国境左:3pxソリッド#000; } #all_comm {height:600px; } .edit_stu {width:200px;高さ:30px;背景:#fff;フォントファミリー:「Microsoft ya black light」、「arial black」;フォントサイズ:18px;国境:なし;ボーダーボトム:1pxソリッド#000;マージン:20px 10px; } </style> <script src = "http://code.jquery.com/jquery-latest.js"> </script> <script = "text/javascript"> $(function(){$( "#cancel")。 $( "input")。addclass( "edit_stu"); function refush(){windocy.location.href = "all" rel = "external nofollow" rel = "external nofollow"; } function add_reg(){var name = $( "#add_edit_name")。val(); var javascore = $( "#add_edit_java")。val(); var htmlscore = $( "#add_edit_html")。val(); var cssscore = $( "#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)true;それ以外の場合はfalseを返します。 } function delete_stu(id){var result = confism( "削除しましたか?"); if(result)window.location.href = "deletebyid?id =" rel = "external nofollow" +id; } function 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(name); $( "#edit_java")。val(java); $( "#edit_html")。val(html); $( "#edit_css")。val(css); $( "#add_comm")。fadeout(); $( "#edit_comm")。fadein(); } </script> <body> $ {msg} <h1 align = "center">学生管理</h1> <div id = "all_comm"> <h2>すべての学生</h2> <テーブルid = "アイテム"> <tr> <td> id </td> <td> name </td> <td> java score </td> </td> </td> <td> css score </td> <td>操作</td> </td> </tr> <c:foreach items = "$ {desutent}" var = "suduent"> <tr> <td id = "id $ {desudent.id}"> $ {desudent.id}} </td> <td $ $ {sudent.id} </td> <td id = "java $ {desutent.id}"> $ {sudent.javascore} </td> <td id = "html $ {sustent.id}"> $ {desudent.htmlscore} </td> <td id = "css $ {desudent.id}" onclick = "delete_stu($ {sudent.id})"> delete </a> | <a onclick = "edit_stu($ {desudent.id})"> edit </a> </td> </c:foreach> </table> <table> <table id = "tab02"> </h2> </h2> </h2> < <td> id </td> <td> name </td> <td>合計スコア</td> </tr> <c:foreach items = "$ {tops}" var = "desute" varstatus = "i"> <tr> <td> $ {i.index+1} name </td> <td id = "id $ {ad.id} } </td> <td> $ {sudent.name} </td> <td id = "name $ {desudent.id} t"> $ {sudent.totalscore} </td> </tr> </c:foreach> </table>表示されていない場合:<a onclick = ""> "refish"> ">" <h2>Find student</h2> <form action="queryByName" method="post" > <input type="text" placeholder="Student name" name="name" > <input type="submit" value="Find student" > </form> <h2 id="edit_title">Add student</h2> <form action="add" method="post" > <input type="text" placeholder="Student name" name = "name" /> <input type = "text" placeholder = "java score" name = "javascore" /> <input type = "text" placeholder = "html score" name = "htmlscore" /> <入力タイプ= "placeholder =" css score "name =" cssscore " /> <input" /> <入力= "" id = "edit_comm"> <h2 id = "edit_title">編集</h2> <form action = "update" method = "post"> <input "> <input" text "placeholder =" id for modified is id = "edit_id" name = "id" value = " id = "edit_name" name = "name" /> <input type = "text" placeholder = "java score" id = "edit_java" name = "javascore"> <入力タイプ= "テキスト"プレースホルダー= "htmlスコア" id = "edit_html" name = "htmlscore" "cs" "cs" "cs" "cs" "cs" "cs" /> id = "edit_css" name = "cssscore"/> <input type = "submit" "value =" confirm ofification "/> <input type =" button "value ="キャンセル修正 "id =" cancel "/> </form> </body> </html> </body> </html>2。Login.jsp
<%@ page Language = "Java" contentType = "text/html; charset = utf-8" pageencoding = "utf-8"%> < "http://www.w3.org/tr/html4/loose.dtd"> <html> <head> <meta http-equiv =" content-type "content =" text/html; charset = utf-8 "> <タイトル>タイトル< rel = "外部nofollow" rel = "external nofollow">ホームページを入力</a> </h1> </body> </html>
5。詳細なファイル構成
1。ApplicationContext.xml
これは、SpringのIOCコンテナの構成ファイルであり、依存関係噴射を実装するために使用されます。以下は特定のコードです。
<?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 = " xsi:schemalocation = "http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd <! - ドライバークラスの読み込み - > <プロパティ名= "driverclassName" value = "com.mysql.jdbc.driver"> </property> <! - > <プロパティ名= "url" value = "jdbc:mysql:// localhost:3306/test"> < value = "root"> </property> <! - データベースアクセスパスワード - > <プロパティ名= "パスワード"値 "value ="> </property> </bean> <! - springによって提供されるデータベーストランザクション管理 - > <bean id = "txmanager"> <プロパティ名= "datasource" ref = "datasource"> </propert> </bean> </bean> </bean transaction-manager = "txmanager"/> <! - javabeanエンティティクラスを構成 - > <bean id = "sudentbean"> <! - 属性自動構成 - > </bean> <! - springによって提供されるデータベースアクセス操作クラス - > <bean id = "jdbctemplate"> </bean> < <! - コントロールレイヤークラス、この構成は無効です - > <bean id = "controller"> <プロパティ名= "dao" ref = "dao"> </property> </bean> </beans>
2。SpringMVC-Servlet.xml、Spring MVC構成クラス、
私たちは私たちのためにほとんどのサーブレットのコードを実装しました、そして、私たちはビジネスの実装を書くだけです。以下は特定のコードです
<?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/context" xsi:schemalocation = "http://ww.springframework http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframeworkwwork/指定されたパッケージの下でクラスを自動的にスキャン - > <コンテキスト:component-scanベースパッケージ= "コントローラー" /> < /beans>
3。web.xml
これはWebプロジェクトの構成ファイルであり、以下がメインコードです。
<?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" <filter-class> org.springframework.web.filter.characterencodingfilter </filter-class> <init-param> <param-name>エンコード</param-name> <param-value> utf-8 </param-value> </init-param> </filter> <! <welcome-file> index.html </welcome-file> <welcome-file> index.htm </welcome-file> </welcome-file-list> <! - springmvc servlet-> <servlet> <servlet-name> springmvc </servlet-name> <servlet-class> org.springframework.web.dispetletederservet. <load-on-startup> 1 </load-on-startup> </servlet> <servlet-mapping> <servlet-name> springmvc </servlet-name> <url-pattern>/</url-pattern> </servlet-mapping> </web-app>
6.プロジェクトの概要と付録
このプロジェクトは私の毎日の練習プログラムです。より熟練するために、私は完全なプロセスをもう一度レビューし、それに多くのことに精通しました。
プロジェクトに使用されるJARパッケージの付録:
Springパッケージに加えて、MySQL-JBDC JARパッケージとJSTL JARパッケージもあります
住所をダウンロード:
Spring Framework Jar Package(オプションバージョン):Spring公式Webサイト
mysql-jdbc.jar(オプションバージョン):mysql公式ウェブサイト
jstl.jar(オプションバージョン):Maven公式住所
上記は、MySQLデータベースの追加、削除、変更、および検索を実装するスプリングMVCの完全な例に関するこの記事の全体的な内容です。私はそれが誰にでも役立つことを願っています。興味のある友達は引き続きこのサイトを参照できます:
春のWebモジュールの構成の詳細な説明
SpringMVCレストスタイルの紹介と実装コードの例
SpringMVCインターセプターは、シングルサインオンを実装します
欠点がある場合は、それを指摘するためにメッセージを残してください。このサイトへのご支援をありがとうございました!