搭建Spring+SpringMVC+MyBatis工程

使用Maven搭建一個SSM工程,文中有借鑑他人的知識,僅供學習使用:
1、工程預覽:

這裏寫圖片描述

這裏寫圖片描述

2、maven工程使用pom.xml導入相關jar包:如果不使用maven那麼就將jar包下載好,直接放到lib中
首先要創建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>ssm20170621</groupId>
    <artifactId>ssm</artifactId>
    <packaging>war</packaging>
    <version>0.0.1-SNAPSHOT</version>
    <name>ssm Maven Webapp</name>
    <url>http://maven.apache.org</url>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <!-- javaee-web-api包 注意和項目使用的JDK版本對應 -->
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>7.0</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-oxm</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis-spring</artifactId>
            <version>1.2.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-aop</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-expression</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>3.2.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>4.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis</groupId>
            <artifactId>mybatis</artifactId>
            <version>3.2.6</version>
        </dependency>
        <dependency>
            <groupId>commons-io</groupId>
            <artifactId>commons-io</artifactId>
            <version>2.4</version>
        </dependency>
        <dependency>
            <groupId>commons-logging</groupId>
            <artifactId>commons-logging</artifactId>
            <version>1.1.3</version>
        </dependency>
        <dependency>
            <groupId>commons-codec</groupId>
            <artifactId>commons-codec</artifactId>
            <version>1.9</version>
        </dependency>
        <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>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-log4j12</artifactId>
            <version>1.7.7</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-core-asl</artifactId>
            <version>1.9.13</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.jackson</groupId>
            <artifactId>jackson-mapper-asl</artifactId>
            <version>1.9.13</version>
        </dependency>
        <dependency>
            <groupId>aopalliance</groupId>
            <artifactId>aopalliance</artifactId>
            <version>1.0</version>
        </dependency>
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
            <version>1.7.2</version>
        </dependency>
        <dependency>
            <groupId>commons-fileupload</groupId>
            <artifactId>commons-fileupload</artifactId>
            <version>1.3.1</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
        </dependency>
        <!-- 阿里巴巴數據源包 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.0.2</version>
        </dependency>
        <!-- Oracle JDBC Driver -->
        <dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc14</artifactId>
            <version>10.2.0.4.0</version>
        </dependency>
        <dependency>
            <groupId>axis</groupId>
            <artifactId>axis</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>commons-lang</groupId>
            <artifactId>commons-lang</artifactId>
            <version>2.5</version>
        </dependency>
        <!-- <dependency> <groupId>org.jdom</groupId> <artifactId>jdom</artifactId> 
            <version>2.0.2</version> </dependency> -->
        <dependency>
            <groupId>commons-validator</groupId>
            <artifactId>commons-validator</artifactId>
            <version>1.3.1</version>
        </dependency>
        <dependency>
            <groupId>commons-collections</groupId>
            <artifactId>commons-collections</artifactId>
            <version>2.1.1</version>
        </dependency>
        <dependency>
            <groupId>org.mybatis.generator</groupId>
            <artifactId>mybatis-generator-core</artifactId>
            <version>1.3.3</version>
        </dependency>
        <!-- 格式化對象,方便輸出日誌 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.1.37</version>
        </dependency>
        <!-- mybatis延遲加載 -->
        <dependency>
            <groupId>cglib</groupId>
            <artifactId>cglib-nodep</artifactId>
            <version>3.2.4</version>
        </dependency>
        <dependency>
            <groupId>dom4j</groupId>
            <artifactId>dom4j</artifactId>
            <version>1.6</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <finalName>ssm</finalName>
    </build>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>1.8</java.version>
        <spring.version>4.0.2.RELEASE</spring.version>
    </properties>
</project>
---------------------------------------------------------------------
3、配置文件springmvc-servlet.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:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd   
    http://www.springframework.org/schema/tx 
    http://www.springframework.org/schema/tx/spring-tx-3.0.xsd  
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-4.0.xsd
    http://www.springframework.org/schema/mvc 
    http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">
    <!-- springmvc配置begin -->
    <!-- 打開註解配置 -->
    <!-- ajax返回中文亂碼問題 -->
    <mvc:annotation-driven>
        <!-- 消息轉換器 -->
        <mvc:message-converters register-defaults="true">
            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
                <property name="supportedMediaTypes" value="text/html;charset=UTF-8"/>
            </bean>
        </mvc:message-converters>
    </mvc:annotation-driven>

    <!-- 配置掃描註解的路徑,由於bean的注入是由本springmvc-servlet.xml管理的,-->
    <!-- 所以必須讓本文件掃描所有包 -->
    <context:component-scan base-package="com"/>
    <!-- 注入viewResolver -->
    <bean name="viewResolver"
          class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="viewClass"
                  value="org.springframework.web.servlet.view.JstlView"/>
        <property name="prefix" value="/resource/"/>
        <property name="suffix" value=".jsp"/>
    </bean>
    <!-- 用於排除的資源文件,如jdbc、js、css等 -->
    <mvc:resources location="/resource/" mapping="/resource/**" />
    <!-- 使用JSON交互格式 -->
    <bean id="mappingJacksonHttpMessageConverter"
          class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
        <property name="supportedMediaTypes">
            <list>
                <value>text/html;charset=utf-8</value>
                <value>application/json;charset=utf-8</value>
            </list>
        </property>
    </bean>
    <!-- springmvc配置end -->
    <!-- 注入數據源 -->
    <!-- 引入jdbc配置文件 -->
    <context:property-placeholder location="classpath:base-config.properties"/>

    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="${jdbc_driverClassName}"/>
        <property name="url" value="${jdbc_url}"/>
        <property name="username" value="${jdbc_username}"/>
        <property name="password" value="${jdbc_password}"/>
    </bean>
    <!-- mybatis sqlSessionFactory -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="mapperLocations" value="classpath:com/*/mapper/*.xml"/>
    </bean>

    <!-- mybatis映射接口 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
        <!-- dao層 -->
        <property name="basePackage" value="com.*.dao"/>
    </bean>
    <!-- 開啓事務管理 -->
    <bean id="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>
    <!-- 開啓註解支持事務 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>
    <!-- <aop:aspectj-autoproxy/> -->
    <!-- 支持文件上傳 -->
    <!-- <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver" /> -->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <property name="maxUploadSize" value="104857600"/>
        <property name="maxInMemorySize" value="4096"/>
        <property name="defaultEncoding" value="UTF-8"></property>
    </bean>
    <!-- spring mvc國際化配置 -->
    <mvc:interceptors>
        <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"/>
    </mvc:interceptors>

    <bean id="localeResolver"
          class="org.springframework.web.servlet.i18n.SessionLocaleResolver"/>
    <bean id="messageSource" class="org.springframework.context.support.ResourceBundleMessageSource">
        <property name="basenames">
            <list>
                <value>LocalStrings</value>
            </list>
        </property>
        <property name="useCodeAsDefaultMessage" value="true"/>
    </bean>

    <!-- 使用jdbcTemplate -->
    <bean id="jdbcTemplate"
          class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource">
            <ref bean="dataSource"/>
        </property>
    </bean>
</beans>

---------------------------------------------------------------------
4、配置文件web.xml

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

<web-app>
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <init-param>
            <param-name>ConfigLocation</param-name>
            <param-value>/WEB-INF/springmvc-servlet.xml</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>springmvc</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>
    <listener>
        <listener-class>
            org.springframework.web.context.request.RequestContextListener
        </listener-class>
    </listener>

    <filter>
        <filter-name>characterEncodingFilter</filter-name>
        <filter-class>
            org.springframework.web.filter.CharacterEncodingFilter
        </filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>characterEncodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/springmvc-servlet.xml</param-value>
    </context-param>
</web-app>

---------------------------------------------------------------------
5、實體bean的配置文件,EmpMapper.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.emp.dao.EmpDao">
    <resultMap id="baseResultMap" type="com.emp.entity.Emp">
        <id column="EMPNO" property="empNo" jdbcType="DECIMAL"/>
        <result column="ENAME" property="ename" jdbcType="VARCHAR"/>
        <result column="JOB" property="job" jdbcType="VARCHAR"/>
        <result column="MGR" property="mgr" jdbcType="VARCHAR"/>
        <result column="HIREDATE" property="hireDate" jdbcType="TIMESTAMP"/>
        <result column="SAL" property="sal" jdbcType="DECIMAL"/>
        <result column="COMM" property="comm" jdbcType="DECIMAL"/>
        <result column="DEPTNO" property="deptNo" jdbcType="DECIMAL"/>
    </resultMap>

    <select id="selectAll" resultMap="baseResultMap">
        SELECT
        *
        FROM EMP
    </select>

    <select id="selectEmpByEmpNo" resultMap="baseResultMap">
        SELECT
        *
        FROM EMP
        WHERE EMPNO=#{empNo,jdbcType=DECIMAL}
    </select>

    <select id="selectEmpByName" resultMap="baseResultMap" parameterType="java.lang.String">
        SELECT
        *
        FROM EMP
        WHERE ENAME=#{ename,jdbcType=VARCHAR}
    </select>

    <select id="selectEmpByConditions" resultMap="baseResultMap" parameterType="com.emp.entity.Emp">
        SELECT
        *
        FROM EMP
        WHERE 1=1
        <if test="empNo != null">
            AND EMPNO=#{empNo,jdbcType=DECIMAL}
        </if>
        <if test="ename != null">
            AND ENAME=#{ename,jdbcType=VARCHAR}
        </if>
        <if test="job != null">
            AND JOB=#{job,jdbcType=VARCHAR}
        </if>
        <if test="mgr != null">
            AND MGR=#{mgr,jdbcType=VARCHAR}
        </if>
        <if test="hireDate != null">
            AND HIREDATE=#{hireDate,jdbcType=TIMESTAMP}
        </if>
        <if test="sal != null">
            AND SAL=#{sal,jdbcType=DECIMAL}
        </if>
        <if test="comm != null">
            AND COMM=#{comm,jdbcType=DECIMAL}
        </if>
        <if test="deptNo != null">
            AND DEPTNO=#{deptNo,jdbcType=DECIMAL}
        </if>
    </select>

    <delete id="deleteEmp" parameterType="java.lang.Integer">
        DELETE FROM EMP WHERE EMPNO=#{empNo,jdbcType=DECIMAL}
    </delete>

    <insert id="insertEmp" parameterType="com.emp.entity.Emp">
        INSERT INTO EMP(EMPNO,ENAME,JOB,MGR,HIREDATE,SAL,COMM,DEPTNO)
        VALUES(#{empNo,jdbcType=DECIMAL},
        #{ename,jdbcType=VARCHAR},
               #{job,jdbcType=VARCHAR},
        #{mgr,jdbcType=VARCHAR},
               #{hireDate,jdbcType=TIMESTAMP},
        #{sal,jdbcType=DECIMAL},
               #{comm,jdbcType=DECIMAL},
        #{deptNo,jdbcType=DECIMAL})
    </insert>
    <update id="modifyEmp" parameterType="com.emp.entity.Emp">
        UPDATE EMP
        <set>
            <if test="ename != null">
                ENAME=#{ename,jdbcType=VARCHAR},
            </if>
            <if test="job != null">
                JOB=#{job,jdbcType=VARCHAR},
            </if>
            <if test="mgr != null">
                MGR=#{mgr,jdbcType=VARCHAR},
            </if>
        </set>
        <where>
            EMPNO=#{empNo,jdbcType=DECIMAL}
        </where>
    </update>
</mapper>

6、jdbc.properties文件:

jdbc_driverClassName=oracle.jdbc.driver.OracleDriver
jdbc_url=jdbc:oracle:thin:@localhost:1521:orcl
jdbc_username=scott
jdbc_password=1


7、java代碼:

ENTITY
------

package com.emp.entity;

import java.io.Serializable;
import java.util.Date;

/**
 * @author lijg7 on 2017/6/19 - 16:55.
 */
public class Emp implements Serializable {

    private static final long serialVersionUID = 7960327610388638028L;

    private Double comm;

    private Integer deptNo;

    private Integer empNo;

    private String ename;

    private Date hireDate;

    private String job;

    private String mgr;

    private Double sal;

    public Emp(){

    }

    @Override
    public boolean equals(Object o) {
        if (this == o)
            return true;
        if (o == null || getClass() != o.getClass())
            return false;

        Emp emp = (Emp) o;

        if (empNo != null ? !empNo.equals(emp.empNo) : emp.empNo != null)
            return false;
        if (ename != null ? !ename.equals(emp.ename) : emp.ename != null)
            return false;
        if (job != null ? !job.equals(emp.job) : emp.job != null)
            return false;
        if (mgr != null ? !mgr.equals(emp.mgr) : emp.mgr != null)
            return false;
        if (hireDate != null ? !hireDate.equals(emp.hireDate) : emp.hireDate != null)
            return false;
        if (sal != null ? !sal.equals(emp.sal) : emp.sal != null)
            return false;
        if (comm != null ? !comm.equals(emp.comm) : emp.comm != null)
            return false;
        return deptNo != null ? deptNo.equals(emp.deptNo) : emp.deptNo == null;
    }

    public Double getComm() {
        return comm;
    }

    public Integer getDeptNo() {
        return deptNo;
    }

    public Integer getEmpNo() {
        return empNo;
    }

    public String getEname() {
        return ename;
    }

    public Date getHireDate() {
        return hireDate;
    }

    public String getJob() {
        return job;
    }

    public String getMgr() {
        return mgr;
    }

    public Double getSal() {
        return sal;
    }
    @Override
    public int hashCode() {
        int result = empNo != null ? empNo.hashCode() : 0;
        result = 31 * result + (ename != null ? ename.hashCode() : 0);
        result = 31 * result + (job != null ? job.hashCode() : 0);
        result = 31 * result + (mgr != null ? mgr.hashCode() : 0);
        result = 31 * result + (hireDate != null ? hireDate.hashCode() : 0);
        result = 31 * result + (sal != null ? sal.hashCode() : 0);
        result = 31 * result + (comm != null ? comm.hashCode() : 0);
        result = 31 * result + (deptNo != null ? deptNo.hashCode() : 0);
        return result;
    }
    public void setComm(Double comm) {
        this.comm = comm;
    }
    public void setDeptNo(Integer deptNo) {
        this.deptNo = deptNo;
    }
    public void setEmpNo(Integer empNo) {
        this.empNo = empNo;
    }
    public void setEname(String ename) {
        this.ename = ename;
    }
    public void setHireDate(Date hireDate) {
        this.hireDate = hireDate;
    }
    public void setJob(String job) {
        this.job = job;
    }

    public void setMgr(String mgr) {
        this.mgr = mgr;
    }

    public void setSal(Double sal) {
        this.sal = sal;
    }

    @Override
    public String toString() {
        return "Emp{" + "empNo=" + empNo + ", ename='" + ename + '\'' + ", job='" + job + '\'' + ", mgr='" + mgr +
                '\'' + ", hireDate=" + hireDate + ", sal=" + sal + ", comm=" + comm + ", deptNo=" + deptNo + '}';
    }
}

DAO--不需要實現類
-----------

package com.emp.dao;

import com.emp.entity.Emp;

import java.util.List;

/**
 * @author lijg7 on 2017/6/19 - 16:56.
 */
public interface EmpDao {
    public List<Emp> selectAll();

    public Emp selectEmpByEmpNo(Integer empNo);

    public Emp selectEmpByName(String ename);

    public List<Emp> selectEmpByConditions(Emp emp);

    public int deleteEmp(Integer empNo);

    public int modifyEmp(Emp emp);

    public int insertEmp(Emp emp);
}

SERVICE
-------

package com.emp.service;

import com.emp.entity.Emp;

import java.util.List;

/**
 * @author lijg7 on 2017/6/19 - 16:56.
 */
public interface EmpService {
    public List<Emp> selectAll();

    public Emp selectEmpByEmpNo(Integer empNo);

    public Emp selectEmpByName(String ename);

    public List<Emp> selectEmpByConditions(Emp emp);

    public int deleteEmp(Integer empNo);

    public int modifyEmp(Emp emp);

    public int insertEmp(Emp emp);
}

SERVICEIMPL
-----------

package com.emp.service.impl;
import com.emp.dao.EmpDao;
import com.emp.entity.Emp;
import com.emp.service.EmpService;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;
/**
 * @author lijg7 on 2017/6/19 - 16:57.
 */
@Service
public class EmpServiceImpl implements EmpService {
    @Resource(name = "empDao")
    private EmpDao empDao;
//@Resource    name可以不寫,默認就是empDao,如果將名稱改了,則要指定name
//private EmpDao empDao;

    public List<Emp> selectAll() {
        return this.empDao.selectAll();
    }

    public Emp selectEmpByEmpNo(Integer empNo) {
        return this.empDao.selectEmpByEmpNo(empNo);
    }

    public Emp selectEmpByEname(String ename) {
        return this.empDao.selectEmpByName(ename);
    }

    public List<Emp> selectEmpByConditions(Emp emp) {
        return this.empDao.selectEmpByConditions(emp);
    }

    public Emp selectEmpByName(String ename) {
        return this.empDao.selectEmpByName(ename);
    }

    public int deleteEmp(Integer empNo) {
        return this.empDao.deleteEmp(empNo);
    }

    public int modifyEmp(Emp emp) {
        return this.empDao.modifyEmp(emp);
    }

    public int insertEmp(Emp emp) {
        return this.empDao.insertEmp(emp);
    }

}

CONTROLLER
----------

(1)登錄LoginController
這裏用到了個常量文件
package com.emp.constants;

/**
 * @author lijg7 on 2017/6/19 - 16:57.
 */
public class EmpConstants {
    public static final String USER_EDIT_INFO = "/jsp/emp/user-editInfo";
    public static final String USER_INFO = "/jsp/emp/user-info";
}

//return跳轉的是jsp文件例如http://localhost:8080/ssm/login.jsp,
    直接寫return "login";因爲前綴與後綴在springmvc-servlet中配置過了。
--------------------------------------------------------------------------------

LoginController:
----------------
package com.login.controller;
import com.constants.Constants;
import com.emp.entity.Emp;
import com.emp.service.EmpService;
import com.login.entity.LoginVo;
import com.util.DateUtil;
import com.util.UtilsForString;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.annotation.Resource;
import javax.servlet.http.HttpSession;

@Controller
@RequestMapping("busi/login")
public class LoginController {

    private static final String operTime = DateUtil.insertDate();

    @Resource
    private EmpService empService;

    @RequestMapping("/toLogin")
    public String toLoginJsp() {
        System.out.println("進入登錄頁面……" + operTime);
        return Constants.JSP.LOGIN_PAGE;
    }

    @RequestMapping("/doLogin")
    @ResponseBody
    public String doLogin(HttpSession session,LoginVo vo) {
        System.out.println("用戶登錄……" + operTime);
        if (null != vo) {
            if (UtilsForString.isEmpty(vo.getEname())) {
                System.out.println("用戶名爲空……" + operTime);
                return "ng";
            }
            System.out.println(this.empService.selectAll());
            String name = UtilsForString.isNotEmpty(vo.getEname()) ? vo.getEname().toUpperCase() : "";
            Emp dbEmp = this.empService.selectEmpByName(name);
            if (null == dbEmp || !vo.getEname().equalsIgnoreCase(dbEmp.getEname())) {
                System.out.println("用戶名不正確……" + operTime);
                return "ng";
            }
            System.out.println(vo.getEname() + ",登錄成功……" + operTime);
            session.setAttribute("currentUser", dbEmp);
            return "ok";
        }
        return null;
    }

    @RequestMapping("/frontPage")
    public String login(HttpSession session) {
        System.out.println("登錄到首頁!!!!" + operTime);
        return Constants.JSP.FRONT_PAGE;
    }
}
--------------------------------------------------------------
8、JSP頁面:
啓動tomcat,訪問http://localhost:8880/ssm我將端口修改了,因爲tomcat太多了~
下面是默認加載的index.jsp,進入該頁面將打開如下鏈接,到login.jsp:

(1)login.jsp圖一

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page language="java" pageEncoding="UTF-8" isELIgnored="false"%>
<%
    String path = request.getContextPath();
    String bp = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
    String cssBootstrap = bp + "resource/common/uiframe/bootstrap/css/bootstrap.min.css";
    String jsJquery = bp + "resource/common/js/jquery-1.11.2.min.js";
    String jsBootstrap = bp + "resource/common/uiframe/bootstrap/js/bootstrap.min.js";
%>
<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3個meta標籤*必須*放在最前面,任何其他內容都*必須*跟隨其後! -->
    <title>用戶登錄</title>
    <!-- Bootstrap所需要的資源,jQuery必須在Bootstrap.js之前 -->
    <link href="<%=cssBootstrap%>" rel="stylesheet"/>
    <link href="<%=bp%>resource/common/uiframe/bootstrap-select/dist/css/bootstrap-select.css" rel="stylesheet"/>
    <script type="text/javascript" src="<%=jsJquery%>"></script>
    <script type="text/javascript" src="<%=jsBootstrap%>"></script>
    <script type="text/javascript" src="<%=bp%>resource/common/uiframe/bootstrap-select/dist/js/bootstrap-select.js"></script>
    <style type="text/css">
        .container{
            padding-top:100px;
        }
    </style>
    <script type="text/javascript">
        $(function(){
            <%-- 這是鼠標移動後出現的tip提示 --%>
            $('[data-toggle="popover"]').popover();
        });
        <%-- enter鍵登錄 --%>
        $(document).keydown(function() {
            if (event.keyCode == 13) {
                if ($("#loginBtn").is(":disabled") == false) {
                    $("#loginBtn").click();
                }
            }
        });
        function resetValue(){
            $("input").val("");
        }
<!--這裏是登錄的邏輯url都是controller的RequestMapping路徑-->
<!--這裏使用到了ajax需要返回值則在java方法中添加@ResponseBody,-->
<!--返回值類型可以是任意類型。-->
        function login(){
            $.post("<%=bp%>busi/login/doLogin",{
                "ename":$("#ename").val()
            },function(result){
                if("ok"==result){
                    window.location="<%=bp%>busi/login/frontPage";
                }else{
                    window.location="<%=bp%>index.jsp";
                }
            });
        }
    </script>
</head>
<body>
    <div class="container">
        <div class="col-md-5 col-md-offset-3">
            <div class="panel panel-default">
                <div class="panel-heading bg-info">
                    用戶登錄
                </div>
                <div class="panel-body">
                    <form class="form-horizontal">
                        <div class="form-group">
                            <label class="col-md-3 control-label" for="ename">登錄名:</label>
                            <div class="col-md-6">
                                <input id="ename" class="form-control" type="text" name="ename" value="scott" placeholder="請輸入登錄名"/>
                            </div>
                        </div>
                        <div class="form-group">
                            <label class="col-md-3 control-label" for="password">密碼:</label>
                            <div class="col-md-6">
                                <input id="password" class="form-control" type="password" name="job" value="" placeholder="請輸入密碼"/>
                            </div>
                        </div>
                        <div class="form-group">
                            <label class="col-md-3 control-label" for="vcode">驗證碼:</label>
                            <div class="col-md-6">
                                <input id=vcode class="form-control" type="text" name="vcode"
                                    value=''/>
                            </div>
                        </div>
                        <div class="form-group">
                            <div class="col-md-5 col-md-offset-5">
                                <button id="loginBtn" type="button" onclick="login()" class="btn btn-primary">登錄</button>
                            </div>
                        </div>
                    </form>
                </div>
                <div class="panel-footer">

                </div>
            </div>
        </div>
    </div>
</body>
</html>


--------------------------------------------------------------------------------
(2)上面是模擬登錄,成功後就到了front-page.jsp圖二

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page language="java" pageEncoding="UTF-8" isELIgnored="false"%>
<%
    String path = request.getContextPath();
    String bp = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
    String cssBootstrap = bp + "resource/common/uiframe/bootstrap/css/bootstrap.min.css";
    String jsJquery = bp + "resource/common/js/jquery-1.11.2.min.js";
    String jsBootstrap = bp + "resource/common/uiframe/bootstrap/js/bootstrap.min.js";
%>
<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3個meta標籤*必須*放在最前面,任何其他內容都*必須*跟隨其後! -->
    <title>我的工作臺</title>
    <!-- Bootstrap所需要的資源,jQuery必須在Bootstrap.js之前 -->
    <link href="<%=cssBootstrap%>" rel="stylesheet"/>
    <link href="<%=bp%>resource/common/uiframe/bootstrap-select/dist/css/bootstrap-select.css" rel="stylesheet"/>
    <script type="text/javascript" src="<%=jsJquery%>"></script>
    <script type="text/javascript" src="<%=jsBootstrap%>"></script>
    <script type="text/javascript" src="<%=bp%>resource/common/uiframe/bootstrap-select/dist/js/bootstrap-select.js"></script>
    <style type="text/css">
        body{
            background-color: #F1F3F7;
        }
        body *{
            padding: 0px;
            margin: 0px;
        }
        body .container,.container .col-md-12{
            width: 100%;
            height: 90%;
            padding-top: 5px;
        }
        body .container .panel{
            background-color: #FFFFFF;
        }
        body .container a:hover{
            cursor: pointer;
        }
        #pendingToDoArea{
            margin-top: 5px;
        }

        label:hover{
            cursor: pointer;
        }
        .dropdown-menu{
            border: none;
        }
        .well{
            background-color: #FFFFFF;
            border:none;
            margin-bottom: 0px;
        }
        iframe{
            height: 350px;
        }
    </style>
    <script type="text/javascript">
        $(function(){
            <%-- 這是鼠標移動後出現的tip提示 --%>
            $('[data-toggle="popover"]').popover();
        });
        function toModifyUserInfo(){
            window.location="<%=bp%>busi/emp/userEditInfo?empNo=${currentUser.empNo}";
        }
    </script>
</head>
<body>
    <div class="container">
        <div class="col-md-12">
            <div class="panel panel-default">
                <div class="panel-body">
                    <div id="mainAcctInfoArea" class="col-md-12 bg-info" style="padding-top: 25px;">
                        <div class="row">
                            <div class="col-md-1" onclick="toModifyUserInfo()">
                                <a tabindex="0" class="thumbnail" role="button" data-toggle="popover" data-trigger="hover"
                                   data-content="${currentUser.ename},歡迎回來~" data-container="body">
                                    <img src="<%=bp%>resource/common/images/img_main/user2.png" width="80px" height="80px">
                                </a>
                            </div>
                            <div class="col-md-11">
                                <span class="h1">${currentUser.ename}</span>&nbsp;<span>歡迎回來</span>
                            </div>
                        </div>
                    </div>
                    <div class="row">
                        <div class="col-md-6">
                            <div class="btn-toolbar">
                                <a class="btn btn-info" href="<%=bp%>busi/emp/userInfo">僱員列表</a>
                                <a class="btn btn-info" href="<%=bp%>busi/emp/userEditInfo?empNo=${currentUser.empNo}">個人信息${currentUser.empNo}</a>
                            </div>
                        </div>
                    </div>
                </div>
            </div>
        </div>
    </div>
</body>
</html>

(3)進入首頁後,可以點擊對應按鈕,讀取數據庫,展示信息:
僱員列表userInfo.jsp:圖三

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page language="java" pageEncoding="UTF-8" isELIgnored="false"%>
<%
    String path = request.getContextPath();
    String bp = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
    String cssBootstrap = bp + "resource/common/uiframe/bootstrap/css/bootstrap.min.css";
    String jsJquery = bp + "resource/common/js/jquery-1.11.2.min.js";
    String jsBootstrap = bp + "resource/common/uiframe/bootstrap/js/bootstrap.min.js";
%>
<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3個meta標籤*必須*放在最前面,任何其他內容都*必須*跟隨其後! -->
    <title>查看僱員信息</title>
    <!-- Bootstrap所需要的資源,jQuery必須在Bootstrap.js之前 -->
    <link href="<%=cssBootstrap%>" rel="stylesheet"/>
    <link href="<%=bp%>resource/common/uiframe/bootstrap-select/dist/css/bootstrap-select.css" rel="stylesheet"/>
    <script type="text/javascript" src="<%=jsJquery%>"></script>
    <script type="text/javascript" src="<%=jsBootstrap%>"></script>
    <script type="text/javascript" src="<%=bp%>resource/common/uiframe/bootstrap-select/dist/js/bootstrap-select.js"></script>
    <style type="text/css">
        .container{
            padding-top:100px;
        }
    </style>
    <script type="text/javascript">
        function doDelete(empNo){
            $.post("<%=bp%>busi/emp/userDelInfo",{
                "empNo":empNo
            },function(ret){

            });
        }
    </script>
</head>
<body>
    <div class="container">
        <div class="col-md-12">
            <div class="panel panel-default">
                <div class="panel-heading bg-info">
                    <a href="<%=bp%>busi/login/frontPage">首頁</a> 查看僱員信息 <a href="<%=bp%>busi/emp/userEditInfo?operType=add">新增</a>
                </div>
                <div class="panel-body">
                    <table class="table table-striped table-bordered table-hover table-condensed table-responsive">
                        <tr>
                            <th>編號</th>
                            <th>姓名</th>
                            <th>職位</th>
                            <th>上級</th>
                            <th>所在部門</th>
                            <th>薪水</th>
                            <th>佣金</th>
                            <th>入職日期</th>
                            <th>操作</th>
                        </tr>
                        <c:choose>
                            <c:when test="${not empty empList}">
                                <c:forEach items="${empList}" var="emp" varStatus="index">
                                    <tr>
                                        <td>${emp.empNo}</td>
                                        <td>${emp.ename}</td>
                                        <td>${emp.job}</td>
                                        <td>${emp.mgr}</td>
                                        <td>${emp.deptNo}</td>
                                        <td>${emp.sal}</td>
                                        <td>${emp.comm}</td>
                                        <td><fmt:formatDate value="${emp.hireDate}" pattern="yyyy-mm-dd"/></td>
                                        <td>
                                            <a href="<%=bp%>busi/emp/userEditInfo?empNo=${emp.empNo}&operType=edit" class="btn btn-primary btn-sm">編輯</a>
                                            <a href="javascript:void(0);" onclick="doDelete(${emp.empNo})" class="btn btn-danger btn-sm">刪除</a>
                                        </td>
                                    </tr>
                                </c:forEach>
                            </c:when>
                            <c:otherwise>
                                <tr>
                                    <td>沒有僱員信息</td>
                                </tr>
                            </c:otherwise>
                        </c:choose>
                    </table>
                </div>
                <div class="panel-footer">
                    <span class="glyphicon glyphicon-grain"></span>
                    <a href="<%=bp%>busi/login/frontPage">首頁</a>
                </div>
            </div>
        </div>
    </div>
</body>
</html>

(4)如果點擊首頁的個人信息則跳轉到個人信息編輯頁面user-editInfo.jsp:圖四

<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ page language="java" pageEncoding="UTF-8" isELIgnored="false"%>
<%
    String path = request.getContextPath();
    String bp = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
    String cssBootstrap = bp + "resource/common/uiframe/bootstrap/css/bootstrap.min.css";
    String jsJquery = bp + "resource/common/js/jquery-1.11.2.min.js";
    String jsBootstrap = bp + "resource/common/uiframe/bootstrap/js/bootstrap.min.js";
%>
<!DOCTYPE HTML>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1">
    <!-- 上述3個meta標籤*必須*放在最前面,任何其他內容都*必須*跟隨其後! -->
    <title>個人信息編輯</title>
    <!-- Bootstrap所需要的資源,jQuery必須在Bootstrap.js之前 -->
    <link href="<%=cssBootstrap%>" rel="stylesheet"/>
    <link href="<%=bp%>resource/common/uiframe/bootstrap-select/dist/css/bootstrap-select.css" rel="stylesheet"/>
    <script type="text/javascript" src="<%=jsJquery%>"></script>
    <script type="text/javascript" src="<%=jsBootstrap%>"></script>
    <script type="text/javascript" src="<%=bp%>resource/common/js/datePicker/WdatePicker.js"></script>
    <script type="text/javascript" src="<%=bp%>resource/common/uiframe/bootstrap-select/dist/js/bootstrap-select.js"></script>
    <style type="text/css">
        .container{
            padding-top:100px;
        }
    </style>
    <script type="text/javascript">

        $(function(){
            <%-- 這是鼠標移動後出現的tip提示 --%>
            $('[data-toggle="popover"]').popover();
        });
        function resetValue(){
            $("input").val("");
        }
        function val(id){
            return $("#"+id).val();
        }
        function doModify(operType){
            var empNo=val("empNo");
            var ename=val("ename");
            var job=val("job");
            var mgr=val("mgr");
            var hireDate=val("hireDate");
            var sal=val("sal");
            var comm=val("comm");
            var deptNo=val("dept");
            //alert(empNo + ename + job + mgr + hireDate + sal + comm + deptNo);
            $.post("<%=bp%>busi/emp/doEditUserInfo",{
                "operType":"${operType}",
                "empNo":empNo,
                "ename":ename,
                "job":job,
                "mgr":mgr,
                "hireDate":hireDate,
                "sal":sal,
                "comm":comm,
                "deptNo":deptNo
            },function(ret){
                alert(ret);
            });
        }
    </script>
</head>
<body>
    <div class="container">
        <div class="col-md-12">
            <div class="panel panel-default">
                <div class="panel-heading bg-info">
                    <a href="<%=bp%>busi/login/frontPage">首頁</a> 個人信息 - ${operType}
                </div>
                <div class="panel-body">
                    <form class="form-horizontal">
                        <div class="form-group">
                            <label class="col-md-3 control-label" for="empNo">編號:</label>
                            <div class="col-md-6">
                                <input id="empNo" class="form-control" type="text" name="empNo" value="${emp.empNo}"/>
                            </div>
                        </div>
                        <div class="form-group">
                            <label class="col-md-3 control-label" for="ename">姓名:</label>
                            <div class="col-md-6">
                                <input id="ename" class="form-control" type="text" name="ename" value="${emp.ename}"/>
                            </div>
                        </div>
                        <div class="form-group">
                            <label class="col-md-3 control-label" for="job">職位:</label>
                            <div class="col-md-6">
                                <input id="job" class="form-control" type="text" name="job" value="${emp.job}"/>
                            </div>
                        </div>
                        <div class="form-group">
                            <label class="col-md-3 control-label" for="mgr">上級:</label>
                            <div class="col-md-6">
                                <select id="mgr" class="selectpicker show-tick form-control">
                                    <option value="BLAKE" selected="selected">BLAKE</option>
                                    <option value="CLARK">CLARK</option>
                                    <option value="JONES">JONES</option>
                                </select>
                            </div>
                        </div>
                        <div class="form-group">
                            <label class="col-md-3 control-label" for="hireDate">入職日期:</label>
                            <div class="col-md-6">
                                <input id=hireDate class="form-control" type="text" name="hireDate"
                                    value='<fmt:formatDate value="${emp.hireDate}" pattern="yyyy-MM-dd"/>'/>
                            </div>
                        </div>
                        <div class="form-group">
                            <label class="col-md-3 control-label" for="sal">薪水:</label>
                            <div class="col-md-6">
                                <input id="sal" class="form-control" type="text" name="sal" value="${emp.sal}"/>
                            </div>
                        </div>
                        <div class="form-group">
                            <label class="col-md-3 control-label" for="comm">佣金:</label>
                            <div class="col-md-6">
                                <input id="comm" class="form-control" type="text" name="comm" value="${emp.comm}"/>
                            </div>
                        </div>
                        <div class="form-group">
                            <label class="col-md-3 control-label" for="dept">部門:</label>
                            <div class="col-md-6">
                                <input id="dept" class="form-control" type="text" name="dept" value="${emp.deptNo}"/>
                            </div>
                        </div>
                        <div class="form-group">
                            <div class="col-md-5 col-md-offset-5">
                                <button type="button" onclick="resetValue()" class="btn btn-warning">重置</button>
                                <button type="button" onclick="doModify()" class="btn btn-primary">提交</button>
                            </div>
                        </div>
                    </form>
                </div>
                <div class="panel-footer">
                    <a href="<%=bp%>busi/login/frontPage">首頁</a>
                </div>
            </div>
        </div>
    </div>
</body>
</html>

(5)在僱員列表頁有個新增鏈接點擊後使用的是user-editInfo.jsp,有operType區別加載頁面內容:
這裏寫圖片描述


至此SSM工程搭建完畢!這是基礎的沒有添加過多設計的工程,會有欠缺,僅學習使用。
圖一:
這裏寫圖片描述

圖二:
這裏寫圖片描述

圖三:
這裏寫圖片描述

圖四:
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章