| 本篇文章主要內(nèi)容是介紹如何使用IntelliJ IDEA創(chuàng)建Spring + SpringMVC + MyBatis項(xiàng)目,下面會(huì)給出項(xiàng)目搭建的詳細(xì)步驟以及相關(guān)的配置文件。 
 1. 創(chuàng)建maven項(xiàng)目1.1  File -> New Module,進(jìn)入創(chuàng)建項(xiàng)目窗口。 1.2  點(diǎn)擊Next,填寫GroupId、ArtifactId和Version 1.3  接著下一步,這里需要注在Properties中添加一個(gè)參數(shù) archetypeCatalog=internal,不加這個(gè)參數(shù),在maven生成骨架的時(shí)候?qū)?huì)非常慢,有時(shí)候直接卡住。來自網(wǎng)上的解釋: archetypeCatalog表示插件使用的archetype元數(shù)據(jù),不加這個(gè)參數(shù)時(shí)默認(rèn)為remote,local,即中央倉庫archetype元數(shù)據(jù),由于中央 倉庫的archetype太多了所以導(dǎo)致很慢,指定internal來表示僅使用內(nèi)部元數(shù)據(jù)。 1.4  填寫Module name 1.5  生成maven的項(xiàng)目骨架之后,我們還需要手動(dòng)在 src/main 下創(chuàng)建 java目錄。現(xiàn)在可以直接編寫了,我把項(xiàng)目所需要的文件都編寫完成之后,項(xiàng)目的工程結(jié)構(gòu)如圖。       到此為止,項(xiàng)目的框架基本搭建完成,下面重點(diǎn)說一下項(xiàng)目的配置文件 2. 項(xiàng)目配置文件 2.1   這里使用maven來引入項(xiàng)目所需要的jar包,所以也就不需要手動(dòng)來管理jar包了。 pom.xml 
 <project xmlns="http://maven./POM/4.0.0" xmlns:xsi="http://www./2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven./POM/4.0.0 http://maven./maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.heitian.web</groupId>
  <artifactId>web-ssm</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>web-ssm Maven Webapp</name>
  <url>http://maven.</url>
  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
    <!-- spring版本號(hào) -->
    <spring.version>4.2.5.RELEASE</spring.version>
    <!-- mybatis版本號(hào) -->
    <mybatis.version>3.2.8</mybatis.version>
    <!-- mysql驅(qū)動(dòng)版本號(hào) -->
    <mysql-driver.version>5.1.29</mysql-driver.version>
    <!-- log4j日志包版本號(hào) -->
    <slf4j.version>1.7.18</slf4j.version>
    <log4j.version>1.2.17</log4j.version>
  </properties>
  <dependencies>
    <!-- 添加jstl依賴 -->
    <dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>1.2</version>
    </dependency>
    <dependency>
      <groupId>javax</groupId>
      <artifactId>javaee-api</artifactId>
      <version>7.0</version>
    </dependency>
    <!-- 添加junit4依賴 -->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <!-- 指定范圍,在測試時(shí)才會(huì)加載 -->
      <scope>test</scope>
    </dependency>
    <!-- 添加spring核心依賴 -->
    <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-context</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-aop</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>
    <!-- 添加mysql驅(qū)動(dòng)依賴 -->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>${mysql-driver.version}</version>
    </dependency>
    <!-- 添加數(shù)據(jù)庫連接池依賴 -->
    <dependency>
      <groupId>commons-dbcp</groupId>
      <artifactId>commons-dbcp</artifactId>
      <version>1.2.2</version>
    </dependency>
    <!-- 添加fastjson -->
    <dependency>
      <groupId>com.alibaba</groupId>
      <artifactId>fastjson</artifactId>
      <version>1.1.41</version>
    </dependency>
    <!-- 添加日志相關(guān)jar包 -->
    <dependency>
      <groupId>log4j</groupId>
      <artifactId>log4j</artifactId>
      <version>${log4j.version}</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>
    <!-- https:///artifact/com.fasterxml.jackson.core/jackson-core -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.8.0</version>
    </dependency>
    <!-- https:///artifact/com.fasterxml.jackson.core/jackson-databind -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.8.0</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>web-ssm</finalName>
  </build>
</project>
2.2   新建jdbc.properties文件 jdbc.properties 
 driverClasss=com.mysql.jdbc.Driver jdbcUrl=jdbc:mysql://localhost:3306/db_ssm?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull username=root password=root #定義初始連接數(shù) initialSize=0 #定義最大連接數(shù) maxActive=20 #定義最大空閑 maxIdle=20 #定義最小空閑 minIdle=1 #定義最長等待時(shí)間 maxWait=60000 2.3  新建log4j 配置文件 log4j.properties 
 log4j.rootLogger=INFO,Console,File
#控制臺(tái)日志
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=[%p][%t][%d{yyyy-MM-dd HH\:mm\:ss}][%C] - %m%n
#普通文件日志
log4j.appender.File=org.apache.log4j.RollingFileAppender
log4j.appender.File.File=logs/ssm.log
log4j.appender.File.MaxFileSize=10MB
#輸出日志,如果換成DEBUG表示輸出DEBUG以上級(jí)別日志
log4j.appender.File.Threshold=ALL
log4j.appender.File.layout=org.apache.log4j.PatternLayout
log4j.appender.File.layout.ConversionPattern=[%p][%t][%d{yyyy-MM-dd HH\:mm\:ss}][%C] - %m%n
2.4  新建springmvc配置文件 spring-mvc.xml 
 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www./schema/beans"
       xmlns:xsi="http://www./2001/XMLSchema-instance" xmlns:p="http://www./schema/p"
       xmlns:context="http://www./schema/context"
       xmlns:mvc="http://www./schema/mvc"
       xsi:schemaLocation="http://www./schema/beans
                        http://www./schema/beans/spring-beans-4.0.xsd
                        http://www./schema/context
                        http://www./schema/context/spring-context-4.0.xsd
                        http://www./schema/mvc
                        http://www./schema/mvc/spring-mvc-4.0.xsd">
    <!-- 自動(dòng)掃描  @Controller-->
    <context:component-scan base-package="com.heitian.ssm.controller"/>
    <!--避免IE執(zhí)行AJAX時(shí),返回JSON出現(xiàn)下載文件 -->
    <bean id="mappingJacksonHttpMessageConverter"
          class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
        <property name="supportedMediaTypes">
            <list>
                <value>text/html;charset=UTF-8</value>
            </list>
        </property>
    </bean>
    <!-- 啟動(dòng)SpringMVC的注解功能,完成請(qǐng)求和注解POJO的映射 -->
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
        <property name="messageConverters">
            <list>
                <ref bean="mappingJacksonHttpMessageConverter"/> <!-- JSON轉(zhuǎn)換器 -->
            </list>
        </property>
    </bean>
    <!-- 定義跳轉(zhuǎn)的文件的前后綴 ,視圖模式配置 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/" />
        <property name="suffix" value=".jsp"/>
    </bean>
    <!-- 文件上傳配置 -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!-- 默認(rèn)編碼 -->
        <property name="defaultEncoding" value="UTF-8"/>
        <!-- 上傳文件大小限制為31M,31*1024*1024 -->
        <property name="maxUploadSize" value="32505856"/>
        <!-- 內(nèi)存中的最大值 -->
        <property name="maxInMemorySize" value="4096"/>
    </bean>
</beans>2.5  新建spring和mybatis整合所需的配置文件 spring-mybatis.xml  
 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www./schema/beans"
       xmlns:xsi="http://www./2001/XMLSchema-instance"
       xmlns:context="http://www./schema/context" xmlns:tx="http://www./schema/tx"
       xsi:schemaLocation="http://www./schema/beans
                        http://www./schema/beans/spring-beans-3.1.xsd
                        http://www./schema/context
                        http://www./schema/context/spring-context-3.1.xsd
                        http://www./schema/tx
                        http://www./schema/tx/spring-tx.xsd">
    <!-- 自動(dòng)掃描 -->
    <context:component-scan base-package="com.heitian.ssm"/>
    <!-- 第一種方式:加載一個(gè)properties文件 -->
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="location" value="classpath:jdbc.properties"/>
    </bean>
    <!-- 第二種方式:加載多個(gè)properties文件
    <bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
        <property name="locations">
            <list>
                <value>classpath:jdbc.properties</value>
                <value>classpath:common.properties</value>
            </list>
        </property>
        <property name="fileEncoding" value="UTF-8"/>
    </bean>
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PreferencesPlaceholderConfigurer">
        <property name="properties" ref="configProperties"/>
    </bean>
    -->
    <!-- 配置數(shù)據(jù)源 -->
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
          destroy-method="close">
        <property name="driverClassName" value="${driverClasss}"/>
        <property name="url" value="${jdbcUrl}"/>
        <property name="username" value="${username}"/>
        <property name="password" value="${password}"/>
        <!-- 初始化連接大小 -->
        <property name="initialSize" value="${initialSize}"></property>
        <!-- 連接池最大數(shù)量 -->
        <property name="maxActive" value="${maxActive}"></property>
        <!-- 連接池最大空閑 -->
        <property name="maxIdle" value="${maxIdle}"></property>
        <!-- 連接池最小空閑 -->
        <property name="minIdle" value="${minIdle}"></property>
        <!-- 獲取連接最大等待時(shí)間 -->
        <property name="maxWait" value="${maxWait}"></property>
    </bean>
    <!-- mybatis和spring完美整合,不需要mybatis的配置映射文件 -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <!-- 自動(dòng)掃描mapping.xml文件 -->
        <property name="mapperLocations" value="classpath:mapping/*.xml"></property>
    </bean>
    <!-- DAO接口所在包名,Spring會(huì)自動(dòng)查找其下的類 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="basePackage" value="com.heitian.ssm.dao"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>
    </bean>
    <!-- (事務(wù)管理)transaction manager, use JtaTransactionManager for global tx -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!-- (事務(wù)管理)transaction manager, use JtaTransactionManager for global tx -->
    <tx:annotation-driven transaction-manager="transactionManager"/>
</beans>2.6  web.xml配置文件 web.xml 
 <?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java./xml/ns/javaee"
         xmlns:xsi="http://www./2001/XMLSchema-instance"
         xsi:schemaLocation="http://java./xml/ns/javaee
		  http://java./xml/ns/javaee/web-app_3_0.xsd"
         version="3.0">
    <display-name>web-ssm</display-name>
    
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-mybatis.xml</param-value>
    </context-param>
    <context-param>
        <param-name>log4jConfigLocation</param-name>
        <param-value>classpath:log4j.properties</param-value>
    </context-param>
    <!-- 編碼過濾器 -->
    <filter>
        <filter-name>encodingFilter</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>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    <!-- spring監(jiān)聽器 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <!-- 防止spring內(nèi)存溢出監(jiān)聽器,比如quartz -->
    <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:spring-mvc.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 形式 -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    <welcome-file-list>
        <welcome-file>/index.jsp</welcome-file>
    </welcome-file-list>
    <!-- session配置 -->
    <session-config>
        <session-timeout>15</session-timeout>
    </session-config>
</web-app>3. 項(xiàng)目配置和部署3.1   File -> Project Structure,進(jìn)入創(chuàng)建項(xiàng)目配置窗口。 3.2  創(chuàng)建一個(gè)Tomcat容器實(shí)例,并把項(xiàng)目部署進(jìn)去 
 
 3.3 項(xiàng)目所需配置好項(xiàng)目訪問的根路徑,然后啟動(dòng)Tomcat。 3.4  在瀏覽器地址欄中輸入:http://localhost:8080/web-ssm/user/showUser 
 3.5 項(xiàng)目所需看到圖中顯示效果,則表示項(xiàng)目搭建成功。 
 
 4. 值得注意的地方搭建好項(xiàng)目的框架之后,啟動(dòng)Tomcat,如果訪問 http://localhost:8080/user/showUser 出現(xiàn)如下錯(cuò)誤: 出現(xiàn)這個(gè)錯(cuò)誤是因?yàn)樯倭艘蕾嚨膉ar包,只要在pom文件中添加如下依賴即可。 
 <!-- https:///artifact/com.fasterxml.jackson.core/jackson-core -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>2.8.0</version>
    </dependency>
    <!-- https:///artifact/com.fasterxml.jackson.core/jackson-databind -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.8.0</version>
    </dependency>
 | 
|  |