SSM搭建實例(自認爲最詳細,最適合入門的教程,歷來沒用過SSM的那種)

在開始以前,須要說明一下遇到的一些問題,我相信這些問題是做爲一個開發者必須明白的,但遺憾的是,我沒有在國內網站中找到這些問題的答案。對於一個初學者,任何一點小問題都會致使調試失敗,而對於這種高度封裝,邏輯又很奇特的框架來講,第一個HelloWord就會更加艱難,因此我努力在這篇文章中講清楚,讓更多的入門者少走彎路。html

1.我應該選擇Eclipse仍是IDEA做爲開發工具?java

2.Maven的默認設置下載依賴時特別慢,如何更改和配置Maven的下載源?mysql

3.Maven在開發中扮演什麼樣的角色?web

4.Spring,Spring-MVC,MyBatis分別是在哪些文件中配置的?spring

5.Spring,Spring-MVC,MyBatis的版本如何選擇?sql

6.XML文件開頭的這些寫法是固定的嗎?是什麼意思?數據庫

7.哪些文件的文件名是能夠自定義的?哪些文件名是不能更改(即框架默認須要使用的)?apache

好了,這些問題是我在入門的時候遇到的一些很坑的問題,但願這篇文章或多或少可以幫您減小一些難度。api

本文將展現本項目中全部的相關文本和代碼,若是您按照本文的步驟沒有成功,我還準備了打包的.war文件,供您下載到本地觀察總結。您只須要將此.war文件下載到本地,使用eclipse選項中的File->Import功能,選擇.war文件導入到eclipse中即可以直接運行調試。下載地址:https://pan.baidu.com/s/1abDYj17wb44OJJxpA6iLWg 提取碼:8dmz ,後續補上CSDN的下載連接。瀏覽器

 


如下是一份整合SSM框架的實例:

1.開發工具的選擇:Eclipse。

請注意,Eclipse與IEDA都是很好的開發工具,我甚至認爲IDEA能爲咱們作的更多,但正是因爲IDEA爲咱們作了更多,使咱們不容易弄清楚其中的一些問題。作個不太恰當的比喻,使用Eclipse,就像是用記事本寫java代碼同樣,雖然稍微繁雜,可是更有助於咱們對於java的理解(若是您只會用eclipse寫Java代碼,您極可能不知道使用命令行對一個.java文件編譯成.class的過程),伴隨着咱們學習的深刻,IDEA可能會讓咱們更有效率。

注意:Eclipse有幾個類型的版本,請選擇可以開發Web的版本,因爲我如今網絡環境的關係,沒法訪問Eclipse的官網去截圖選擇哪個,可是隻要是有File->New->Dynamic Web Project這個選項,就是符合條件的Eclipse。

2.配置Maven。

Eclipse是自帶Maven的,可是因爲國外源下載速度太慢,咱們須要更換下載源,除非您的網絡很是優秀,不然您須要進行這一步的配置。

爲了讓你們更清楚Maven在項目中的做用和地位,咱們選擇手動下載一個新的Maven。地址:https://maven.apache.org/download.cgi

選擇下載紅框中的那個文件(版本不一樣不重要,可是要選擇Binary Zip archive),而後在本地的磁盤中選擇一個位置解壓,如我選擇解壓到D://apache-maven-3.6.3目錄,解壓後目錄以下:

新建一個文件夾responsity(這個文件夾是用來存放下載的依賴的jar包的,固然到時候也能夠選擇別的文件夾來存放,隨你意咯),找到conf目錄下的settings.xml用記事本或者其餘的文本編輯器打開:

找到localRepository標籤取消註釋(若是沒有就新增這一行)並設置成這樣(這裏的目錄就是存放要下載的依賴的目錄):

 

而後打開Eclipse,在Window->Preferences搜索Maven,選擇Installations,點擊Add

點擊Directory:

選擇剛纔解壓的Maven的目錄:D:\apache-maven-3.6.3

點擊Finish。

到此爲止,Maven的設置就已經完成了。


3、開始項目的搭建。

開始以前,先展現一下項目全部文件(目錄)以及結構

展開後是這樣:

其中target目錄,test目錄不須要管,有沒有無所謂。controller目錄及目錄下全部文件,dao目錄及目錄下全部文件,webapp下的pages目錄及目錄下全部文件,database.properties,log4j.properties,spring.xml是本身新建的,其餘部分是項目自動生成的。

1.建立項目:

選擇File->New->Maven Project,點擊Next:

選擇maven-archetype-webapp,點擊Next:

填入Group Id和Artifact Id,其中Group Id是組織名稱,Artifact Id是項目名稱(都可以自定義),點擊Finish:

 

2.打開pom.xml:

<project></project>標籤下添加:

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
	<!-- 各依賴的版本 -->
    <junit.version>3.8.1</junit.version>
    <lombok.version>1.18.2</lombok.version>
    <jetty.version>9.4.12.v20180830</jetty.version>
    <spring.version>5.0.9.RELEASE</spring.version>
    <JavaLib.version>1.0.4.RELEASE</JavaLib.version>
    <slf4j.version>1.8.0-beta2</slf4j.version>
    <log4j.version>2.13.0</log4j.version>
    
    <mybatis.version>3.4.6</mybatis.version>
    <mybatis-spring.version>2.0.3</mybatis-spring.version>
    <mysql-connector.version>8.0.18</mysql-connector.version>
</properties>

<dependencies></dependencies>下添加(若是有junit的話,覆蓋掉或者保留原來的均可以):

<dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>${junit.version}</version>
      <scope>test</scope>
    </dependency>
    
    <dependency>
	    <groupId>org.apache.logging.log4j</groupId>
	    <artifactId>log4j-core</artifactId>
	    <version>${log4j.version}</version>
	</dependency>

 	<dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.1</version>
     </dependency>
     
     <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>${log4j.version}</version>
     </dependency>

<!-- MyBatis 依賴 -->	
	<dependency>
	    <groupId>org.mybatis</groupId>
	    <artifactId>mybatis</artifactId>
	    <version>${mybatis.version}</version>
   </dependency>

	<dependency>
	    <groupId>org.mybatis</groupId>
	    <artifactId>mybatis-spring</artifactId>
	    <version>${mybatis-spring.version}</version>
	</dependency>

<!-- MySQL數據庫的JDBC驅動 -->
	<dependency>
	    <groupId>mysql</groupId>
	    <artifactId>mysql-connector-java</artifactId>
	    <version>${mysql-connector.version}</version>
	</dependency>

<!-- spring 核心依賴 -->
    <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-core</artifactId>
         <version>${spring.version}</version>
    </dependency>

<!-- spring ioc依賴 -->
    <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-beans</artifactId>
         <version>${spring.version}</version>
    </dependency>

<!-- spring aop依賴 -->
    <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-aop</artifactId>
         <version>${spring.version}</version>
    </dependency>

<!-- spring 擴展依賴 -->
     <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-context</artifactId>
         <version>${spring.version}</version>
     </dependency>

<!-- spring web相關依賴 -->
     <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-web</artifactId>
         <version>${spring.version}</version>
     </dependency>
     <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-webmvc</artifactId>
         <version>${spring.version}</version>
     </dependency>

<!-- spring test相關依賴 -->
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-test</artifactId>
          <version>${spring.version}</version>
       </dependency>
        
      <dependency>
		  <groupId>org.springframework</groupId>
		  <artifactId>spring-jdbc</artifactId>
		  <version>${spring.version}</version>
      </dependency>
<!-- spring依賴  end-->

完整的pom.xml文件以下(其中文件開頭的「4.0.0」表明相關的版本,這個版本號請以您本地項目下生成的爲準,不然可能會報錯):

<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>xiaoxiang</groupId>
  <artifactId>test</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>test Maven Webapp</name>
  <url>http://maven.apache.org</url>
  
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
	<!-- 各依賴的版本 -->
    <junit.version>3.8.1</junit.version>
    <lombok.version>1.18.2</lombok.version>
    <jetty.version>9.4.12.v20180830</jetty.version>
    <spring.version>5.0.9.RELEASE</spring.version>
    <JavaLib.version>1.0.4.RELEASE</JavaLib.version>
    <slf4j.version>1.8.0-beta2</slf4j.version>
    <log4j.version>2.13.0</log4j.version>
    
    <mybatis.version>3.4.6</mybatis.version>
    <mybatis-spring.version>2.0.3</mybatis-spring.version>
    <mysql-connector.version>8.0.18</mysql-connector.version>
</properties>

  
  <dependencies>
  
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>${junit.version}</version>
      <scope>test</scope>
    </dependency>
    
    <dependency>
	    <groupId>org.apache.logging.log4j</groupId>
	    <artifactId>log4j-core</artifactId>
	    <version>${log4j.version}</version>
	</dependency>

 	<dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.1</version>
     </dependency>
     
     <dependency>
        <groupId>org.apache.logging.log4j</groupId>
        <artifactId>log4j-api</artifactId>
        <version>${log4j.version}</version>
     </dependency>

<!-- MyBatis 依賴 -->	
	<dependency>
	    <groupId>org.mybatis</groupId>
	    <artifactId>mybatis</artifactId>
	    <version>${mybatis.version}</version>
   </dependency>

	<dependency>
	    <groupId>org.mybatis</groupId>
	    <artifactId>mybatis-spring</artifactId>
	    <version>${mybatis-spring.version}</version>
	</dependency>

<!-- MySQL數據庫的JDBC驅動 -->
	<dependency>
	    <groupId>mysql</groupId>
	    <artifactId>mysql-connector-java</artifactId>
	    <version>${mysql-connector.version}</version>
	</dependency>

<!-- spring 核心依賴 -->
    <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-core</artifactId>
         <version>${spring.version}</version>
    </dependency>

<!-- spring ioc依賴 -->
    <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-beans</artifactId>
         <version>${spring.version}</version>
    </dependency>

<!-- spring aop依賴 -->
    <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-aop</artifactId>
         <version>${spring.version}</version>
    </dependency>

<!-- spring 擴展依賴 -->
     <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-context</artifactId>
         <version>${spring.version}</version>
     </dependency>

<!-- spring web相關依賴 -->
     <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-web</artifactId>
         <version>${spring.version}</version>
     </dependency>
     <dependency>
         <groupId>org.springframework</groupId>
         <artifactId>spring-webmvc</artifactId>
         <version>${spring.version}</version>
     </dependency>

<!-- spring test相關依賴 -->
      <dependency>
          <groupId>org.springframework</groupId>
          <artifactId>spring-test</artifactId>
          <version>${spring.version}</version>
       </dependency>
        
      <dependency>
		  <groupId>org.springframework</groupId>
		  <artifactId>spring-jdbc</artifactId>
		  <version>${spring.version}</version>
      </dependency>
<!-- spring依賴  end-->

  </dependencies>
  <build>
    <finalName>test</finalName>
  </build>
</project>

3.配置Spring,Spring-MVC

打開src/main/webapp/WEB-INF/web.xml文件:

在<display-name></display-name>標籤後添加內容:

<!-- 統一編碼爲UTF-8 不然在返回中文字符串時可能會亂碼  -->
<filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 統一編碼問題結束 -->

<!-- 接入Spring-MVC和Spring,設置後全部訪問的請求會被Spring-MVC攔截處理 -->
<servlet>
    <servlet-name>mvc-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <!-- 這裏的classpath:spring.xml對應於項目目錄下的src/resources/spring.xml -->
        <param-value>classpath:spring.xml</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <!-- url-pattern中的/表示匹配全部的請求,也能夠設置攔截特定的請求給Spring處理 -->
    <url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 配置Spring-MVC與Spring結束 -->

完整的web.xml文件內容以下(其中的「2.3」版本號請保持您本地自動生成的版本號爲準,不建議覆蓋掉文件開頭部分,不然可能會報錯)

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
	
  <display-name>Archetype Created Web Application</display-name>
  
<!-- 統一編碼爲UTF-8 不然在返回中文字符串時可能會亂碼  -->
<filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
    <init-param>
        <param-name>forceEncoding</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<!-- 統一編碼問題結束 -->

<!-- 接入Spring-MVC和Spring,設置後全部訪問的請求會被Spring-MVC攔截處理 -->
<servlet>
    <servlet-name>mvc-dispatcher</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <!-- 這裏的classpath:spring.xml對應於項目目錄下的src/resources/spring.xml -->
        <param-value>classpath:spring.xml</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>mvc-dispatcher</servlet-name>
    <!-- url-pattern中的/表示匹配全部的請求,也能夠設置攔截特定的請求給Spring處理 -->
    <url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 配置Spring-MVC與Spring結束 -->

	<welcome-file-list>
	 		<welcome-file>/</welcome-file>
	</welcome-file-list>
	
</web-app>

4.配置MyBatis

src/main/resources目錄下新建spring.xml(該文件名能夠自定義,可是須要在web.xml中對應修改綁定的文件名,web.xml中相關位置有註釋),向其中寫入內容(不管您本地spring,mybatis使用的哪一個版本,該文件中的內容都無需爲版本問題而變更。該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/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/mvc
       http://www.springframework.org/schema/mvc/spring-mvc.xsd
       http://www.springframework.org/schema/context
       http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/tx
       http://www.springframework.org/schema/tx/spring-tx.xsd">
<!-- 注意這裏的寫法,無論spring是什麼版本,這裏都這麼些都行 -->

 <!-- spring與Spring-MVC的相關設置開始 -->
<!-- 開啓Spring-MVC註解模式,便可以在Java代碼中使用@GetMapping等內容 -->
<mvc:annotation-driven >
	<mvc:message-converters register-defaults="true">
          <bean class="org.springframework.http.converter.StringHttpMessageConverter">
            <property name="supportedMediaTypes" value="text/html;charset=UTF-8"/>
          </bean>
   </mvc:message-converters>
</mvc:annotation-driven>

<!--向容器自動注入配置-->
<context:annotation-config />

<!--將靜態資源交由默認的servlet處理-->
<mvc:default-servlet-handler />

<!-- 設置相關Bean代碼的位置,這裏的controller對應於項目目錄src/main/java/controller,能夠綁定自定義包名,spring會自動掃描該目錄下全部的.java文件 -->
<context:component-scan base-package="controller" />


<!-- 配置視圖解析器,如如今的配置意思爲:若是dao包下的java返回了字符串index,實際上在瀏覽器中會跳轉到/pages/index.jsp文件 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
      id="internalResourceViewResolver">
    <!-- 前綴 -->
    <property name="prefix" value="/pages/" />
    <!-- 後綴 -->
    <property name="suffix" value=".jsp" />
</bean>
 <!-- spring與Spring-MVC的相關設置結束 -->

<!-- MyBatis設置開始 -->
<!-- 引入數據庫屬性文件,其中的classpath:database.properties對應於項目目錄src/main/resources/database.properties文件 -->
    <context:property-placeholder location="classpath:database.properties" />
    
    <!--配置數據源 :這裏使用的是jdbc數據源,也能夠選擇其餘數據源,可是寫法有點不太同樣,具體百度就行,這裏的${driver}對應於database.properties裏的driver=com.mysql.cj.jdbc.Driver,其餘變量同理 -->
    <bean id="jdbcDataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${driver}" />
        <property name="url" value="${url}" />
        <property name="username" value="${user}" />
        <property name="password" value="${password}" />
    </bean>
    
    <!-- 配置sqlSessionFactoryBean 這個Bean是產生數據庫鏈接的Bean,其中的jdbcDataSource名稱對應於上方的 <bean id='jdbcDataSource'....-->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <!-- 數據源 -->
        <property name="dataSource" ref="jdbcDataSource"></property>
        <!-- 別名 
        <property name="typeAliasesPackage" value="com.zr.activiti.entity"></property>-->
        
        <!-- 掃描src/main/resources/mapper目錄下的全部xml文件 -->
        <property name="mapperLocations" value="classpath:mapper/*.xml" />
    </bean>
    
    <!-- 自動掃描對象關係映射 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!--指定會話工廠,若是當前上下文中只定義了一個則該屬性可省去 -->
        <!-- <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property> -->
        <!-- 設置dao包路徑,dao對應於項目目錄src/main/java/dao,你可使用分號或逗號 做爲分隔符設置多於一個的包路徑 -->
         <property name="basePackage" value="dao" />
    </bean>
    
    <!--聲明式事務管理 -->
    <!--定義事物管理器,由spring管理事務 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="jdbcDataSource"></property>
    </bean>
    
    <!--支持註解驅動的事務管理,指定事務管理器 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>
<!-- MyBatis設置結束 -->

</beans>

5.數據庫源的配置與log4j的配置

src/main/resources目錄下新建database.properties,寫入內容(本文件無其餘任何內容):

user=xiaoxiang
password=123456
driver=com.mysql.cj.jdbc.Driver
url=jdbc:mysql://localhost:3306/tank?useUnicode=true&useSSL=true&characterEncoding=utf-8&serverTimezone=GMT

src/main/resources目錄下新建log4j.properties,寫入內容(本文件無其餘任何內容):

# +======================================================================+#
log4j.rootLogger=${log4j.log.level},${log4j.log.target}
log4j.addivity.org.apache=true
# +======================================================================+#
# | [target] - Console
# +----------------------------------------------------------------------+#
log4j.appender.CONSOLE=org.apache.log4j.ConsoleAppender
log4j.appender.CONSOLE.Threshold=${log4j.log.level}
log4j.appender.CONSOLE.Encoding=${log4j.log.encoding}
log4j.appender.CONSOLE.Target=System.out
log4j.appender.CONSOLE.layout=${log4j.log.layout}
log4j.appender.CONSOLE.layout.ConversionPattern=${log4j.log.layout.pattern}
# +======================================================================+#
# | [target] - FILE
# +----------------------------------------------------------------------+#
log4j.appender.FILE=org.apache.log4j.RollingFileAppender
log4j.appender.FILE.Threshold=${log4j.log.level}
log4j.appender.FILE.Encoding=${log4j.log.encoding}
log4j.appender.FILE.File=${log4j.log.dir}/runtime.log
log4j.appender.FILE.Append=true
log4j.appender.FILE.MaxFileSize=2048KB
log4j.appender.FILE.MaxBackupIndex=10
log4j.appender.FILE.layout=${log4j.log.layout}
log4j.appender.FILE.layout.ConversionPattern=${log4j.log.layout.pattern}

# +======================================================================+#
# | log4j config
# +----------------------------------------------------------------------+#
log4j.log.dir=logs/
#log4j.log.level=ALL,TRACE,DEBUG,INFO,WARN,ERROR,FATAL,OFF
log4j.log.level=DEBUG
#log4j.log.target=CONSOLE,FILE,DATABASE,EMAIL,SOCKET
log4j.log.target=CONSOLE,FILE
log4j.log.encoding=UTF-8
log4j.log.layout=org.apache.log4j.PatternLayout
log4j.log.layout.pattern=[%d %r] [%-5p] [%t] [%l] [%m]%n
# +======================================================================+#

6.建立相關測試用的類和XML,JSP(或者html)

src/main/resources目錄下新建目錄mapper(該目錄名稱能夠自定義,可是須要在spring.xml中對應修改綁定的名稱,spring.xml中相關位置有註釋),而後新建文件test.xml(該文件名稱能夠自定義,自定義後不須要進行任何其餘操做)。該文件內容以下:

<?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:指定本xml對應的java類,其中的dao.TestDao對應於項目文件src/main/java/dao/TestDao.java  -->
  <mapper namespace="dao.TestDao">
	<!-- 這裏的selectCount對應於TestDao類中selectCount函數,輸入有參數的狀況另外百度便可,下面有一些示例 -->
	<select id="selectCount" resultType="int">
		select count(*) from damage;
	</select>
	<!--  
	<select id="selectList" resultType="user">
		select * from smbms_user
	</select>
	-->
	<!--  
	<select id="selectByUserNameAndRole" parameterType="User" resultType="user">
		select * from smbms_user  where smbms_user.userName like '%${userName}%' and smbms_user.userRole = #{userRole}
	</select>
	-->
	<!-- mapper 傳入參數 -->
	<!--  
	<select id="selectByUserNameAndRoleMap" parameterType="map" resultType="user">
		select * from smbms_user  where smbms_user.userName like '%${uname}%' and smbms_user.userRole = #{urole}
	</select>
	<select id="selectByPrimary" parameterType="long" resultType="user">
		select * from smbms_user where id=#{id};
	</select>
	-->
</mapper>

src/main/java目錄下新建目錄controller(該包名能夠自定義,可是須要在spring.xml中對應修改綁定的相關名稱,spring.xml中相關位置有註釋),而後新建類Control.java,(該類名能夠自定義,更改後無需其餘任何修改)文件內容以下:

package controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import dao.TestDao;
@Controller
public class Control {
	@Autowired
	private TestDao testDao;
	
	@GetMapping("/")
    public String index() {
		System.out.println("終於到了這裏了,結果是:"+testDao.selectCount());
		
        return "index";
    }
	
	@GetMapping("/abc")
    public String abc() {
		System.out.println("終於到了這裏了");
        return "index";
    }
	
	@GetMapping("/abcd")
	@ResponseBody
	public String abcd() {
		return "返回了一個字符串";
	}
}

須要解釋一下的是:

在瀏覽器中輸入localhost:8080/test時,會使用index函數處理;

輸入localhost:8080/test/abc時,會使用abc函數處理;

同理,輸入localhost:8080/test/abcd時,會使用abcd函數處理。

這樣說您應該能夠明白@GetMapping起到的做用了。


最後,咱們須要在src/main/webapp目錄下新建pages文件夾(該文件夾名稱能夠自定義,可是須要對應更改web.xml中綁定的名稱,web.xml中對應位置有註釋),而後新建文件index.jsp(該文件名能夠自定義,可是須要對應更改Control.javaindex函數renturn值,index.jsp內容以下:

<html>
<body>
<h2>Hello World!</h2>
</body>
</html>

到目前爲止,項目下全部文件都已經配置完畢,能夠啓動測試了,項目啓動後在瀏覽器中輸入localhost:8080/test/,觀察瀏覽器返回值和控制檯,若是出現如下結果,說明您成功了!

  • 須要注意的是,咱們在MySQL數據庫中新建了一個名爲tank的數據庫,而且在該數據庫下新建了一張數據庫表damage,並且該表中有255100條數據。項目中更改數據庫名稱請到src/main/resources/database.properties中,更改查詢的表名請到src/main/resources/test.xml中。若您使用的不是MySQL數據庫,請到pom.xml中更改對應的JDBC驅動依賴,且更改src/main/resources/database.properties中對應的相關內容,Good Luck !

 文章最後,咱們須要回顧一下項目的運行邏輯和數據傳遞過程。我也是剛剛搭建成功,因此對於其中遇到的一些問題印象還比較深入,同時伴隨着的是沒有對該框架一個獨到並且客觀的認識,因此一下內容僅僅是我目前的一些見解,可能有些錯誤,望讀者自行甄辨,以避免誤人子弟。

  • MyBatis是用來簡化數據庫操做的。因此其實SSM框架並非說是一個總體,您徹底能夠只用其中的SS部分,不用M部分,也就是說不添加MyBatis的依賴,不進行相關的MyBatis的配置操做,項目也是沒有問題的。
  • 對於瀏覽器請求到返回數據的傳遞過程,應該是這樣子的:首先瀏覽器的一個網址被Tomcat服務器定位到對應的項目後,該請求被Spring攔截,而後在controller的全部.java中搜索對應的處理函數,該函數處理之後會返回響應內容(字符串,文本等數據)。而在處理該請求的函數中,咱們有可能須要向數據庫查詢數據,這時候就須要使用MyBatis了。
  • 能夠觀察到的是,Control.java中並無New TestDao()的語句出現,可是在index()函數中卻直接使用了testdao.selectCount()調用,這就說明MyBatis幫咱們後臺實例化了testdao,而@AutoWired應該就是通知MyBatis這個變量須要交給它實例化的標誌。
  • 咱們在selectCount()函數中並無調用JDBC的任何API,卻執行了test.xml中的一段SQL代碼:select count(*) from damage;說明selectCount函數與該SQL代碼綁定了,這也應該是MyBatis幫助咱們作到的。而其對應關係在test.xml中應該表現得很清晰。
  • Maven在項目中僅僅起到了與pom.xml綁定,而後下載pom.xml中配置的依賴jar包的做用。也就是說,若是您有足夠的精力,能夠嘗試手動獲取須要的jar包而後放置到項目對應的目錄下,可是我想這會比配置使用Maven繁雜得多。