1. 程式人生 > >基於maven搭建spring+springMVC+mybatis(SSM)框架專案

基於maven搭建spring+springMVC+mybatis(SSM)框架專案

一.簡介

這篇文章是記錄我自己手動搭建基於maven的SSM(spring+springMVC+mybatis)框架專案的整個過程,目的是為了加深印象和方便以後查閱以及整理思路。

二.開發環境準備

(1)系統:Windows10(專業版)

(2)eclispe版本:Eclipse Java EE IDE for Web Developers.(4.6.2)

(3)maven版本:apache-maven-3.5.3

(4)jdk版本:jdk1.8.0_172

(5)tomcat版本:apache-tomcat-7.0.90

(6)資料庫:oracle(11.2.0.4.0)

三.搭建專案

(1)建立maven專案:

預設next到這個介面:

繼續點選next到這個介面:輸入web選擇字尾是maven-archetype-webapp的選項,然後繼續點選next

到了這個介面輸入圖中Group id,Artifac id兩個ID(必須輸入,名稱自定義),然後點選next:

整個maven專案結構暫時完成:

接下來調整專案結構:

這個時候我們看到JRE System Libryary後面顯示的是[J2SE-1.5],並且沒有maven專案的src/main/java等資料夾,原因是我們沒有選擇正確的JDK版本,這時候我們需要調整對應的JRE環境,在工程上右鍵Build Path-Configure Build Path,在Libraries下選中JRE,右側edit,選擇我們自己的jdk版本:

點選apply後點擊ok後完成jdk配置,你會神奇的發下專案結構變了,但是還是缺少一個src/test/resources資料夾,沒關係,這裡我們自己手動建立一個就是了

建立完成,專案結構調整完成

(2)新增pom依賴,下載SSM框架所需jar包

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<groupId>com.zd</groupId>
	<artifactId>testMavenSSM</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>SSMDemo Maven Webapp</name>
	<url>http://maven.apache.org</url>
	<properties>
		<!-- Spring版本號 -->
		<spring.version>4.3.8.RELEASE</spring.version>
		<!--json版本號  -->
		<jackson.version>2.5.4</jackson.version>
	</properties>
	<dependencies>
		<!-- Spring相關包 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-aop</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>${spring.version}</version>
		</dependency>
		<!-- AOP相關包 -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjrt</artifactId>
			<version>1.8.0</version>
		</dependency>
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjweaver</artifactId>
			<version>1.8.0</version>
		</dependency>
		<!-- MyBatis相關包 -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.3.0</version>
		</dependency>
		<!-- MySQL相關包 -->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.31</version>
		</dependency>
		
		<dependency>
            <groupId>com.oracle</groupId>
            <artifactId>ojdbc6</artifactId>
            <version>11.2.0.4.0</version>
        </dependency>
		
		<!-- 資料庫連線池 -->
		<dependency>
			<groupId>com.alibaba</groupId>
			<artifactId>druid</artifactId>
			<version>1.0.20</version>
		</dependency>
		<!-- Spring整合MyBatis -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.2.3</version>
		</dependency>
		<!-- JSP標準標籤庫 -->
		<dependency>
			<groupId>javax.servlet</groupId>
			<artifactId>jstl</artifactId>
			<version>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.21</version>
		</dependency>
		<!--新增json依賴  -->
	<dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>${jackson.version}</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>${jackson.version}</version>
    </dependency>
		
		<!-- 單元測試相關包 -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>3.8.1</version>
			<scope>test</scope>
		</dependency>
	</dependencies>
	<build>
		<finalName>testMavenSSM</finalName>
	</build>
</project>

Ctrl+s儲存後就能看到相應的依賴包:

(3)配置檔案

1.在resources資料夾下面建立spring-mybatis.xml,配置好該xml檔案內容:

<?xml version="1.0" encoding="UTF-8"?>    
<beans xmlns="http://www.springframework.org/schema/beans"    
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"    
    xmlns:context="http://www.springframework.org/schema/context"    
    xmlns:mvc="http://www.springframework.org/schema/mvc"    
    xsi:schemaLocation="http://www.springframework.org/schema/beans      
                        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd      
                        http://www.springframework.org/schema/context      
                        http://www.springframework.org/schema/context/spring-context-3.1.xsd      
                        http://www.springframework.org/schema/mvc      
                        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">    
    <!-- 自動掃描 -->    
    <context:component-scan base-package="com.zd.maven" />    
    <!-- 引入配置檔案 -->    
    <bean id="propertyConfigurer"    
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">    
        <property name="locations">
        	<list>
        		<value>classpath:jdbc.properties</value>
        		<value>classpath:log4j.properties</value>
        	</list>
        </property>   
    </bean>   
    <!-- 配置資料來源 -->   
    <bean id="dataSource"    
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">    
        <property name="driverClassName" value="${jdbc.driver}" />    
        <property name="url" value="${jdbc.url}" />    
        <property name="username" value="${jdbc.username}" />    
        <property name="password" value="${jdbc.password}" />    
    </bean>     
    
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">    
        <property name="dataSource" ref="dataSource" />    
        <!-- 自動掃描mapping.xml檔案 -->    
        <property name="mapperLocations" value="classpath:com/zd/maven/map/*.xml"></property>    
        <!-- 自動掃描實體類 -->
		<property name="configLocation" value="classpath:mybatis-config.xml"></property>
    </bean>    
    
    <!-- DAO介面所在包名,Spring會自動查詢其下的類 -->    
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">    
        <property name="basePackage" value="com.zd.maven.dao" />    
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>    
    </bean>    
    
    <!-- 事務管理 -->    
    <bean id="transactionManager"    
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">    
        <property name="dataSource" ref="dataSource" />    
    </bean>    
    
</beans>

 

繼續在resources目錄下建立spring-mvc.xml檔案,配置好檔案內容:

<?xml version="1.0" encoding="UTF-8"?>    
<beans xmlns="http://www.springframework.org/schema/beans"    
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"    
    xmlns:context="http://www.springframework.org/schema/context"    
    xmlns:mvc="http://www.springframework.org/schema/mvc"    
    xsi:schemaLocation="http://www.springframework.org/schema/beans      
                        http://www.springframework.org/schema/beans/spring-beans-3.1.xsd      
                        http://www.springframework.org/schema/context      
                        http://www.springframework.org/schema/context/spring-context-3.1.xsd      
                        http://www.springframework.org/schema/mvc      
                        http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">    
    <!-- 自動掃描該包,使SpringMVC認為包下用了@controller註解的類是控制器 -->    
    <context:component-scan base-package="com.zd.maven.controller" />  
    
<!-- 這個配置是為了讓返回的值轉為json格式 -->
     <mvc:default-servlet-handler/><mvc:annotation-driven/>
      
    <!-- 定義跳轉的檔案的前後綴 ,檢視模式配置-->    
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">    
        <!-- controller中return時會自動加上字首和字尾,變成一個完整的url -->    
        <property name="prefix" value="/WEB-INF/jsp/" />    
        <property name="suffix" value=".jsp" />    
    </bean>    
</beans>

 

建立jdbc.properties檔案,並配置好相應的內容:

jdbc.driver=oracle.jdbc.driver.OracleDriver  
jdbc.url=jdbc:oracle:thin:@localhost:1521:orcl
jdbc.username=scott
jdbc.password=admin

 

同時建立log4j.properties檔案,配置好檔案內容:

log4j.rootLogger=INFO,Console,File  
#定義日誌輸出目的地為控制檯  
log4j.appender.Console=org.apache.log4j.ConsoleAppender  
log4j.appender.Console.Target=System.out  
#可以靈活地指定日誌輸出格式,下面一行是指定具體的格式  
log4j.appender.Console.layout = org.apache.log4j.PatternLayout  
log4j.appender.Console.layout.ConversionPattern=[%c] - %m%n  
  
#檔案大小到達指定尺寸的時候產生一個新的檔案  
log4j.appender.File = org.apache.log4j.RollingFileAppender  
#指定輸出目錄  
log4j.appender.File.File = logs/ssm.log  
#定義檔案最大大小  
log4j.appender.File.MaxFileSize = 10MB  
# 輸出所以日誌,如果換成DEBUG表示輸出DEBUG以上級別日誌  
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

最後我們再來修改一下啊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>
  <display-name>Archetype Created Web Application</display-name>
  
  <!-- Spring和mybatis的配置檔案 -->    
    <context-param>    
        <param-name>contextConfigLocation</param-name>    
        <param-value>classpath:spring-mybatis.xml</param-value>    
    </context-param>    
    <!-- 編碼過濾器 -->    
    <filter>    
        <filter-name>encodingFilter</filter-name>    
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>    
        <async-supported>true</async-supported>    
        <init-param>    
            <param-name>encoding</param-name>    
            <param-value>UTF-8</param-value>    
        </init-param>    
    </filter>    
    <filter-mapping>    
        <filter-name>encodingFilter</filter-name>    
        <url-pattern>/*</url-pattern>    
    </filter-mapping>    
    <!-- Spring監聽器 -->    
    <listener>    
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>    
    </listener>    
    <!-- 防止Spring記憶體溢位監聽器 -->    
    <listener>    
        <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>    
    </listener>    
    
    <!-- Spring MVC servlet -->    
    <servlet>    
        <servlet-name>SpringMVC</servlet-name>    
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>    
        <init-param>    
            <param-name>contextConfigLocation</param-name>    
            <param-value>classpath:spring-mvc.xml</param-value>    
        </init-param>    
        <load-on-startup>1</load-on-startup>    
        <async-supported>true</async-supported>    
    </servlet>    
    <servlet-mapping>    
        <servlet-name>SpringMVC</servlet-name>    
        <!-- /表示全部攔截 -->    
        <url-pattern>/</url-pattern>    
    </servlet-mapping>    
    <welcome-file-list>    
        <welcome-file>/index.jsp</welcome-file>    
    </welcome-file-list> 
</web-app>

 

(4)編寫服務端程式碼,結構如下:

注意,在編寫程式碼之前,可首先把資料庫表建好,以便之後可以訪問資料庫拿資料到頁面展示

1.UserDTO.java:

package com.zd.maven.dto;

public class UserDTO {
	private String name;

	private int age;

	private String birthday;

	private String address;

	private String phoneNo;

	private String sex;

	private String id;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public String getBirthday() {
		return birthday;
	}

	public void setBirthday(String birthday) {
		this.birthday = birthday;
	}

	public String getAddress() {
		return address;
	}

	public void setAddress(String address) {
		this.address = address;
	}

	public String getPhoneNo() {
		return phoneNo;
	}

	public void setPhoneNo(String phoneNo) {
		this.phoneNo = phoneNo;
	}

	public String getId() {
		return id;
	}

	public void setId(String id) {
		this.id = id;
	}

	public String getSex() {
		return sex;
	}

	public void setSex(String sex) {
		this.sex = sex;
	}

}

 

2.UserService.java:

package com.zd.maven.service;

import com.zd.maven.dto.UserDTO;

public interface UserService {

	public UserDTO selectUserInfo(String id);
}

 

3.UserServiceImpl.java:

package com.zd.maven.serviceimpl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import com.zd.maven.dao.UserDao;
import com.zd.maven.dto.UserDTO;
import com.zd.maven.service.UserService;

@Service
public class UserServiceImpl implements UserService {
	@Autowired
	private UserDao userDao;

	public UserDTO selectUserInfo(String id) {
		System.out.println(id);
		if (StringUtils.hasText(id)) {
			System.out.println("id不為空");
			return userDao.getUserDTO(id);
		}
		return null;
	}

}

 

4.UserDao.java:

package com.zd.maven.dao;

import com.zd.maven.dto.UserDTO;

public interface UserDao {
	public UserDTO getUserDTO(String id);

	public int deleteUserDTO(String id);

	public int insertUser(UserDTO userDTO);
}

 

5.UserDaoMapper.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.zd.maven.dao.UserDao">
  <resultMap id="BaseResultMap" type="UserDTO">
    <id column="id" jdbcType="VARCHAR" property="id" />
    <result column="user_name" jdbcType="VARCHAR" property="name" />
    <result column="user_birthday" jdbcType="VARCHAR" property="birthday" />
    <result column="user_sex" jdbcType="VARCHAR" property="sex"/>
    <result column="user_address" jdbcType="VARCHAR" property="address"/>
    <result column="user_phone" jdbcType="VARCHAR" property="phoneNo"/>
    <result column="user_age" jdbcType="VARCHAR" property="age"/>
  </resultMap>
  <sql id="Base_Column_List">
    id, user_name, user_sex, user_birthday, user_address, user_phone, user_age
  </sql>
  <select id="getUserDTO" parameterType="java.lang.String" resultMap="BaseResultMap">
    select 
    <include refid="Base_Column_List" />
    from user_tab
    where id = #{id,jdbcType=VARCHAR}
  </select>
  <delete id="deleteUserDTO" parameterType="java.lang.String">
    delete from user_tab
    where id = #{id,jdbcType=VARCHAR}
  </delete>
  <insert id="insertUser" parameterType="UserDTO">
    insert into user_tab (id, user_name, user_sex, 
      user_birthday,user_age,user_phone,user_address)
    values (#{id,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{sex,jdbcType=VARCHAR}, 
      #{birthday,jdbcType=VARCHAR},#{age,jdbcType=VARCHAR},#{phoneNo,jdbcType=VARCHAR},#{address,jdbcType=VARCHAR})
  </insert>
  <!-- <update id="updateByPrimaryKeySelective" parameterType="com.java.zxf.domain.User">
    update user
    <set>
      <if test="userName != null">
        user_name = #{userName,jdbcType=VARCHAR},
      </if>
      <if test="userGender != null">
        user_gender = #{userGender,jdbcType=VARCHAR},
      </if>
      <if test="userBirthday != null">
        user_birthday = #{userBirthday,jdbcType=VARCHAR},
      </if>
    </set>
    where id = #{id,jdbcType=VARCHAR}
  </update>
  <update id="updateByPrimaryKey" parameterType="com.java.zxf.domain.User">
    update user
    set user_name = #{userName,jdbcType=VARCHAR},
      user_gender = #{userGender,jdbcType=VARCHAR},
      user_birthday = #{userBirthday,jdbcType=VARCHAR}
    where id = #{id,jdbcType=VARCHAR}
  </update> -->
</mapper>

 

6.UserController.java:

package com.zd.maven.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.zd.maven.dto.UserDTO;
import com.zd.maven.service.UserService;

@Controller
public class UserController {

	@Autowired
	private UserService userService;

	@RequestMapping(value = "/getUserInfo", method = RequestMethod.GET)
	@ResponseBody
	public Object getUserInfo(String id) {
		System.out.println("進入方法");
		UserDTO userDTO = userService.selectUserInfo(id);
		System.out.println("此人的電話號碼為:" + userDTO.getPhoneNo());
		return userDTO;

	}
}

 

(5)專案構建:

1.在專案上右鍵,選擇run-maven build..,然後輸入命令clean install

控制檯輸出如下內容,表示構建成功:

[INFO] Scanning for projects...
[INFO] 
[INFO] ------------------------< com.zd:testMavenSSM >-------------------------
[INFO] Building SSMDemo Maven Webapp 0.0.1-SNAPSHOT
[INFO] --------------------------------[ war ]---------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ testMavenSSM ---
[INFO] Deleting D:\workspace\testMavenSSM\target
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ testMavenSSM ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] Copying 1 resource
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ testMavenSSM ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ testMavenSSM ---
[INFO] Not copying test resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ testMavenSSM ---
[INFO] Not compiling test sources
[INFO] 
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ testMavenSSM ---
[INFO] Tests are skipped.
[INFO] 
[INFO] --- maven-war-plugin:2.2:war (default-war) @ testMavenSSM ---
[INFO] Packaging webapp
[INFO] Assembling webapp [testMavenSSM] in [D:\workspace\testMavenSSM\target\testMavenSSM]
[INFO] Processing war project
[INFO] Copying webapp resources [D:\workspace\testMavenSSM\src\main\webapp]
[INFO] Webapp assembled in [475 msecs]
[INFO] Building war: D:\workspace\testMavenSSM\target\testMavenSSM.war
[INFO] WEB-INF\web.xml already added, skipping
[INFO] 
[INFO] --- maven-install-plugin:2.4:install (default-install) @ testMavenSSM ---
[INFO] Installing D:\workspace\testMavenSSM\target\testMavenSSM.war to F:\maven_repositories\com\zd\testMavenSSM\0.0.1-SNAPSHOT\testMavenSSM-0.0.1-SNAPSHOT.war
[INFO] Installing D:\workspace\testMavenSSM\pom.xml to F:\maven_repositories\com\zd\testMavenSSM\0.0.1-SNAPSHOT\testMavenSSM-0.0.1-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 4.400 s
[INFO] Finished at: 2019-01-04T14:47:11+08:00
[INFO] ------------------------------------------------------------------------

 

(6)部署專案到tomcat:

點選finish完成tomcat專案部署,然後滑鼠右鍵server,點選start,啟動tomcat,

(7)訪問專案:

在瀏覽器位址列輸入http://localhost:8080/testMavenSSM/getUserInfo?id=20190058

成功訪問: