基本概念
1.1、spring
spring是一個開源框架,spring是于2003 年興起的一個輕量級的java 開發框架,由rod johnson 在其著作expert one-on-one j2ee development and design中闡述的部分理念和原型衍生而來。它是為了解決企業應用開發的復雜性而創建的。spring使用基本的javabean來完成以前只可能由ejb完成的事情。然而,spring的用途不僅限于服務器端的開發。從簡單性、可測試性和松耦合的角度而言,任何java應用都可以從spring中受益。 簡單來說,spring是一個輕量級的控制反轉(ioc)和面向切面(aop)的容器框架。
1.2、springmvc
spring mvc屬于springframework的后續產品,已經融合在spring web flow里面。spring mvc 分離了控制器、模型對象、分派器以及處理程序對象的角色,這種分離讓它們更容易進行定制。
1.3、mybatis
mybatis 本是apache的一個開源項目ibatis, 2010年這個項目由apache software foundation 遷移到了google code,并且改名為mybatis 。mybatis是一個基于java的持久層框架。ibatis提供的持久層框架包括sql maps和data access objects(dao)mybatis 消除了幾乎所有的jdbc代碼和參數的手工設置以及結果集的檢索。mybatis 使用簡單的 xml或注解用于配置和原始映射,將接口和 java 的pojos(plain old java objects,普通的 java對象)映射成數據庫中的記錄。
第一步:通過maven建立一個web項目。
第二步:pom文件導入jar包
(1) pom.xml
我把我pom文件整個都拷貝來了,有些初始化就有的東西你要去掉,保留你自己pom生成的那份。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
|
<project xmlns= "http://maven.apache.org/pom/4.0.0" xmlns:xsi= "http://www.w3.org/2001/xmlschema-instance" xsi:schemalocation= "http://maven.apache.org/pom/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd" > <modelversion> 4.0 . 0 </modelversion> <groupid>com.test</groupid> <artifactid>ssm</artifactid> <packaging>war</packaging> <version> 0.0 . 1 -snapshot</version> <name>ssm maven webapp</name> <url>http: //maven.apache.org</url> <properties> <!-- spring版本號 --> <spring.version> 4.0 . 2 .release</spring.version> <!-- mybatis版本號 --> <mybatis.version> 3.2 . 6 </mybatis.version> <!-- log4j日志文件管理包版本 --> <slf4j.version> 1.7 . 7 </slf4j.version> <log4j.version> 1.2 . 17 </log4j.version> </properties> <dependencies> <dependency> <groupid>junit</groupid> <artifactid>junit</artifactid> <version> 3.8 . 1 </version> <scope>test</scope> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-core</artifactid> <version>${spring.version}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-web</artifactid> <version>${spring.version}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-oxm</artifactid> <version>${spring.version}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-tx</artifactid> <version>${spring.version}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-jdbc</artifactid> <version>${spring.version}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-webmvc</artifactid> <version>${spring.version}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-aop</artifactid> <version>${spring.version}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-context-support</artifactid> <version>${spring.version}</version> </dependency> <dependency> <groupid>org.springframework</groupid> <artifactid>spring-test</artifactid> <version>${spring.version}</version> </dependency> <!-- mybatis核心包 --> <dependency> <groupid>org.mybatis</groupid> <artifactid>mybatis</artifactid> <version>${mybatis.version}</version> </dependency> <!-- mybatis/spring包 --> <dependency> <groupid>org.mybatis</groupid> <artifactid>mybatis-spring</artifactid> <version> 1.2 . 2 </version> </dependency> <!-- 導入java ee jar 包 --> <dependency> <groupid>javax</groupid> <artifactid>javaee-api</artifactid> <version> 7.0 </version> </dependency> <!-- 導入mysql數據庫鏈接jar包 --> <dependency> <groupid>mysql</groupid> <artifactid>mysql-connector-java</artifactid> <version> 5.1 . 30 </version> </dependency> <!-- 導入dbcp的jar包,用來在applicationcontext.xml中配置數據庫 --> <dependency> <groupid>commons-dbcp</groupid> <artifactid>commons-dbcp</artifactid> <version> 1.2 . 2 </version> </dependency> <!-- jstl標簽類 --> <dependency> <groupid>jstl</groupid> <artifactid>jstl</artifactid> <version> 1.2 </version> </dependency> <!-- 日志文件管理包 --> <!-- log start --> <dependency> <groupid>log4j</groupid> <artifactid>log4j</artifactid> <version>${log4j.version}</version> </dependency> <!-- 格式化對象,方便輸出日志 --> <dependency> <groupid>com.alibaba</groupid> <artifactid>fastjson</artifactid> <version> 1.1 . 41 </version> </dependency> <dependency> <groupid>org.slf4j</groupid> <artifactid>slf4j-api</artifactid> <version>${slf4j.version}</version> </dependency> <dependency> <groupid>org.slf4j</groupid> <artifactid>slf4j-log4j12</artifactid> <version>${slf4j.version}</version> </dependency> <!-- log end --> <!-- 映入json --> <dependency> <groupid>org.codehaus.jackson</groupid> <artifactid>jackson-mapper-asl</artifactid> <version> 1.9 . 13 </version> </dependency> <!-- 上傳組件包 --> <dependency> <groupid>commons-fileupload</groupid> <artifactid>commons-fileupload</artifactid> <version> 1.3 . 1 </version> </dependency> <dependency> <groupid>commons-io</groupid> <artifactid>commons-io</artifactid> <version> 2.4 </version> </dependency> <dependency> <groupid>commons-codec</groupid> <artifactid>commons-codec</artifactid> <version> 1.9 </version> </dependency> </dependencies> <build> <finalname>ssm</finalname> </build> </project> |
第三步:看整體的項目架構,先說明下我這里還沒有有關springmvc的相關東西,因為我先整合sping-mybatis,在測試是否成功,成功在整合springmvc
第四步:建立model類
1
2
3
4
5
6
7
|
public class user { private int id; private string name; private string password; private string password2; /*提供set和get方法,tostring方法*/ } |
第五步:創建數據庫,userdao接口和mapper映射文件
(1)建立很簡單的一張表
(2)userdao接口
1
2
3
|
public interface userdao { user finduserbyid(user user); } |
(3)uesrmapper.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
<?xml version= "1.0" encoding= "utf-8" ?> <!doctype mapper public "-//mybatis.org//dtd mapper 3.0//en" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" > <!-- namespace命名空間,指向userdao全路徑--> <mapper namespace= "com.ssm.dao.userdao" > <!-- 根據id查詢用戶信息 --> <!-- id:唯一標識 一個statement,和userdao方法名一致 #{}:表示 一個占位符,如果#{}中傳入簡單類型的參數,#{}中的名稱隨意 parametertype:輸入 參數的類型,和userdao()里參數一致 resulttype:輸出結果 類型,和userdao()返回類型一致 --> <select id= "finduserbyid" parametertype= "com.ssm.model.user" resulttype= "com.ssm.model.user" > select * from user <where> < if test= "name != null" > and name= #{name} </ if > < if test= "password != null" > and password= #{password} </ if > </where> </select> </mapper> |
第五步:創建userservice和userserviceimpl
(1)userservice
1
2
3
|
public interface userservice { public user getuserbyid(user user); } |
(2)userserviceimpl
1
2
3
4
5
6
7
8
9
10
11
12
|
import org.springframework.stereotype.service; import com.ssm.dao.userdao; import com.ssm.model.user; import com.ssm.service.userservice; @service ( "userservice" ) public class userserverimpl implements userservice { @resource private userdao userdao; public user getuserbyid(user user) { return this .userdao.finduserbyid(user); } } |
第六步:創建jdbc文件和log日志文件
(1)jdbc.properties
1
2
3
4
|
jdbc.driver=com.mysql.jdbc.driver jdbc.url=jdbc\:mysql\: //localhost\:3306/test?useunicode=true&&characterencoding=utf-8 jdbc.username=root jdbc.password=root |
(2)log4j.properties
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
log4j.rootlogger=info,console,file #定義日志輸出目的地為控制臺 log4j.appender.console=org.apache.log4j.consoleappender log4j.appender.console.target=system.out #可以靈活地指定日志輸出格式,下面一行是指定具體的格式 log4j.appender.console.layout = org.apache.log4j.patternlayout log4j.appender.console.layout.conversionpattern=[%c] - %m%n #文件大小到達指定尺寸的時候產生一個新的文件 log4j.appender.file = org.apache.log4j.rollingfileappender #指定輸出目錄 log4j.appender.file.file = logs/ssm.log #定義文件最大大小 log4j.appender.file.maxfilesize = 10mb # 輸出所以日志,如果換成debug表示輸出debug以上級別日志 log4j.appender.file.threshold = all log4j.appender.file.layout = org.apache.log4j.patternlayout log4j.appender.file.layout.conversionpattern =[%p] [%d{yyyy-mm-dd hh\:mm\:ss}][%c]%m%n |
第七步:整合spring-mybatis.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
<?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" xmlns:mvc= "http://www.springframework.org/schema/mvc" xsi:schemalocation="http: //www.springframework.org/schema/beans http: //www.springframework.org/schema/beans/spring-beans-3.1.xsd http: //www.springframework.org/schema/context http: //www.springframework.org/schema/context/spring-context-3.1.xsd http: //www.springframework.org/schema/mvc http: //www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <!-- 自動掃描 --> <context:component-scan base- package = "com.ssm" /> <!-- 引入實現jdbc配置文件 --> <bean id= "propertyconfigurer" class = "org.springframework.beans.factory.config.propertyplaceholderconfigurer" > <property name= "location" value= "classpath:jdbc.properties" /> </bean> <!-- 2 .數據庫連接池 --> <bean id= "datasource" class = "org.apache.commons.dbcp.basicdatasource" destroy-method= "close" > <property name= "driverclassname" value= "${jdbc.driver}" /> <property name= "url" value= "${jdbc.url}" /> <property name= "username" value= "${jdbc.username}" /> <property name= "password" value= "${jdbc.password}" /> </bean> <!-- spring和mybatis整合,通過spring來管理mybatis的sqlsessionfactory會話工廠 --> <bean id= "sqlsessionfactory" class = "org.mybatis.spring.sqlsessionfactorybean" > <!-- 指定數據庫連接池引用 --> <property name= "datasource" ref= "datasource" /> <!-- 自動掃描mapping.xml文件 --> <property name= "mapperlocations" value= "classpath:com/ssm/mapper/*.xml" ></property> </bean> <!-- dao接口所在包名,spring會自動查找其下的類 --> <bean class = "org.mybatis.spring.mapper.mapperscannerconfigurer" > <property name= "basepackage" value= "com.ssm.dao" /> <property name= "sqlsessionfactorybeanname" value= "sqlsessionfactory" ></property> </bean> <!-- (事務管理)transaction manager, use jtatransactionmanager for global tx --> <bean id= "transactionmanager" class = "org.springframework.jdbc.datasource.datasourcetransactionmanager" > <property name= "datasource" ref= "datasource" /> </bean> </beans> |
第八步:建立測試類
經過以上步驟(log4j不配也沒影響),我們已經完成了spring和mybatis的整合,這樣我們就可以編寫一段測試代碼來試試是否成功了。
測試類在src/test/java中建立,如果測試成功,表示spring和mybatis已經整合成功了。輸出信息使用的是log4j打印到控制臺。
(1)testmybatis測試類
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
package ssm; import javax.annotation.resource; import org.apache.log4j.logger; import org.junit.test; import org.junit.runner.runwith; import org.springframework.test.context.contextconfiguration; import org.springframework.test.context.junit4.springjunit4classrunner; import com.ssm.model.user; import com.ssm.service.userservice; /*讓測試運行于spring測試環境*/ @runwith(springjunit4classrunner.class) /*用來指定加載的spring配置文件的位置,會加載默認配置文件*/ @contextconfiguration (locations = { "classpath:spring-mybatis.xml" }) public class testmybatis { @resource (name = "userservice" ) private userservice userservice; @test public void test1() { user user= new user(); user.setname( "張三" ); user.setpassword( "123" ); user user1 = userservice.getuserbyid(user); system.out.println(user1.tostring()); } } |
最后!關鍵看后臺輸出,也是見證奇跡的時候,如果輸出對象那說明你配置整合成功!
那接下來我們開始整合springmvc
第九步:配置springmvc.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
<?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" xmlns:mvc= "http://www.springframework.org/schema/mvc" xsi:schemalocation="http: //www.springframework.org/schema/beans http: //www.springframework.org/schema/beans/spring-beans-3.1.xsd http: //www.springframework.org/schema/context http: //www.springframework.org/schema/context/spring-context-3.1.xsd http: //www.springframework.org/schema/mvc http: //www.springframework.org/schema/mvc/spring-mvc-4.0.xsd"> <!-- 自動掃描該包,使springmvc認為包下用了 @controller 注解的類是控制器 --> <context:component-scan base- package = "com.ssm.controller" /> <!--避免ie執行ajax時,返回json出現下載文件 --> <bean id= "mappingjacksonhttpmessageconverter" class = "org.springframework.http.converter.json.mappingjacksonhttpmessageconverter" > <property name= "supportedmediatypes" > <list> <value>text/html;charset=utf- 8 </value> </list> </property> </bean> <!-- 啟動springmvc的注解功能,完成請求和注解pojo的映射 --> <bean class = "org.springframework.web.servlet.mvc.annotation.annotationmethodhandleradapter" > <property name= "messageconverters" > <list> <ref bean= "mappingjacksonhttpmessageconverter" /> <!-- json轉換器 --> </list> </property> </bean> <!-- 定義跳轉的文件的前后綴 ,視圖模式配置--> <bean class = "org.springframework.web.servlet.view.internalresourceviewresolver" > <!-- 這里的配置我的理解是自動給后面action的方法 return 的字符串加上前綴和后綴,變成一個 可用的url地址 --> <property name= "prefix" value= "/web-inf/jsp/" /> <property name= "suffix" value= ".jsp" /> </bean> <!-- 配置文件上傳,如果沒有使用文件上傳可以不用配置,當然如果不配,那么配置文件中也不必引入上傳組件包 --> <bean id= "multipartresolver" class = "org.springframework.web.multipart.commons.commonsmultipartresolver" > <!-- 默認編碼 --> <property name= "defaultencoding" value= "utf-8" /> <!-- 文件大小最大值 --> <property name= "maxuploadsize" value= "10485760000" /> <!-- 內存中的最大值 --> <property name= "maxinmemorysize" value= "40960" /> </bean> </beans> |
第十步:配置web.xml文件
這里面對spring-mybatis.xml的引入以及配置的spring-mvc的servlet就是為了完成ssm整合,之前2框架整合不需要在此處進行任何配置。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
<?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/javaee" xsi:schemalocation= "http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version= "3.0" > <display-name>archetype created web application</display-name> <!-- spring和mybatis的配置文件 --> <context-param> <param-name>contextconfiglocation</param-name> <param-value>classpath:spring-mybatis.xml</param-value> </context-param> <!-- 編碼過濾器 --> <filter> <filter-name>encodingfilter</filter-name> <filter- class >org.springframework.web.filter.characterencodingfilter</filter- class > <async-supported> true </async-supported> <init-param> <param-name>encoding</param-name> <param-value>utf- 8 </param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingfilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> <!-- spring監聽器 --> <listener> <listener- class >org.springframework.web.context.contextloaderlistener</listener- class > </listener> <!-- 防止spring內存溢出監聽器 --> <listener> <listener- class >org.springframework.web.util.introspectorcleanuplistener</listener- class > </listener> <!-- spring mvc servlet --> <servlet> <servlet-name>springmvc</servlet-name> <servlet- class >org.springframework.web.servlet.dispatcherservlet</servlet- class > <init-param> <param-name>contextconfiglocation</param-name> <param-value>classpath:springmvc.xml</param-value> </init-param> <load-on-startup> 1 </load-on-startup> <async-supported> true </async-supported> </servlet> <servlet-mapping> <servlet-name>springmvc</servlet-name> <!-- 此處可以可以配置成*. do ,對應struts的后綴習慣 --> <url-pattern>/</url-pattern> </servlet-mapping> <welcome-file-list> <welcome-file>/index.jsp</welcome-file> </welcome-file-list> </web-app> |
第十一步最后測試:
(1) 先寫login.jsp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
<%@ page language= "java" contenttype= "text/html; charset=utf-8" pageencoding= "utf-8" %> <html> <head> <title>用戶登錄:</title> </head> <body> <form action= "login" > <label>用戶名:</label> <input type= "text" id= "username" name= "username" ></input><br><br> <label>密碼:</label> <input type= "text" id= "password" name= "password" ></input><br><br> <input type= "submit" value= "登錄" /> </form> </body> </html> |
界面:
(2)在寫usercontroller
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
import javax.servlet.http.httpservletrequest; import org.springframework.stereotype.controller; import org.springframework.web.bind.annotation.requestmapping; import com.ssm.dao.userdao; import com.ssm.model.user; @controller public class usercontroller { @resource private userdao userdao; @requestmapping ( "/jsp/login" ) public string login(httpservletrequest request){ string username=request.getparameter( "username" ); string password=request.getparameter( "password" ); user user= new user(); //根據用戶名和學生查詢數據庫 user.setname(username); user.setpassword(password); user users=userdao.finduserbyid(user); //如果有學生就說明登錄成功 if (users!= null ){ return "susscss" ; } //這個jsp我沒有寫,大家知道就好,你們可以自己寫 return "err" ; } } |
(3)最后susscss.jsp
1
2
3
4
5
6
7
|
<%@ page language= "java" contenttype= "text/html; charset=utf-8" pageencoding= "utf-8" %> <html> <body> <p>用戶賬號密碼正確,登錄成功</p> </body> </html> |
完美!
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。
原文鏈接:http://www.cnblogs.com/qdhxhz/p/8032314.html