美文网首页
SSM基本整合

SSM基本整合

作者: 泛空秋慕 | 来源:发表于2018-06-25 13:45 被阅读0次

    工程结构如图所示:


    1.Spring系列配置文件

    spring-core.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: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/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">
            
        <context:component-scan base-package="com.hsun">
            <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
        </context:component-scan>
        
        <import resource="classpath:spring/spring-mybatis.xml" />
        
        <!-- 事务管理 -->
        <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
            <property name="dataSource" ref="poolDataSource" />
        </bean>
        <tx:annotation-driven transaction-manager="txManager" />
    
    </beans>
    
    

    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.xsd 
            http://www.springframework.org/schema/context 
            http://www.springframework.org/schema/context/spring-context.xsd 
            http://www.springframework.org/schema/mvc 
            http://www.springframework.org/schema/mvc/spring-mvc.xsd">
    
        <mvc:annotation-driven/>
    
        <context:component-scan base-package="com.hsun.controller" />
        <!-- 静态资源 -->
        <mvc:resources location="/static/" mapping="/static/**"></mvc:resources>
        <!-- 跨域 -->
        <mvc:cors>
            <mvc:mapping path="/**" allowed-origins="*" allow-credentials="true" max-age="1800" allowed-methods="GET"/>
        </mvc:cors>
        <!-- jsp视图解析器 -->
        <bean id="viewResolver"
            class="org.springframework.web.servlet.view.InternalResourceViewResolver">
            <property name="viewClass"
                value="org.springframework.web.servlet.view.InternalResourceView" />
            <property name="prefix" value="/WEB-INF/" />
            <property name="suffix" value=".jsp" />
        </bean>
        
    </beans>
    

    spring-mybstis

    <?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"
        xsi:schemaLocation="
            http://www.springframework.org/schema/beans 
            http://www.springframework.org/schema/beans/spring-beans.xsd 
            http://www.springframework.org/schema/context 
            http://www.springframework.org/schema/context/spring-context.xsd
            http://www.springframework.org/schema/aop
            http://www.springframework.org/schema/aop/spring-aop.xsd
            http://www.springframework.org/schema/tx
            http://www.springframework.org/schema/tx/spring-tx.xsd">
    
        <!-- 1:加载jdbc.properties配置文件 -->
        <context:property-placeholder location="classpath:dbconfig.properties" />
    
        <!-- 2:配置数据库连接池 -->
        <bean id="poolDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="driverClass" value="${jdbc.driverClass}" />
            <property name="jdbcUrl" value="${jdbc.url}" />
            <property name="user" value="${jdbc.user}" />
            <property name="password" value="${jdbc.password}" />
        </bean>
        <!-- 配置和mybatis整合 -->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
            <!-- 指定mybatis全局配置文件的位置 -->
            <property name="configLocation" value="classpath:mybatis-config.xml" />
            <!-- 扫描entity包,使用别名,多个包;隔开 -->
            <property name="typeAliasesPackage" value="com.hsun.bean" />
            <property name="dataSource" ref="poolDataSource" />
            <!-- 指定mybatis,mapper配置文件的位置 -->
            <property name="mapperLocations" value="classpath:mapper/*.xml"/>
        </bean>
        
        <!-- 配置扫描器,将mybatis接口的实现加入到IOC容器中 -->
        <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
            <!-- 注入sqlSessionFactory -->
            <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
            <!-- 扫描所有dao接口的实现,加入到IOC容器中 -->
            <property name="basePackage" value="com.hsun.dao" />
        </bean>
    
    </beans>
    


    2.mybatis系列配置文件

    mybstis-config.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE configuration
      PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
      "http://mybatis.org/dtd/mybatis-3-config.dtd">
      <configuration>
      
      <settings>
        <setting name="mapUnderscoreToCamelCase" value="true"/>
      </settings>
      <typeAliases>
        <package name="com.hsun.bean"/>
      </typeAliases>
      
      
      <!-- <environments default="development">
        <environment id="development">
          <transactionManager type="JDBC"/>
          <dataSource type="POOLED">
            <property name="driver" value="${driver}"/>
            <property name="url" value="${url}"/>
            <property name="username" value="${username}"/>
            <property name="password" value="${password}"/>
          </dataSource>
        </environment>
      </environments>
      <mappers>
        <mapper resource="org/mybatis/example/BlogMapper.xml"/>
      </mappers> -->
      
      <!-- 注册分页插件 -->
      <plugins>
        <plugin interceptor="com.github.pagehelper.PageInterceptor">
            <!-- 配置参数合理化 -->
            <property name="reasonable" value="true"/>
        </plugin>
      </plugins>
      
      
    </configuration>
    

    EmployeeMapper.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.hsun.dao.EmployeeMapper">
        <resultMap id="BaseResultMap" type="com.hsun.bean.Employee">
            <id column="emp_id" jdbcType="INTEGER" property="empId" />
            <result column="emp_name" jdbcType="VARCHAR" property="empName" />
            <result column="gender" jdbcType="CHAR" property="gender" />
            <result column="email" jdbcType="VARCHAR" property="email" />
            <result column="d_id" jdbcType="INTEGER" property="dId" />
        </resultMap>
        <!-- 指定联合查询出部门字段 -->
        <resultMap id="WithDeptResultMap" type="com.hsun.bean.Employee">
            <id column="emp_id" jdbcType="INTEGER" property="empId" />
            <result column="emp_name" jdbcType="VARCHAR" property="empName" />
            <result column="gender" jdbcType="CHAR" property="gender" />
            <result column="email" jdbcType="VARCHAR" property="email" />
            <result column="d_id" jdbcType="INTEGER" property="dId" />
            <association property="department" javaType="com.hsun.bean.Department">
                <id column="dept_id" property="deptId"/>
                <result column="dept_name" property="deptName"/>
            </association>
        </resultMap>
        <sql id="Example_Where_Clause">
            <where>
                <foreach collection="oredCriteria" item="criteria" separator="or">
                    <if test="criteria.valid">
                        <trim prefix="(" prefixOverrides="and" suffix=")">
                            <foreach collection="criteria.criteria" item="criterion">
                                <choose>
                                    <when test="criterion.noValue">
                                        and ${criterion.condition}
                                    </when>
                                    <when test="criterion.singleValue">
                                        and ${criterion.condition} #{criterion.value}
                                    </when>
                                    <when test="criterion.betweenValue">
                                        and ${criterion.condition} #{criterion.value} and
                                        #{criterion.secondValue}
                                    </when>
                                    <when test="criterion.listValue">
                                        and ${criterion.condition}
                                        <foreach close=")" collection="criterion.value" item="listItem"
                                            open="(" separator=",">
                                            #{listItem}
                                        </foreach>
                                    </when>
                                </choose>
                            </foreach>
                        </trim>
                    </if>
                </foreach>
            </where>
        </sql>
        <sql id="Update_By_Example_Where_Clause">
            <where>
                <foreach collection="example.oredCriteria" item="criteria"
                    separator="or">
                    <if test="criteria.valid">
                        <trim prefix="(" prefixOverrides="and" suffix=")">
                            <foreach collection="criteria.criteria" item="criterion">
                                <choose>
                                    <when test="criterion.noValue">
                                        and ${criterion.condition}
                                    </when>
                                    <when test="criterion.singleValue">
                                        and ${criterion.condition} #{criterion.value}
                                    </when>
                                    <when test="criterion.betweenValue">
                                        and ${criterion.condition} #{criterion.value} and
                                        #{criterion.secondValue}
                                    </when>
                                    <when test="criterion.listValue">
                                        and ${criterion.condition}
                                        <foreach close=")" collection="criterion.value" item="listItem"
                                            open="(" separator=",">
                                            #{listItem}
                                        </foreach>
                                    </when>
                                </choose>
                            </foreach>
                        </trim>
                    </if>
                </foreach>
            </where>
        </sql>
        <sql id="Base_Column_List">
            emp_id, emp_name, gender, email, d_id
        </sql>
        <sql id="WithDept_Column_List">
            e.emp_id, e.emp_name, e.gender, e.email, e.d_id,d.dept_id,d.dept_name
        </sql>
        <!-- 
             List<Employee> selectByExampleWithDept(EmployeeExample example); 
             Employee selectByPrimaryKeyWithDept(Integer empId);
        -->
        <!-- 查询员工同时带上部门的 -->
        <select id="selectByExampleWithDept" resultMap="WithDeptResultMap">
            select
            <if test="distinct">
                distinct
            </if>
            <include refid="WithDept_Column_List" />
            FROM tbl_emp e
            LEFT JOIN tbl_dept d ON e.`d_id`=d.`dept_id`
            <if test="_parameter != null">
                <include refid="Example_Where_Clause" />
            </if>
            <if test="orderByClause != null">
                order by ${orderByClause}
            </if>
        </select>
        <select id="selectByPrimaryKeyWithDept" resultMap="WithDeptResultMap">
                select
                <include refid="WithDept_Column_List" />
                FROM tbl_emp e
                LEFT JOIN tbl_dept d ON e.`d_id`=d.`dept_id`
                where emp_id = #{empId,jdbcType=INTEGER}
        </select>
        
        <!-- 查询员工不带上带上部门的 -->
        <select id="selectByExample" parameterType="com.hsun.bean.EmployeeExample"
            resultMap="BaseResultMap">
            select
            <if test="distinct">
                distinct
            </if>
            <include refid="Base_Column_List" />
            from tbl_emp
            <if test="_parameter != null">
                <include refid="Example_Where_Clause" />
            </if>
            <if test="orderByClause != null">
                order by ${orderByClause}
            </if>
        </select>
        <select id="selectByPrimaryKey" parameterType="java.lang.Integer"
            resultMap="BaseResultMap">
            select
            <include refid="Base_Column_List" />
            from tbl_emp
            where emp_id = #{empId,jdbcType=INTEGER}
        </select>
        <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
            delete from tbl_emp
            where emp_id = #{empId,jdbcType=INTEGER}
        </delete>
        <delete id="deleteByExample" parameterType="com.hsun.bean.EmployeeExample">
            delete from tbl_emp
            <if test="_parameter != null">
                <include refid="Example_Where_Clause" />
            </if>
        </delete>
        <insert id="insert" parameterType="com.hsun.bean.Employee">
            insert into tbl_emp (emp_id, emp_name, gender,
            email, d_id)
            values (#{empId,jdbcType=INTEGER}, #{empName,jdbcType=VARCHAR},
            #{gender,jdbcType=CHAR},
            #{email,jdbcType=VARCHAR}, #{dId,jdbcType=INTEGER})
        </insert>
        <insert id="insertSelective" parameterType="com.hsun.bean.Employee">
            insert into tbl_emp
            <trim prefix="(" suffix=")" suffixOverrides=",">
                <if test="empId != null">
                    emp_id,
                </if>
                <if test="empName != null">
                    emp_name,
                </if>
                <if test="gender != null">
                    gender,
                </if>
                <if test="email != null">
                    email,
                </if>
                <if test="dId != null">
                    d_id,
                </if>
            </trim>
            <trim prefix="values (" suffix=")" suffixOverrides=",">
                <if test="empId != null">
                    #{empId,jdbcType=INTEGER},
                </if>
                <if test="empName != null">
                    #{empName,jdbcType=VARCHAR},
                </if>
                <if test="gender != null">
                    #{gender,jdbcType=CHAR},
                </if>
                <if test="email != null">
                    #{email,jdbcType=VARCHAR},
                </if>
                <if test="dId != null">
                    #{dId,jdbcType=INTEGER},
                </if>
            </trim>
        </insert>
        <select id="countByExample" parameterType="com.hsun.bean.EmployeeExample"
            resultType="java.lang.Long">
            select count(*) from tbl_emp
            <if test="_parameter != null">
                <include refid="Example_Where_Clause" />
            </if>
        </select>
        <update id="updateByExampleSelective" parameterType="map">
            update tbl_emp
            <set>
                <if test="record.empId != null">
                    emp_id = #{record.empId,jdbcType=INTEGER},
                </if>
                <if test="record.empName != null">
                    emp_name = #{record.empName,jdbcType=VARCHAR},
                </if>
                <if test="record.gender != null">
                    gender = #{record.gender,jdbcType=CHAR},
                </if>
                <if test="record.email != null">
                    email = #{record.email,jdbcType=VARCHAR},
                </if>
                <if test="record.dId != null">
                    d_id = #{record.dId,jdbcType=INTEGER},
                </if>
            </set>
            <if test="_parameter != null">
                <include refid="Update_By_Example_Where_Clause" />
            </if>
        </update>
        <update id="updateByExample" parameterType="map">
            update tbl_emp
            set emp_id = #{record.empId,jdbcType=INTEGER},
            emp_name = #{record.empName,jdbcType=VARCHAR},
            gender = #{record.gender,jdbcType=CHAR},
            email = #{record.email,jdbcType=VARCHAR},
            d_id = #{record.dId,jdbcType=INTEGER}
            <if test="_parameter != null">
                <include refid="Update_By_Example_Where_Clause" />
            </if>
        </update>
        <update id="updateByPrimaryKeySelective" parameterType="com.hsun.bean.Employee">
            update tbl_emp
            <set>
                <if test="empName != null">
                    emp_name = #{empName,jdbcType=VARCHAR},
                </if>
                <if test="gender != null">
                    gender = #{gender,jdbcType=CHAR},
                </if>
                <if test="email != null">
                    email = #{email,jdbcType=VARCHAR},
                </if>
                <if test="dId != null">
                    d_id = #{dId,jdbcType=INTEGER},
                </if>
            </set>
            where emp_id = #{empId,jdbcType=INTEGER}
        </update>
        <update id="updateByPrimaryKey" parameterType="com.hsun.bean.Employee">
            update tbl_emp
            set emp_name = #{empName,jdbcType=VARCHAR},
            gender = #{gender,jdbcType=CHAR},
            email = #{email,jdbcType=VARCHAR},
            d_id = #{dId,jdbcType=INTEGER}
            where emp_id = #{empId,jdbcType=INTEGER}
        </update>
    </mapper>
    

    DepartmentMapper.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.hsun.dao.DepartmentMapper">
      <resultMap id="BaseResultMap" type="com.hsun.bean.Department">
        <id column="dept_id" jdbcType="INTEGER" property="deptId" />
        <result column="dept_name" jdbcType="VARCHAR" property="deptName" />
      </resultMap>
      <sql id="Example_Where_Clause">
        <where>
          <foreach collection="oredCriteria" item="criteria" separator="or">
            <if test="criteria.valid">
              <trim prefix="(" prefixOverrides="and" suffix=")">
                <foreach collection="criteria.criteria" item="criterion">
                  <choose>
                    <when test="criterion.noValue">
                      and ${criterion.condition}
                    </when>
                    <when test="criterion.singleValue">
                      and ${criterion.condition} #{criterion.value}
                    </when>
                    <when test="criterion.betweenValue">
                      and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
                    </when>
                    <when test="criterion.listValue">
                      and ${criterion.condition}
                      <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
                        #{listItem}
                      </foreach>
                    </when>
                  </choose>
                </foreach>
              </trim>
            </if>
          </foreach>
        </where>
      </sql>
      <sql id="Update_By_Example_Where_Clause">
        <where>
          <foreach collection="example.oredCriteria" item="criteria" separator="or">
            <if test="criteria.valid">
              <trim prefix="(" prefixOverrides="and" suffix=")">
                <foreach collection="criteria.criteria" item="criterion">
                  <choose>
                    <when test="criterion.noValue">
                      and ${criterion.condition}
                    </when>
                    <when test="criterion.singleValue">
                      and ${criterion.condition} #{criterion.value}
                    </when>
                    <when test="criterion.betweenValue">
                      and ${criterion.condition} #{criterion.value} and #{criterion.secondValue}
                    </when>
                    <when test="criterion.listValue">
                      and ${criterion.condition}
                      <foreach close=")" collection="criterion.value" item="listItem" open="(" separator=",">
                        #{listItem}
                      </foreach>
                    </when>
                  </choose>
                </foreach>
              </trim>
            </if>
          </foreach>
        </where>
      </sql>
      <sql id="Base_Column_List">
        dept_id, dept_name
      </sql>
      <select id="selectByExample" parameterType="com.hsun.bean.DepartmentExample" resultMap="BaseResultMap">
        select
        <if test="distinct">
          distinct
        </if>
        <include refid="Base_Column_List" />
        from tbl_dept
        <if test="_parameter != null">
          <include refid="Example_Where_Clause" />
        </if>
        <if test="orderByClause != null">
          order by ${orderByClause}
        </if>
      </select>
      <select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
        select 
        <include refid="Base_Column_List" />
        from tbl_dept
        where dept_id = #{deptId,jdbcType=INTEGER}
      </select>
      <delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
        delete from tbl_dept
        where dept_id = #{deptId,jdbcType=INTEGER}
      </delete>
      <delete id="deleteByExample" parameterType="com.hsun.bean.DepartmentExample">
        delete from tbl_dept
        <if test="_parameter != null">
          <include refid="Example_Where_Clause" />
        </if>
      </delete>
      <insert id="insert" parameterType="com.hsun.bean.Department">
        insert into tbl_dept (dept_id, dept_name)
        values (#{deptId,jdbcType=INTEGER}, #{deptName,jdbcType=VARCHAR})
      </insert>
      <insert id="insertSelective" parameterType="com.hsun.bean.Department">
        insert into tbl_dept
        <trim prefix="(" suffix=")" suffixOverrides=",">
          <if test="deptId != null">
            dept_id,
          </if>
          <if test="deptName != null">
            dept_name,
          </if>
        </trim>
        <trim prefix="values (" suffix=")" suffixOverrides=",">
          <if test="deptId != null">
            #{deptId,jdbcType=INTEGER},
          </if>
          <if test="deptName != null">
            #{deptName,jdbcType=VARCHAR},
          </if>
        </trim>
      </insert>
      <select id="countByExample" parameterType="com.hsun.bean.DepartmentExample" resultType="java.lang.Long">
        select count(*) from tbl_dept
        <if test="_parameter != null">
          <include refid="Example_Where_Clause" />
        </if>
      </select>
      <update id="updateByExampleSelective" parameterType="map">
        update tbl_dept
        <set>
          <if test="record.deptId != null">
            dept_id = #{record.deptId,jdbcType=INTEGER},
          </if>
          <if test="record.deptName != null">
            dept_name = #{record.deptName,jdbcType=VARCHAR},
          </if>
        </set>
        <if test="_parameter != null">
          <include refid="Update_By_Example_Where_Clause" />
        </if>
      </update>
      <update id="updateByExample" parameterType="map">
        update tbl_dept
        set dept_id = #{record.deptId,jdbcType=INTEGER},
          dept_name = #{record.deptName,jdbcType=VARCHAR}
        <if test="_parameter != null">
          <include refid="Update_By_Example_Where_Clause" />
        </if>
      </update>
      <update id="updateByPrimaryKeySelective" parameterType="com.hsun.bean.Department">
        update tbl_dept
        <set>
          <if test="deptName != null">
            dept_name = #{deptName,jdbcType=VARCHAR},
          </if>
        </set>
        where dept_id = #{deptId,jdbcType=INTEGER}
      </update>
      <update id="updateByPrimaryKey" parameterType="com.hsun.bean.Department">
        update tbl_dept
        set dept_name = #{deptName,jdbcType=VARCHAR}
        where dept_id = #{deptId,jdbcType=INTEGER}
      </update>
    </mapper>
    

    3.数据源信息

    db.properties

    jdbc.url=jdbc:mysql://localhost:3306/ssm_crud
    jdbc.driverClass=com.mysql.jdbc.Driver
    jdbc.user=root
    jdbc.password=root
    


    4.日志

    log4j.rootLogger=INFO,Console,File  
    #\u5B9A\u4E49\u65E5\u5FD7\u8F93\u51FA\u76EE\u7684\u5730\u4E3A\u63A7\u5236\u53F0
    log4j.appender.Console=org.apache.log4j.ConsoleAppender  
    log4j.appender.Console.Target=System.out  
    #\u53EF\u4EE5\u7075\u6D3B\u5730\u6307\u5B9A\u65E5\u5FD7\u8F93\u51FA\u683C\u5F0F\uFF0C\u4E0B\u9762\u4E00\u884C\u662F\u6307\u5B9A\u5177\u4F53\u7684\u683C\u5F0F
    log4j.appender.Console.layout = org.apache.log4j.PatternLayout  
    log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n  
    
    #\u6587\u4EF6\u5927\u5C0F\u5230\u8FBE\u6307\u5B9A\u5C3A\u5BF8\u7684\u65F6\u5019\u4EA7\u751F\u4E00\u4E2A\u65B0\u7684\u6587\u4EF6
    log4j.appender.File = org.apache.log4j.RollingFileAppender  
    #\u6307\u5B9A\u8F93\u51FA\u76EE\u5F55
    log4j.appender.File.File = logs/ssm.log  
    #\u5B9A\u4E49\u6587\u4EF6\u6700\u5927\u5927\u5C0F
    log4j.appender.File.MaxFileSize = 10MB  
    # \u8F93\u51FA\u6240\u4EE5\u65E5\u5FD7\uFF0C\u5982\u679C\u6362\u6210DEBUG\u8868\u793A\u8F93\u51FADEBUG\u4EE5\u4E0A\u7EA7\u522B\u65E5\u5FD7
    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  
    


    5. 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"
     id="WebApp_ID" version="3.0">
     
     <welcome-file-list>
         <welcome-file>index.jsp</welcome-file>
     </welcome-file-list>
     <!-- spring核心的位置 -->
     <context-param>
         <param-name>contextConfigLocation</param-name>
         <param-value>classpath:spring/spring-core.xml</param-value>
     </context-param>
     <!-- 统一编码filter -->
     <filter>
         <filter-name>charsetEncoding</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>
     
    
     <!-- 此监听器出用于主要为了解决java.beans.Introspector导致内存泄漏的问题. This listener should 
         be registered as the first one in web.xml, before any application listeners 
         such as Spring's ContextLoaderListener. -->
     <listener>
         <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
     </listener>
     <!-- 加载spring核心的listener -->
     <listener>
         <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
     </listener>
     <!-- springmvc前端控制器配置 -->
     <servlet>
         <servlet-name>mvc</servlet-name>
         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
         <init-param>
             <param-name>contextConfigLocation</param-name>
             <param-value>classpath:/spring/spring-mvc.xml</param-value>
         </init-param>
         <load-on-startup>1</load-on-startup>
     </servlet>
     <servlet-mapping>
         <servlet-name>mvc</servlet-name>
         <url-pattern>/</url-pattern>
     </servlet-mapping>
    </web-app>
    


    6. 通用返回类

    package com.hsun.bean;
    
    import java.util.HashMap;
    import java.util.Map;
    
    
    
    /**
     * 通用的返回类
     * @author 孙浩
     *
     */
    public class Msg {
        //状态码100-成功 200-失败
        private int code;
        //提示信息
        private String msg;
        //要返回给浏览器的数据
        private Map<String, Object> extend = new HashMap<>();
        
        public static Msg success() {
            Msg result = new Msg();
            result.setCode(100);
            result.setMsg("处理成功");
            return result;
        }
        
        public static Msg fail() {
            Msg result = new Msg();
            result.setCode(200);
            result.setMsg("处理失败");
            return result;
        }
        
        public int getCode() {
            return code;
        }
        public void setCode(int code) {
            this.code = code;
        }
        public String getMsg() {
            return msg;
        }
        public void setMsg(String msg) {
            this.msg = msg;
        }
        public Map<String, Object> getExtend() {
            return extend;
        }
        public void setExtend(Map<String, Object> extend) {
            this.extend = extend;
        }
    
        public Msg add(String key, Object value) {
            this.getExtend().put(key, value);
            return this;
        }
        
    }
    


    7.首页展示

    index.jsp

    <%@ page language="java" contentType="text/html; charset=utf-8"
        pageEncoding="utf-8"%>
    <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <title>员工列表</title>
    <%
        pageContext.setAttribute("APP_PATH", request.getContextPath());
    %>
    <!-- web的路径问题:
    不以“/”开头的相对路径,找资源以当前路径为基准,经常容易出问题
    以“/”开始的路径在找资源时,是以服务器的路径为标准,需要加上项目名
     -->
    <!-- 引入Jquery -->
    <script type="text/javascript"
        src="${APP_PATH }/static/js/jquery.min.js"></script>
    <!-- Bootstrap -->
    <link
        href="${APP_PATH }/static/bootstrap-3.3.7-dist/css/bootstrap.min.css"
        rel="stylesheet">
    <!-- 引入BootStrap js文件 -->
    <script
        src="${APP_PATH }/static/bootstrap-3.3.7-dist/js/bootstrap.min.js"></script>
    
    <style type="text/css">
    #dep_search {
        margin: 0px;
        border: 0px;
    }
    </style>
    </head>
    <body>
        <!-- 搭建显示页面 -->
    
        <!-- 员工添加模态框 -->
        <div class="modal fade" id="empAddModal" tabindex="-1" role="dialog"
            aria-labelledby="myModalLabel">
            <div class="modal-dialog" role="document">
                <div class="modal-content">
                    <div class="modal-header">
                        <button type="button" class="close" data-dismiss="modal"
                            aria-label="Close">
                            <span aria-hidden="true">&times;</span>
                        </button>
                        <h4 class="modal-title" id="myModalLabel">员工添加</h4>
                    </div>
                    <div class="modal-body">
                        <form class="form-horizontal">
                            <div class="form-group">
                                <label class="col-sm-2 control-label">empName</label>
                                <div class="col-sm-10">
                                    <input type="text" class="form-control" name="empName"
                                        id="emp_add_input" placeholder="empName"> <span
                                        class="help-block"></span>
                                </div>
                            </div>
                            <div class="form-group">
                                <label class="col-sm-2 control-label">email</label>
                                <div class="col-sm-10">
                                    <input type="text" name="email" class="form-control"
                                        id="email_add_input" placeholder="email@qq.com"> <span
                                        class="help-block"></span>
                                </div>
                            </div>
                            <div class="form-group">
                                <label class="col-sm-2 control-label">gender</label>
                                <div class="col-sm-10">
                                    <label class="radio-inline"> <input type="radio"
                                        name="gender" id="inlineRadio1" value="M" checked> 男
                                    </label> <label class="radio-inline"> <input type="radio"
                                        name="gender" id="inlineRadio2" value="F"> 女
                                    </label>
                                </div>
                            </div>
                            <div class="form-group">
                                <label class="col-sm-2 control-label">gender</label>
                                <div class="col-sm-4">
                                    <select class="form-control" name="dId" id="dept_add_select">
                                    </select>
                                </div>
                            </div>
                            <div class="modal-footer">
                                <button type="button" class="btn btn-default"
                                    data-dismiss="modal">关闭</button>
                                <button type="button" class="btn btn-primary" id="emp_save_btn">保存</button>
                            </div>
                        </form>
                    </div>
                </div>
            </div>
        </div>
        <!-- 员工添加模态框结束 -->
    
    
        <!-- 员工修改模态框 -->
        <div class="modal fade" id="empUpdateModal" tabindex="-1" role="dialog"
            aria-labelledby="myModalLabel">
            <div class="modal-dialog" role="document">
                <div class="modal-content">
                    <div class="modal-header">
                        <button type="button" class="close" data-dismiss="modal"
                            aria-label="Close">
                            <span aria-hidden="true">&times;</span>
                        </button>
                        <h4 class="modal-title">员工修改</h4>
                    </div>
                    <div class="modal-body">
                        <form class="form-horizontal" id="empUpdateModal">
                            <div class="form-group">
                                <label class="col-sm-2 control-label">empName</label>
                                <div class="col-sm-10">
                                    <p class="form-control-static" id="empName_update_static"></p>
                                </div>
                            </div>
                            <div class="form-group">
                                <label class="col-sm-2 control-label">email</label>
                                <div class="col-sm-10">
                                    <input type="text" name="email" class="form-control"
                                        id="email_update_input" placeholder="email@qq.com"> <span
                                        class="help-block"></span>
                                </div>
                            </div>
                            <div class="form-group">
                                <label class="col-sm-2 control-label">gender</label>
                                <div class="col-sm-10">
                                    <label class="radio-inline"> <input type="radio"
                                        name="gender" id="gender1_update_input" value="M" checked>
                                        男
                                    </label> <label class="radio-inline"> <input type="radio"
                                        name="gender" id="gender2_update_input" value="F"> 女
                                    </label>
                                </div>
                            </div>
                            <div class="form-group">
                                <label class="col-sm-2 control-label">gender</label>
                                <div class="col-sm-4">
                                    <select class="form-control" name="dId">
                                    </select>
                                </div>
                            </div>
                            <div class="modal-footer">
                                <button type="button" class="btn btn-default"
                                    data-dismiss="modal">关闭</button>
                                <button type="button" class="btn btn-primary" id="emp_update_btn">更新</button>
                            </div>
                        </form>
                    </div>
                </div>
            </div>
        </div>
        <!-- 员工修改模态框结束 -->
    
    
        <div class="container">
            <!-- 标题 -->
            <div class="row">
                <div class="col-md-12">
                    <h1>SSM_CRUD</h1>
                </div>
            </div>
    
            <div class="row">
                <div class="col-md-8 col-md-offset-4">
                    <input aria-describedby="basic-addon1" type="text" id="input_search"
                        placeholder="在此输入要检索的内容。。。">
                    <button class="btn btn-primary btn-default" id="dep_search">
                        <span class="glyphicon glyphicon-search"></span>
                    </button>
                </div>
            </div>
            <!-- 按钮 -->
            <div class="row">
                <div class="col-md-4 col-md-offset-8">
                    <button class="btn btn-primary btn-sm" id="emp_add_modal_btn">新增</button>
                    <button class="btn btn-danger btn-sm" id="emp_delete_all_btn">删除</button>
                </div>
            </div>
            <!-- 显示表格数据 -->
            <div class="row">
                <div class="col-md-12">
                    <table class="table table-hover" id="emps_table">
                        <thead>
                            <tr>
                                <th><input type="checkbox" id="check_all"></th>
                                <th>#</th>
                                <th>empName</th>
                                <th>gender</th>
                                <th>email</th>
                                <th>deptName</th>
                                <th>操作</th>
                            </tr>
                        </thead>
                        <tbody>
                        </tbody>
                    </table>
                </div>
            </div>
            <!-- 显示分页信息 -->
            <div class="row">
                <!-- 分页文字信息 -->
                <div class="col-md-6" id="page_info_area"></div>
                <!-- 分页条信息 -->
                <div class="col-md-6" id="page_nav_area"></div>
            </div>
        </div>
        <script type="text/javascript">
            var totalRecord, currentPage; //总记录数和当前页码
    
            $(function() {
                to_page(1);
    
            });
    
            function to_page(pn) {
                $.ajax({
                    type : "GET",
                    url : "${APP_PATH }/emps",
                    data : "pn=" + pn,
                    success : function(result) {
                        //alert(msg.code);
                        //console.log(result);
                        //1.解析并显示员工数据
                        build_emps_table(result);
                        //2.解析并显示分页信息
                        build_page_info(result);
                        //3.解析并显示分页条
                        build_page_nav(result);
                    }
                });
            }
    
            function build_emps_table(result) {
                //每次添加数据之前清空表格
                $("#emps_table tbody").empty();
                var emps = result.extend.pageInfo.list;//取到所有查询到的封装到list中的员工
                $
                        .each(
                                emps,
                                function(index, item) {
                                    //alert(item.empName);
                                    var checkBoxTd = $("<td><input type='checkbox' class='check_item'></td>");
                                    var empIdTd = $("<td></td>").append(item.empId);
                                    var empNameTd = $("<td></td>").append(
                                            item.empName);
                                    var genderTd = $("<td></td>").append(
                                            item.gender == 'M' ? "男" : "女");
                                    var emailTd = $("<td></td>").append(item.email);
                                    var deptNameTd = $("<td></td>").append(
                                            item.department.deptName);
                                    var editBt = $("<button></button>").addClass(
                                            "btn btn-primary btn-sm edit_btn")
                                            .append("<span></span>").addClass(
                                                    "glyphicon glyphicon-pencil")
                                            .append("编辑");
                                    //为编辑按钮添加一个自定义属性
                                    editBt.attr("edit-id", item.empId);
                                    var delBt = $("<button></button>").addClass(
                                            "btn btn-danger btn-sm delete_btn")
                                            .append("<span></span>").addClass(
                                                    "glyphicon glyphicon-trash")
                                            .append("删除");
                                    //为删除按钮添加一个自定义属性来表示当前要删除员工的id
                                    delBt.attr("del-id", item.empId);
                                    var btnTd = $("<td></td>").append(editBt)
                                            .append(" ").append(delBt);
                                    //append()方法每次执行完成之后还是返回原来的元素
                                    $("<tr></tr>").append(checkBoxTd).append(
                                            empIdTd).append(empNameTd).append(
                                            genderTd).append(emailTd).append(
                                            deptNameTd).append(btnTd).appendTo(
                                            "#emps_table tbody");
                                });
            }
    
            //构构建分页信息
            function build_page_info(result) {
                $("#page_info_area").empty();
                $("#page_info_area").append(
                        "当前第" + result.extend.pageInfo.pageNum + "页,共"
                                + result.extend.pageInfo.pages + "页,共有"
                                + result.extend.pageInfo.total + "条记录");
                totalRecord = result.extend.pageInfo.total;
                currentPage = result.extend.pageInfo.pageNum;
            }
            //构建分页条,点击分页条要能去下一页等等           
            function build_page_nav(result) {
                //构建分页导航之前将页面清空
                $("#page_nav_area").empty();
                var ul = $("<ul></ul>").addClass("pagination");
                var firstPageLi = $("<li></li>").append(
                        $("<a></a>").append("首页").attr("href", "#"));
                var prePageLi = $("<li></li>").append(
                        $("<a></a>").append("&laquo;"));
                //如果没有上一页则给上一页和首页添加不可点击的效果
                if (result.extend.pageInfo.hasPreviousPage == false) {
                    firstPageLi.addClass("disabled");
                    prePageLi.addClass("disabled");
                } else {
                    //为素添加点击翻页事件
                    firstPageLi.click(function() {
                        to_page(1);
                    });
                    prePageLi.click(function() {
                        to_page(result.extend.pageInfo.pageNum - 1);
                    });
                }
    
                var nextPageLi = $("<li></li>").append(
                        $("<a></a>").append("&raquo;"));
                var lastPageLi = $("<li></li>").append(
                        $("<a></a>").append("末页").attr("href", "#"));
                //如果没有下一页则给下一页和末页添加不可点击的效果
                if (result.extend.pageInfo.hasNextPage == false) {
                    nextPageLi.addClass("disabled");
                    lastPageLi.addClass("disabled");
                } else {
                    nextPageLi.click(function() {
                        to_page(result.extend.pageInfo.pageNum + 1);
                    });
                    lastPageLi.click(function() {
                        to_page(result.extend.pageInfo.pages);
                    });
                }
    
                //1.添加首页和前一页
                ul.append(firstPageLi).append(prePageLi);
                $.each(result.extend.pageInfo.navigatepageNums, function(index,
                        item) {
                    var numLi = $("<li></li>").append(
                            $("<a></a>").append(item).attr("href", "#"));
                    if (result.extend.pageInfo.pageNum == item) {
                        numLi.addClass("active");
                    }
                    //添加点击事件
                    numLi.click(function() {
                        to_page(item);//点击以后发送Ajax请求到当前点击的页码
                    });
                    //2.遍历添加页码
                    ul.append(numLi);
                });
                //3.遍历完成后添加下一页和末页
                ul.append(nextPageLi).append(lastPageLi);
                //4.吧ul加入到nav
                var navEle = $("<nav></nav>").append(ul);
                navEle.appendTo("#page_nav_area");
            }
    
            //该方法用于重置表单弹出时上一次输入的内容以及校验的状态
            function reset_form(ele) {
                $(ele)[0].reset();//重置表单内容
                //清空样式
                $(ele).find("*").removeClass("has-success has-error");
                $(ele).find(".help-block").text("");
            }
            //点击新增按钮弹出模态框
            $("#emp_add_modal_btn").click(function() {
                //表单完整重置(重置表单的样式和内容)
                reset_form("#empAddModal form");
                //发送Aajx请求查询部门信息,显示在下拉列表中
                getDepts("#empAddModal select");
    
                //弹出模态框
                $("#empAddModal").modal({
                    backdrop : "static"
                });
            });
    
            //查出所有部门的信息并显示在下拉列表中
            function getDepts(ele) {
                $(ele).empty();
                $.ajax({
                    type : "GET",
                    url : "${APP_PATH }/depts",
                    success : function(result) {
                        //alert(msg.code);
                        //console.log(result);
                        $.each(result.extend.depts, function() {
                            var optionEle = $("<option></option>").append(
                                    this.deptName).attr("value", this.deptId);
                            optionEle.appendTo(ele);
                        });
    
                    }
                });
            }
    
            /**
             *添加员工表单前端校验函数
             */
            function validate_add_form() {
                //1.首先获取输入框中输入的值
                var empName = $("#emp_add_input").val();
                var regName = /(^[a-zA-Z0-9_-]{6,16}$)|(^[\u2E80-\u9FFF]{2,5})/;
                if (!regName.test(empName)) {
                    //alert("用户名可以是2-5位中文或者6-16位英文和数字的组合");
                    show_validate_msg("#emp_add_input", "error",
                            "用户名可以是2-5位中文或者6-16位英文和数字的组合");
                    return false;
                } else {
                    show_validate_msg("#emp_add_input", "success", "");
                }
                ;
    
                //2.邮箱校验
                var email = $("#email_add_input").val();
                var regEmail = /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/;
                if (!regEmail.test(email)) {
                    //alert("邮箱格式不正确");
                    //清空元素之前的样式
                    show_validate_msg("#email_add_input", "error", "邮箱格式不正确");
                    /* $("#email_add_input").parent().addClass("has-error");
                    $("#email_add_input").next("span").text("邮箱格式不正确"); */
                    return false;
                } else {
                    show_validate_msg("#email_add_input", "success", "");
                    /* $("#email_add_input").parent().addClass("has-success");
                    $("#email_add_input").next("span").text(""); */
                }
    
                return true;
            }
    
            function show_validate_msg(ele, status, msg) {
                //清除当前元素状态
                $(ele).parent().removeClass("has-success has-error");
                $(ele).next("span").text("");
                if ("success" == status) {
                    $(ele).parent().addClass("has-success");
                    $(ele).next("span").text(msg);
                } else if ("error" == status) {
                    $(ele).parent().addClass("has-error");
                    $(ele).next("span").text(msg);
                }
            }
    
            /**
             *发送Ajax请求校验用户名是否重复
             **/
            $("#emp_add_input").change(
                    function() {
                        //1.模态框中填写的表单数据验证后提交给服务器进行保存
                        var empName = this.value;
                        $.ajax({
                            url : "${APP_PATH}/checkuser",
                            type : "POST",
                            data : "empName=" + empName,
                            success : function(result) {
                                if (result.code == 100) {
                                    show_validate_msg("#emp_add_input", "success",
                                            "用户名可用");
                                    $("#emp_save_btn").attr("ajax-va", "success");
                                } else {
                                    show_validate_msg("#emp_add_input", "error",
                                            result.extend.va_msg);
                                    $("#emp_save_btn").attr("ajax-va", "error");
                                }
                            }
                        });
    
                    });
    
            /**
             *点击保存按钮,保存员工
             **/
            $("#emp_save_btn").click(function() {
                //1.模态框中填写的表单数据验证后提交给服务器进行保存
                if (!validate_add_form()) {
                    return false;
                }
                //判断之前的ajax用户名校验是否成功,如果不成功则直接返回false
                if ($(this).attr("ajax-va") == "error") {
                    return false;
                }
                //2.发送AJax请求保存员工
                $.ajax({
                    url : "${APP_PATH}/emp",
                    type : "POST",
                    data : $("#empAddModal form").serialize(),
                    success : function(result) {
                        if (result.code == 100) {
                            //员工保存成功后:
                            //1.关闭模态框
                            $('#empAddModal').modal('hide');
                            //2.来到最后一页,显示插入的数据
                            //发送ajax请求显示最后一页数据即可
                            to_page(totalRecord);
    
                        } else {
                            //显示失败信息
                            //有那个字段得错误信息就显示那个字段的
                            alert(result.extend.errorFields.email);
                            alert(result.extend.errorFields.empName);
                        }
    
                    }
                });
    
            });
    
            //给编辑按钮绑定事件(新版本得jquery中没有live方法转而替换得是on方法)
            $(document).on("click", ".edit_btn", function() {
                //0.查出部门信息并显示部门列表
                getDepts("#empUpdateModal select");
                //1.查出员工信息并显示员工信息
                getEmp($(this).attr("edit-id"));
                //2.把员工id的值传递给模态框的更新按钮
                $("#emp_update_btn").attr("edit-id", $(this).attr("edit-id"));
                //显示模态框
                $("#empUpdateModal").modal({
                    backdrop : "static"
                });
            });
    
            function getEmp(id) {
                $.ajax({
                    url : "${APP_PATH}/emp/" + id,
                    type : "GET",
                    success : function(result) {
                        var empData = result.extend.emp;
                        $("#empName_update_static").text(empData.empName);
                        $("#email_update_input").val(empData.email);
                        $("#empUpdateModal input[name=gender]").val(
                                [ empData.gender ]);
                        $("#empUpdateModal select").val([ empData.dId ]);
                    }
                });
            }
    
            //为员工更新按钮绑定一个点击事件
            $("#emp_update_btn").click(function() {
                //0.首先校验邮箱
                var email = $("#email_update_input").val();
                var regEmail = /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/;
                if (!regEmail.test(email)) {
                    show_validate_msg("#email_update_input", "error", "邮箱格式不正确");
                    return false;
                } else {
                    show_validate_msg("#email_update_input", "success", "");
                }
                //1.发送Ajax请求,保存更新后的员工数据
                $.ajax({
                    url : "${APP_PATH}/emp/" + $(this).attr("edit-id"),
                    type : "PUT",
                    data : $("#empUpdateModal form").serialize(),//+"&_method=PUT" 表单序列话后加上该字符串的意思是,将普通的POST请求转换为PUT请求
                    success : function(result) {
                        //alert(result.msg);
                        //1.关闭模态框
                        $("#empUpdateModal").modal("hide");
                        //2.回到本页面
                        to_page(currentPage);
                    }
                });
            });
    
            //单个删除
            //为删除按钮绑定单击事件(类似于编辑按钮绑定事件)
            $(document).on("click", ".delete_btn", function() {
                //弹出是否删除确认对话框
                var empName = $(this).parents("tr").find("td:eq(2)").text();
                var empId = $(this).attr("del-id");
                //alert($(this).parents("tr").find("td:eq(1)").text());
                if (confirm("确认删除【" + empName + "】吗?")) {
                    //确认,发送ajax请求删除即可
                    $.ajax({
                        url : "${APP_PATH}/emp/" + empId,
                        type : "DELETE",
                        success : function(result) {
                            alert(result.msg);
                            //处理成功后回到本页
                            to_page(currentPage);
                        }
                    });
                }
            });
    
            //完成全选/全不选功能
            $("#check_all").click(function() {
                //$(".check_item")
                $(".check_item").prop("checked", $(this).prop("checked"));
            });
    
            //check_item
            $(document)
                    .on(
                            "click",
                            ".check_item",
                            function() {
                                var flag = $(".check_item:checked").length == $(".check_item").length;
                                $("#check_all").prop("checked", flag);
                            });
    
            //点击全部删除,批量删除
            $("#emp_delete_all_btn").click(
                    function() {
                        var empNames = "";
                        var empIds = "";
                        //遍历选中的checkbox
                        $.each($(".check_item:checked"), function() {
                            empNames += $(this).parents("tr").find("td:eq(2)")
                                    .text()
                                    + ",";
                            empIds += $(this).parents("tr").find("td:eq(1)").text()
                                    + "-";
                        });
                        empNames = empNames.substring(0, empNames.length - 1);
                        empIds = empIds.substring(0, empIds.length - 1);
                        if (confirm("确认删除【" + empNames + "】吗?")) {
                            //发送ajax请求删除
                            $.ajax({
                                url : "${APP_PATH}/emp/" + empIds,
                                type : "DELETE",
                                success : function(result) {
                                    alert(result.msg);
                                    //回到当前页
                                    to_page(currentPage);
                                }
                            });
                        }
    
                    });
            //点击全部删除,批量删除
            $("#dep_search").click(function() {
                    
                    var key=$("#input_search").val();
                    
                    if(key==null||key==""){
                        alert(key);
                    
                    }else{
    
                        //发送ajax请求删除
                        $.ajax({
                                url : "${APP_PATH}/emp/" + key,
                                type : "GET",
                                success : function(result) {
                                    //1.解析并显示员工数据
                                    build_emps_table(result);
                                    //2.解析并显示分页信息
                                    build_page_info(result);
                                    //3.解析并显示分页条
                                    build_page_nav(result);
                                }
                            });
                        }
            });
    
        
            
            </script>
    </body>
    </html>
    


    8. 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/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>com.hsun</groupId>
            <artifactId>spring</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </parent>
        <artifactId>ssm-demo</artifactId>
        <packaging>war</packaging>
    
    
        <!-- 引入项目依赖的jar包 -->
        <dependencies>
    
            <!--日志 -->
            <!-- https://mvnrepository.com/artifact/log4j/log4j -->
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.14</version>
            </dependency>
    
            <!-- 引入pageHelper分页插件 -->
            <dependency>
                <groupId>com.github.pagehelper</groupId>
                <artifactId>pagehelper</artifactId>
                <version>5.0.0</version>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/org.mybatis.generator/mybatis-generator-core -->
            <!-- MBG -->
            <dependency>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-core</artifactId>
                <version>1.3.5</version>
            </dependency>
    
            <!-- 引入Spring SpringMVC -->
            <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>4.3.7.RELEASE</version>
            </dependency>
    
            <!-- 引入Spring test -->
            <!-- https://mvnrepository.com/artifact/org.springframework/spring-test -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>4.3.7.RELEASE</version>
                <scope>test</scope>
            </dependency>
    
            <!-- 引入spring-jdbc(事物控制) -->
            <!-- https://mvnrepository.com/artifact/org.springframework/spring-jdbc -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>4.3.7.RELEASE</version>
            </dependency>
    
            <!-- Spring面向切面编程 -->
            <!-- https://mvnrepository.com/artifact/org.springframework/spring-aspects -->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aspects</artifactId>
                <version>4.3.7.RELEASE</version>
            </dependency>
    
            <!-- 引入mybatis -->
            <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis</artifactId>
                <version>3.4.2</version>
            </dependency>
    
    
            <!-- 引入mybatis整合Spring的适配包 -->
            <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis-spring -->
            <dependency>
                <groupId>org.mybatis</groupId>
                <artifactId>mybatis-spring</artifactId>
                <version>1.3.1</version>
            </dependency>
    
            <!-- 数据库连接池 -->
            <!-- https://mvnrepository.com/artifact/c3p0/c3p0 -->
            <dependency>
                <groupId>c3p0</groupId>
                <artifactId>c3p0</artifactId>
                <version>0.9.1.2</version>
            </dependency>
    
            <!-- mysql驱动 -->
            <!-- https://mvnrepository.com/artifact/mysql/mysql-connector-java -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>5.1.42</version>
            </dependency>
    
    
            <!-- jstl servlet-api junit -->
            <!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>jstl</artifactId>
                <version>1.2</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
                <version>3.0.1</version>
                <scope>provided</scope>
            </dependency>
    
            <!-- https://mvnrepository.com/artifact/junit/junit -->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
    
            <!-- Json数据格式依赖包 -->
            <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>2.8.8</version>
            </dependency>
            <!-- JSR303数据校验支持,Tomcat7及以上的服务器直接在项目中导入jar包即可,tomcat及以下的 服务器需要额外的给服务器中的lib包中替换新标准的el表达jar包 -->
            <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-validator -->
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-validator</artifactId>
                <version>5.4.1.Final</version>
            </dependency>
    
            <!-- commons -->
            <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.5</version>
            </dependency>
        </dependencies>
    
        <!-- <build> <plugins> <plugin> <artifactId>maven-war-plugin</artifactId> 
            <version>3.0.0</version> </plugin> </plugins> </build> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
            <failOnMissingWebXml>false</failOnMissingWebXml> </properties> <failOnMissingWebXml>false</failOnMissingWebXml> -->
    </project>
    

    源码查看

    相关文章

      网友评论

          本文标题:SSM基本整合

          本文链接:https://www.haomeiwen.com/subject/fkcyyftx.html