SSM框架整合教程(Spring+SpringMVC+MyBatis)

前言:

本文的目的:搭建一个基于maven的Spring+SpringMVC+MyBatis的项目工程。

本文的环境基础为:windows10 + maven3.0.4 + jdk1.7 + mysql5.5

本文所搭建好的maven项目下载地址:https://download.csdn.net/download/qq_25646191/10420107


一、安装maven

1.首先下载Maven安装包-3.0.4-已配置好阿里云镜像

下载地址:http://download.csdn.net/download/qq_25646191/10170569

2、然后下载eclipse-jee-mars-2-win32-x86_64,

链接:https://pan.baidu.com/s/1kXejKdp 密码:7zbw

备注:如果自己已有maven和eclipse,可忽略这两步。

3.配置环境变量:

(1)右键我的电脑-》属性-》高级系统设置-》环境变量(高级页签)-》新建环境变量



(2)编辑path变量,添加maven的路径:%MAVEN_HOME%\bin




(3)设置完以上环境变量,打开cmd,输入mvn -version进行测试,如下图则表示配置成功



二、在eclipse中配置maven

打开eclipse,Windows-》preferences,进行如下配置,如图我本地的maven仓库位置

在D:/build-env/mavenRepo(由Local Repository (from merged user..)下面的路径可知)




三、Eclipse使用maven创建web项目

1.创建一个maven项目

(1)File->New->Other...


(2)如图操作



(3) 选中maven-archetyoe-webapp



(4)输入组名和项目名称



2、按照上面教程,即可创建出一个Maven项目,项目结构如下图



3、此时应该有的src/main/java和src/test/java目录并没有出现,原因是隐藏着,

     当然这样隐藏着非常不方便,所以还是要放出来,解决方法:

     选中项目->右键选择Build Path->Configure Build Path..

     


     按下图知识进行配置

      


    切换jdk

     


   点击Finish,之后点击ok,左侧显示正常,如下图:

   



       4、此时index.jsp报错,原因是缺少javaee-api的jar包依赖

        


解决方案:pom文件如图添加依赖,保存之后,自动下载依赖,不再报错







4.搭建Spring+SpringMVC+Mybatis框架

4-1、修改pom.xml后保存会自动下载,存放在之前配置的本地仓库中,我本机的是:D:/build-env/mavenRepo文件夹(由第二步可知)

  pom.xml

<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.myself</groupId>
  <artifactId>ssmTest</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>ssmTest Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <!-- 用来设置版本号 -->  
  <properties>  
      <srping.version>4.0.2.RELEASE</srping.version>  
      <mybatis.version>3.2.8</mybatis.version>  
      <slf4j.version>1.7.12</slf4j.version>  
      <log4j.version>1.2.17</log4j.version>  
  </properties>  
  <!-- 用到的jar包 -->  
  <dependencies>  
	  <dependency>  
	     <groupId>commons-lang</groupId>
	     <artifactId>commons-lang</artifactId>  
	     <version>2.3</version>  
	  </dependency>  
      <!-- 单元测试 -->  
      <dependency>  
          <groupId>junit</groupId>  
          <artifactId>junit</artifactId>  
          <version>4.11</version>  
          <!-- 表示开发的时候引入,发布的时候不会加载此包 -->  
          <scope>test</scope>  
      </dependency>  
      <!-- java ee包 -->  
      <dependency>  
          <groupId>javax</groupId>  
          <artifactId>javaee-api</artifactId>  
          <version>7.0</version>  
      </dependency>  
      <!-- spring框架包 start -->  
      <dependency>  
          <groupId>org.springframework</groupId>  
          <artifactId>spring-test</artifactId>  
          <version>${srping.version}</version>  
      </dependency>  
      <dependency>  
          <groupId>org.springframework</groupId>  
          <artifactId>spring-core</artifactId>  
          <version>${srping.version}</version>  
      </dependency>  
      <dependency>  
          <groupId>org.springframework</groupId>  
          <artifactId>spring-oxm</artifactId>  
          <version>${srping.version}</version>  
      </dependency>  
      <dependency>  
          <groupId>org.springframework</groupId>  
          <artifactId>spring-tx</artifactId>  
          <version>${srping.version}</version>  
      </dependency>  
      <dependency>  
          <groupId>org.springframework</groupId>  
          <artifactId>spring-jdbc</artifactId>  
          <version>${srping.version}</version>  
      </dependency>  
      <dependency>  
          <groupId>org.springframework</groupId>  
          <artifactId>spring-aop</artifactId>  
          <version>${srping.version}</version>  
      </dependency>  
      <dependency>  
          <groupId>org.springframework</groupId>  
          <artifactId>spring-context</artifactId>  
          <version>${srping.version}</version>  
      </dependency>  
      <dependency>  
          <groupId>org.springframework</groupId>  
          <artifactId>spring-context-support</artifactId>  
          <version>${srping.version}</version>  
      </dependency>  
      <dependency>  
          <groupId>org.springframework</groupId>  
          <artifactId>spring-expression</artifactId>  
          <version>${srping.version}</version>  
      </dependency>  
      <dependency>  
          <groupId>org.springframework</groupId>  
          <artifactId>spring-orm</artifactId>  
          <version>${srping.version}</version>  
      </dependency>  
      <dependency>  
          <groupId>org.springframework</groupId>  
          <artifactId>spring-web</artifactId>  
          <version>${srping.version}</version>  
      </dependency>  
      <dependency>  
          <groupId>org.springframework</groupId>  
          <artifactId>spring-webmvc</artifactId>  
          <version>${srping.version}</version>  
      </dependency>  
      <dependency>  
          <groupId>org.springframework</groupId>  
          <artifactId>spring-aspects</artifactId>  
          <version>${srping.version}</version>  
      </dependency>  
      <!-- spring框架包 end -->  
      <!-- mybatis框架包 start -->  
      <dependency>  
          <groupId>org.mybatis</groupId>  
          <artifactId>mybatis</artifactId>  
          <version>${mybatis.version}</version>  
      </dependency>  
      <dependency>  
          <groupId>org.mybatis</groupId>  
          <artifactId>mybatis-spring</artifactId>  
          <version>1.2.2</version>  
      </dependency>  
      <!-- mybatis框架包 end -->  
      <!-- 数据库驱动 -->  
      <dependency>  
          <groupId>mysql</groupId>  
          <artifactId>mysql-connector-java</artifactId>  
          <version>5.1.35</version>  
      </dependency>  
      <!-- 导入dbcp的jar包,用来在applicationContext.xml中配置数据库 -->  
      <dependency>  
          <groupId>commons-dbcp</groupId>  
          <artifactId>commons-dbcp</artifactId>  
          <version>1.4</version>  
      </dependency>  
      <!-- jstl标签类 -->  
      <dependency>  
          <groupId>jstl</groupId>  
          <artifactId>jstl</artifactId>  
          <version>1.2</version>  
      </dependency>  
      <dependency>  
          <groupId>taglibs</groupId>  
          <artifactId>standard</artifactId>  
          <version>1.1.2</version>  
      </dependency>  
      <!-- log start -->  
      <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>com.alibaba</groupId>  
          <artifactId>fastjson</artifactId>  
          <version>1.2.6</version>  
      </dependency>  
      <dependency>  
          <groupId>org.codehaus.jackson</groupId>  
          <artifactId>jackson-mapper-asl</artifactId>  
          <version>1.9.13</version>  
      </dependency>  
      
      <dependency>  
  	      <groupId>com.fasterxml.jackson.core</groupId>  
  		  <artifactId>jackson-core</artifactId>  
  		  <version>2.5.2</version>  
	  </dependency>  
	  <dependency>  
	      <groupId>com.fasterxml.jackson.core</groupId>  
	      <artifactId>jackson-databind</artifactId>  
	      <version>2.5.2</version>  
	  </dependency> 
      <!-- 上传组件包 start -->  
      <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.10</version>  
      </dependency>  
      <!-- 上传组件包 end -->  

      <!-- AL相关添加 -->  
      <dependency>  
          <groupId>net.sourceforge.jexcelapi</groupId>  
          <artifactId>jxl</artifactId>  
          <version>2.6</version>  
      </dependency>  
      <dependency>  
          <groupId>org.apache.poi</groupId>  
          <artifactId>poi</artifactId>  
          <version>3.8</version>  
      </dependency>  
      <dependency>  
          <groupId>org.apache.poi</groupId>  
          <artifactId>poi-ooxml</artifactId>  
          <version>3.9</version>  
      </dependency>  
      <!-- AL相关添加 -->  
  </dependencies>  

  <build>  
      <finalName>ssmTest</finalName>  
      <plugins>  
          <plugin>  
              <groupId>org.apache.maven.plugins</groupId>  
              <artifactId>maven-compiler-plugin</artifactId>  
              <version>2.3.2</version>  
              <configuration>
                  <source>1.7</source>  
                  <target>1.7</target>  
              </configuration>  
          </plugin>  
      </plugins>  
  </build>  
</project>

4-2、在src/main/resources下添加如下配置文件

jdbc.properties,第一行的driver最后面多了个空格,请注意

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=UTF-8
username=root
password=root
#定义初始连接数   
initialSize=0
#定义最大连接数  
maxActive=20
#定义最大空闲  
maxIdle=20
#定义最小空闲  
minIdle=1
#定义最长等待时间 
maxWait=60000

log4j.properties

### set log levels
log4j.rootLogger=info,stdout,D,R

### 输出到控制台
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target=System.out
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss,SSS} [%c:%L]-[%p] %m%n

### 输出到日志文件
log4j.appender.D=org.apache.log4j.DailyRollingFileAppender
## 异常日志文件名
log4j.appender.D.File=/data/logs/ssmTest/common/common.log
log4j.appender.D.DatePattern='.'yyyy-MM-dd
log4j.appender.D.Append = true
## 输出INFO级别以上的日志
log4j.appender.D.Threshold=INFO
log4j.appender.D.layout=org.apache.log4j.PatternLayout
log4j.appender.D.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} [%c:%L]-[%p] %m%n

### 保存异常信息到单独文件
log4j.appender.R = org.apache.log4j.DailyRollingFileAppender
## 异常日志文件名
log4j.appender.R.File = /data/logs/ssmTest/error/error.log
log4j.appender.R.DatePattern='.'yyyy-MM-dd
log4j.appender.R.Append = true
## 只输出ERROR级别以上的日志!!!
log4j.appender.R.Threshold= ERROR
log4j.appender.R.layout = org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern =%-d{yyyy-MM-dd HH:mm:ss} [%c:%L]-[%p] %m%n

4-3、在src/main/resources下新建spring文件夹,并添加如下配置文件
applicationContext.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: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:annotation-config />  
      
    <!-- 自动扫描 -->  
    <context:component-scan base-package="com.myself.ssmTest" />  
      
    <!-- 导入DAO配置 -->  
    <import resource="spring-dao.xml"/>  
      
    <!-- 导入数据库配置 -->  
    <import resource="spring-db.xml"/>  
      
    <!-- 导入数据库配置 -->  
    <import resource="spring-tx.xml"/>  
      
</beans> 

spring-dao.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: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">  
                          
                          
    <!-- DAO接口所在包名,Spring会自动查找其下的类 -->  
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
        <!--basePackage指定要扫描的包,在此包之下的映射器都会被搜索到。  
                                     可指定多个包,包与包之间用逗号或分号分隔-->  
        <property name="basePackage" value="com.myself.ssmTest.dao" />  
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>  
    </bean>                         
                          
</beans> 

spring-db.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: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">  
  
    <!-- 引入配置文件 -->  
    <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
        <property name="location" value="classpath:jdbc.properties" />  
    </bean>  
      
    <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">  
        <property name="driverClassName" value="${driver}" />  
        <property name="url" value="${url}" />  
        <property name="username" value="${username}" />  
        <property name="password" value="${password}" />  
        <!-- 初始化连接大小 -->  
        <property name="initialSize" value="${initialSize}"></property>  
        <!-- 连接池最大数量 -->  
        <property name="maxActive" value="${maxActive}"></property>  
        <!-- 连接池最大空闲 -->  
        <property name="maxIdle" value="${maxIdle}"></property>  
        <!-- 连接池最小空闲 -->  
        <property name="minIdle" value="${minIdle}"></property>  
        <!-- 获取连接最大等待时间 -->  
        <property name="maxWait" value="${maxWait}"></property>  
    </bean>  
  
    <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->  
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
        <property name="dataSource" ref="dataSource" />  
        <!-- 自动扫描mapping.xml文件 -->  
        <property name="mapperLocations" value="classpath:mybatis/sqlmap/*.xml"></property>  
    </bean>  
      
</beans>

spring-tx.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:p="http://www.springframework.org/schema/p"  
    xmlns:context="http://www.springframework.org/schema/context"  
    xmlns:aop="http://www.springframework.org/schema/aop"  
    xmlns:tx="http://www.springframework.org/schema/tx"  
    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/aop   
                        http://www.springframework.org/schema/aop/spring-aop-3.1.xsd  
                        http://www.springframework.org/schema/tx  
                        http://www.springframework.org/schema/tx/spring-tx-3.1.xsd">  
  
   <!-- 启用AOP -->
	<aop:aspectj-autoproxy />
	
    <!-- (事务管理)transaction manager, use JtaTransactionManager for global tx -->  
    <bean id="transactionManager"  
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
        <property name="dataSource" ref="dataSource" />  
    </bean>
    
     <!--  配置参与事务的类 -->  
     <aop:config>  
         <aop:pointcut id="allServiceMethod" expression="execution(* com.myself.ssmTest.service.*.*(..))"/>  
         <aop:advisor pointcut-ref="allServiceMethod" advice-ref="TxAdvice" />  
     </aop:config>  
      
    <!-- 使用声明方式配置事务 -->  
    <tx:advice id="TxAdvice" transaction-manager="transactionManager">  
         <tx:attributes>  
               <tx:method name="*" propagation="REQUIRED" rollback-for="java.lang.Exception"/>  
         </tx:attributes>  
    </tx:advice>  
    
    <!-- 支持注解式事务 -->
    <tx:annotation-driven transaction-manager="transactionManager" />
      
</beans>

4-4、在src/main/resources下新建mybatis文件夹,在mybatis文件夹下新建sqlmap文件夹,

并添加文件UserMapper.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" >  
<mapper namespace="com.myself.ssmTest.dao.IUserDao" >    
    <resultMap id="BaseResultMap" type="com.myself.ssmTest.model.User">  
        <result column="id" property="id" jdbcType="INTEGER" />  
        <result column="name" property="name" jdbcType="VARCHAR" />  
        <result column="password" property="password" jdbcType="VARCHAR" />  
        <result column="age" property="age" jdbcType="INTEGER" />  
    </resultMap>  
  
    <sql id="Base_Column_List">  
        id, name, password, age  
    </sql>  
  
    <!-- 查询用户-->  
    <select id="queryByPrimaryKey" resultMap="BaseResultMap"  
        parameterType="java.lang.Integer">  
        select  
        <include refid="Base_Column_List" />  
        from user  
        where id = #{id,jdbcType=INTEGER}  
    </select>  
      
    <!-- 查询用户-->  
    <select id="getAllUser" resultMap="BaseResultMap">  
        select  
        <include refid="Base_Column_List" />  
        from user  
    </select>  
      
    <!-- 插入用户 -->  
    <insert id="insertUser" parameterType="com.myself.ssmTest.model.User">  
        insert into user    
        <trim prefix="(" suffix=")" suffixOverrides="," >    
          <if test="id != null" >    
            id,    
          </if>    
          <if test="name != null" >    
            name,    
          </if>    
          <if test="password != null" >    
            password,    
          </if>    
          <if test="age != null" >    
            age,    
          </if>    
        </trim>    
        <trim prefix="values (" suffix=")" suffixOverrides="," >    
          <if test="id != null" >    
            #{id,jdbcType=INTEGER},    
          </if>    
          <if test="name != null" >    
            #{name,jdbcType=VARCHAR},    
          </if>    
          <if test="password != null" >    
            #{password,jdbcType=VARCHAR},    
          </if>    
          <if test="age != null" >    
            #{age,jdbcType=INTEGER},    
          </if>    
        </trim>     
    </insert>  
      
    <!-- 批量插入用户 -->  
    <insert id="insertUserByBatch" parameterType="java.util.List" >  
    insert into USER  
       (ID,  
        NAME,  
        PASSWORD,  
        AGE)  
    select A.* from  
         (  
         <foreach collection="list" item="user" index="index" separator="union">  
             select   
             #{user.id,jdbcType=INTEGER},  
             #{user.name,jdbcType=VARCHAR},  
             #{user.password,jdbcType=VARCHAR},  
             #{user.age,jdbcType=INTEGER}  
              from dual  
         </foreach>  
         ) A  
    </insert>  
  
    <!-- 删除用户 -->  
    <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">  
        delete from user  
        where id = #{id,jdbcType=INTEGER}    
    </delete>  
      
    <!-- 批量删除用户 -->  
    <delete id="deleteUserByBatch" parameterType="java.util.Map" >  
     delete from user  
     where id IN   
         <foreach item="ids" collection="iList" open="(" separator="," close=")">  
             #{ids,jdbcType=DECIMAL}  
         </foreach>  
    </delete>  
  
    <!-- 更新用户 -->  
    <update id="updateByPrimaryKey" parameterType="com.myself.ssmTest.model.User" >    
        update user    
        <set >    
          <if test="name != null" >    
            name = #{name,jdbcType=VARCHAR},    
          </if>    
          <if test="password != null" >    
            password = #{password,jdbcType=VARCHAR},    
          </if>    
          <if test="age != null" >    
            age = #{age,jdbcType=INTEGER},    
          </if>    
        </set>    
        where id = #{id,jdbcType=INTEGER}   
    </update>  
    
</mapper>

4-5、在WEB-INF文件夹下添加/修改以下配置文件

spring-mvc.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: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">  
  
     <!-- 添加注解驱动 -->    
    <mvc:annotation-driven />  
    <mvc:default-servlet-handler/>  
      
    <!-- 设置使用注解的类所在的包 -->  
    <context:component-scan base-package="com.myself.ssmTest.controller" />  
      
    <!-- 定义跳转的文件的前后缀 ,视图模式配置-->  
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
        <!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个 可用的url地址 -->  
        <property name="prefix" value="/WEB-INF/jsp/" />  
        <property name="suffix" value=".jsp" />  
    </bean>  
      
    <!-- SpringMVC上传文件时,需要配置MultipartResolver处理器-->  
    <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

<?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 bean -->  
    <context-param>  
         <param-name>contextConfigLocation</param-name>  
        <param-value>classpath:spring/applicationContext.xml</param-value>  
    </context-param>  
    <listener>  
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
    </listener>  
      
    <!-- 编码过滤器 -->  
    <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 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>/WEB-INF/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>  
        <url-pattern>/</url-pattern>  
    </servlet-mapping>
</web-app>

4-6、在src/main/java下添加如下包和类

User.java

package com.myself.ssmTest.model;  
  
public class User {  
    private Integer id;  
  
    private String name;  
  
    private String password;  
  
    private Integer age;  
  
    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 String getPassword() {  
        return password;  
    }  
  
    public void setPassword(String password) {  
        this.password = password == null ? null : password.trim();  
    }  
  
    public Integer getAge() {  
        return age;  
    }  
  
    public void setAge(Integer age) {  
        this.age = age;  
    }  
}


UserController.java

package com.myself.ssmTest.controller;  
  
import java.util.List;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

import com.myself.ssmTest.model.User;
import com.myself.ssmTest.service.IUserService;
  
@Controller  
@RequestMapping("/user")  
public class UserController {  
    @Resource  
    private IUserService userService;  
      
    @RequestMapping("/userList")  
    public String userList(HttpServletRequest request,Model model){
        List<User> uList = userService.getAllUser();
        model.addAttribute("uList", uList);  
        return "userList";  
    }  
      
    @RequestMapping("/showUser")  
    public String showUser(HttpServletRequest request,Model model){
        int userId = Integer.parseInt(request.getParameter("id")); 
        User user = userService.getUserById(userId); 
        model.addAttribute("user", user);  
        return "showUser";  
    }  
      
    @RequestMapping("/addUserUI")  
    public String addUserUI(){
        return "addUser";  
    }  
      
    @RequestMapping("/addUser")  
    public String addUser(HttpServletRequest request,Model model){ 
        User user = new User();  
        user.setName(String.valueOf(request.getParameter("name")));  
        user.setPassword(String.valueOf(request.getParameter("password")));  
        user.setAge(Integer.parseInt(String.valueOf(request.getParameter("age"))));  
        userService.addUser(user);  
        return "redirect:/user/userList";  
    }  
}

IUserService.java

package com.myself.ssmTest.service;

import java.util.List;

import com.myself.ssmTest.model.User;

public interface IUserService {
    public User getUserById(int userId);  
    
    public void insertUser(User user);  
  
    public void addUser(User user);  
  
    public List<User> getAllUser();  

}

UserServiceImpl.java

package com.myself.ssmTest.service.impl;

import java.util.List;

import javax.annotation.Resource;

import org.apache.log4j.Logger;
import org.springframework.stereotype.Service;

import com.myself.ssmTest.dao.IUserDao;
import com.myself.ssmTest.model.User;
import com.myself.ssmTest.service.IUserService;

@Service("userService") 
public class UserServiceImpl implements IUserService {
	/**
     * 日志:打印=位置参考log4j.properties
     */
    private Logger logger = Logger.getLogger(UserServiceImpl.class);
    
	@Resource  
    private IUserDao userDao;  
      
    public User getUserById(int userId) {
        return userDao.queryByPrimaryKey(userId);  
    }  
  
    public void insertUser(User user) {  
        userDao.insertUser(user);  
    }  
  
    public void addUser(User user) {  
        userDao.insertUser(user);  
    }  
  
    @Override  
    public List<User> getAllUser() {  
        return userDao.getAllUser();  
    }  
}

IUserDao.java

package com.myself.ssmTest.dao;

import java.util.List;
import java.util.Map;

import com.myself.ssmTest.model.User;

public interface IUserDao {
	public User queryByPrimaryKey(Integer id);  
    
    public List<User> getAllUser();  
          
    public void insertUser(User user);  
      
    public void insertUserByBatch(List<User> list);  
      
    public void deleteByPrimaryKey(Integer id);  
      
    public void delteUserByBatch(Map<String,Object> params);  
      
    public void updateByPrimaryKey(User user);  

}

五、在WEB-INF文件夹下创建jsp文件夹,并添加userList.jsp,showUser.jsp、addUser.jsp

addUser.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>  
<%  
String path = request.getContextPath();  
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
%>  
  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<html>  
  <head>  
    <base href="<%=basePath%>">  
      
    <title>My JSP 'addUser.jsp' starting page</title>  
      
    <meta http-equiv="pragma" content="no-cache">  
    <meta http-equiv="cache-control" content="no-cache">  
    <meta http-equiv="expires" content="0">      
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
    <meta http-equiv="description" content="This is my page">  
    <!-- 
    <link rel="stylesheet" type="text/css" href="styles.css"> 
    -->  
  
  </head>  
    
  <body>  
    <form id="addUser" action="user/addUser" method="post">   
        userName: <input id="name" name="name" /><br/>   
        password: <input id="password" name="password" /><br/>   
        age: <input id="age" name="age"/><br/>   
        <input type="submit" value="添加新用户"/>   
    </form>  
  </body>  
</html>


showUser.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
<%  
String path = request.getContextPath();  
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
%>  
  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<html>  
  <head>  
    <base href="<%=basePath%>">  
      
    <title>My JSP 'showUser.jsp' starting page</title>  
      
    <meta http-equiv="pragma" content="no-cache">  
    <meta http-equiv="cache-control" content="no-cache">  
    <meta http-equiv="expires" content="0">      
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
    <meta http-equiv="description" content="This is my page">  
    <!-- 
    <link rel="stylesheet" type="text/css" href="styles.css"> 
    -->  
  
  </head>  
    
  <body>  
    ${user.name }<br>  
  </body>  
</html>

userList.jsp

<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>  
<%  
String path = request.getContextPath();  
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";  
%>  
  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
<html>  
  <head>  
    <base href="<%=basePath%>">  
      
    <title>My JSP 'showUser.jsp' starting page</title>  
      
    <meta http-equiv="pragma" content="no-cache">  
    <meta http-equiv="cache-control" content="no-cache">  
    <meta http-equiv="expires" content="0">      
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">  
    <meta http-equiv="description" content="This is my page">  
    <!-- 
    <link rel="stylesheet" type="text/css" href="styles.css"> 
    -->  
  
  </head>  
    
  <body>  
    <c:forEach items="${uList }" var="u">  
        用户名称:${u.name}  
        用户年龄:${u.age }  
        <br/>  
    </c:forEach>  
  </body>  
</html>

六、创建数据库,并创建表

在mysql执行如下初始化脚本,如果没有mysql,这里提供一个mysql5.5安装包下载地址:https://download.csdn.net/download/qq_25646191/10144840

drop database if exists test;
create database test default character set utf8 collate utf8_general_ci;
use test; 
CREATE TABLE `user` (  
  `id` int(12) NOT NULL AUTO_INCREMENT,  
  `name` varchar(50) NOT NULL,  
  `password` varchar(50) NOT NULL,  
  `age` int(9) NOT NULL,  
  PRIMARY KEY (`id`)  
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8;  
  
insert  into `user`(`id`,`name`,`password`,`age`) values (1,'admin','admin',22); 

七、整个项目文件结构图



八、部署发布项目,进行测试

1、http://localhost:8080/ssmTest/user/showUser?id=1



2、http://localhost:8080/ssmTest/user/addUserUI


3、http://localhost:8080/ssmTest/user/userList



至此,框架搭建完成!

猜你喜欢

转载自blog.csdn.net/qq_25646191/article/details/80338866