1. 程式人生 > >(SSM框架)SpringMVC+Spring4+Mybatis+Maven環境快速搭建開發案例

(SSM框架)SpringMVC+Spring4+Mybatis+Maven環境快速搭建開發案例

一.前言

           這幾天搞完了SpringMVC,所以想把這個環境搭建寫出來,供自己今後開發用,大家也可以借鑑一下。之後我會寫一下這幾天學的SpringMVC,也當複習和總結了。話不多說了,讓我們開始吧!!!!GO!!!

二.快速搭建

          2.1    環境準備

             資料庫環境:Mysql5.7

        JAVA環境:

        JDK:   1.8.0_77

        Eclipse:LUNA

        新建工程:Maven-webapp工程

       SpringMVC的版本:4.1.6.RELEASE

       Spring的版本: 4.1.6.RELEASE


       Mybatis的版本:3.3.1

        因此在Maven工程中的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>org.jboss.tools.examples</groupId>
	<artifactId>SpringMVC_Spring_Mybatis</artifactId>
	<packaging>war</packaging>
	<version>0.0.1-SNAPSHOT</version>
	<name>SpringMVC_Spring_Mybatis Maven Webapp</name>
	<url>http://maven.apache.org</url>
	<dependencies>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>
		<!-- 日誌介面卡 -->
		<dependency>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-slf4j-impl</artifactId>
			<version>2.5</version>
		</dependency>
		<!-- 日誌實現 -->
		<dependency>
			<groupId>org.apache.logging.log4j</groupId>
			<artifactId>log4j-core</artifactId>
			<version>2.5</version>
		</dependency>

		<!-- aspectj框架包 -->
		<dependency>
			<groupId>org.aspectj</groupId>
			<artifactId>aspectjweaver</artifactId>
			<version>1.8.9</version>
			<scope>runtime</scope>
		</dependency>


		<!-- Spring依賴 -->
		<!--1)spring核心依賴 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-core</artifactId>
			<version>4.1.6.RELEASE</version>
		</dependency>
		<!--spring ioc依賴 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-beans</artifactId>
			<version>4.1.6.RELEASE</version>
		</dependency>
		<!--2 spring座標依賴 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-context</artifactId>
			<version>4.1.6.RELEASE</version>
			<scope>runtime</scope>
		</dependency>

		<!--3 spring web相關依賴 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-webmvc</artifactId>
			<version>4.1.6.RELEASE</version>
			<scope>runtime</scope>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-web</artifactId>
			<version>4.1.6.RELEASE</version>
		</dependency>
		<!--4spring dao層依賴 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-jdbc</artifactId>
			<version>4.1.6.RELEASE</version>
		</dependency>
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-tx</artifactId>
			<version>4.1.6.RELEASE</version>
		</dependency>

		<!--5spring test相關依賴 -->
		<dependency>
			<groupId>org.springframework</groupId>
			<artifactId>spring-test</artifactId>
			<version>4.1.6.RELEASE</version>
		</dependency>


		<!-- 引入mybatis依賴座標 -->
		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis</artifactId>
			<version>3.3.1</version>
			<scope>runtime</scope>
		</dependency>

		<dependency>
			<groupId>org.mybatis</groupId>
			<artifactId>mybatis-spring</artifactId>
			<version>1.3.0</version>
		</dependency>

		<!-- 引入jstl包 -->
		<dependency>
			<groupId>jstl</groupId>
			<artifactId>jstl</artifactId>
			<version>1.2</version>
		</dependency>

		<!-- 引入mysql驅動包-->
		<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.32</version>
		</dependency>

		<!-- 資料庫連線池的包 -->
		<dependency>
			<groupId>org.apache.commons</groupId>
			<artifactId>commons-dbcp2</artifactId>
			<version>2.1.1</version>
			<scope>runtime</scope>
		</dependency>
	</dependencies>
	<build>
		<finalName>SpringMVC_Spring_Mybatis</finalName>
	</build>
</project>


如圖為加入的jar包


     2.2   配置  mybatis連線 mysql

           在src/main/resources中新建mybatis和spring目錄,在mybatis目錄中新建sqlMapConfig.xml,在spring目錄中新建aplicationContext-dao.xml還有一個db.properties檔案

         sqlMapConfig.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>
	
	<!-- 全域性setting配置,根據需要新增 -->
	
	<!-- 配置別名 -->
	<typeAliases>
		<!-- 批量掃描別名 -->
		<package name="com.yc.ssm.entity"/>
	</typeAliases>
	<!-- 配置mapper
	由於使用spring和mybatis的整合包進行mapper掃描,這裡不需要配置了。
	必須遵循:mapper.xml和mapper.java檔案同名且在一個目錄 
        ps:也可以不在同一個目錄,但是要配置路徑,我在application-dao.xml中配置了另外的路徑,可以查閱
	 -->

	<!-- <mappers>
	
	</mappers> -->
</configuration>

applicationContext-dao.xml  內容如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:util="http://www.springframework.org/schema/util" 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/util 
        http://www.springframework.org/schema/util/spring-util.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">

	<!-- 載入db.properties檔案中的內容,db.properties檔案中key命名要有一定的特殊規則 -->
	<context:property-placeholder location="classpath:db.properties" />
	<!-- 配置資料來源 ,dbcp -->

	<!-- 資料來源 -->
	<bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"
		p:driverClassName="${jdbc.driver}" p:url="${jdbc.url}"
		p:username="${jdbc.username}" p:password="${jdbc.password}" />
		
	<!-- sqlSessionFactory -->
	<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
		<!-- 資料庫連線池 -->
		<property name="dataSource" ref="dataSource" />
		<!-- 載入mybatis的全域性配置檔案 -->
              <property name="configLocation" value="classpath:mybatis/sqlMapConfig.xml" />
               <property name="mapperLocations" value="classpath:mapper/*Mapper.xml"></property>  <!-- 這裡另外配置mapper.xml路徑 -->
       </bean>
	<!-- mapper掃描器 -->
	<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
		<!-- 掃描包路徑,如果需要掃描多個包,中間使用半形逗號隔開 -->
		<property name="basePackage" value="com.yc.ssm.mapper"></property>
		<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
	</bean>
</beans>

db.properties  配置檔案內容如下:
jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mysql
jdbc.username=root
jdbc.password=1234

      2.2.1   測試mybatis連線mysql是否成功

                      在src/test/java中新建一個ConnTest.java檔案,來做junit測試



測試程式碼如下:

package com.yc.ssm.connect;

import static org.junit.Assert.assertNotNull;

import java.sql.Connection;

import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

/**
 * 
 * <p>Title:ConnTest.java</p>
 * <p>Description:</p>
 * <p>Company:</p>
 * @author HuangMai
 * @Version 1.0
 * 
 */
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:spring/aplicationContext-dao.xml")
public class ConnTest {

	@Autowired
	private SqlSessionFactory sqlSessionFactory;

	@Test
	public void testConn() {
		Connection con = sqlSessionFactory.openSession().getConnection();
		assertNotNull("資料庫連線失敗!!!", con);
	}

}


測試結果如下:



測試成功!    PS:明正常連線,如果你測試有誤,就多看看junit具體報的什麼錯誤,開始我的也報錯,看錯誤成功解決.

        2.3  配置前端控制器

            在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">


<!-- 載入spring容器 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>spring/applicationContext-*.xml</param-value>
	</context-param>
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>					
<!-- 配置springmvc的dispatchServlet的處理類 -->
  <servlet>
  	<servlet-name>srpingDispatherServlet</servlet-name>
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
	<!-- 配置DispatchServlet的初始化引數,載入配置檔案(配置處理對映器,介面卡)springmvc配置檔案的位置和名稱 -->  	
  	<init-param>
  		<param-name>contextConfigLocation</param-name>
  		<param-value>classpath:spring-mvc.xml</param-value>
  	</init-param>
	<!-- 可以自定義servlet.xml配置檔案的位置和名稱,預設為WEB-INF目錄下,名稱為-->
	<!--[<servlet-name>]-servlet.xml,如SpringMVC-servlet.xml -->
	<!-- <init-param>
	   <param-name>contextConfigLocation</param-name>
	   <param-value>/WEB-INF/SpringMVC-servlet.xml</param-value>
	</init-param> -->
	<load-on-startup>1</load-on-startup>
  </servlet>
  
  
  <!-- 配置springmvc的DispathServlet的對映匹配URL -->
  <servlet-mapping>
  	<servlet-name>srpingDispatherServlet</servlet-name>
  	<!-- 
  		第一種: *.action,訪問以.action結尾 由DispatcherServlet進行解析
  		第二種: /. 所有訪問的地址都由DispatcherServlet進行解析,對於靜態檔案的解析需要配置不讓DispatcherServlet進行解析
  		第三種: /*  這種配置不對,使用這種配置,最終要轉發到一個jsp頁面時,仍然會由DispatcherServlet解析jsp地址,不能根據jsp頁面找到handler,會報錯
  	 -->
  	<url-pattern>/</url-pattern>
  </servlet-mapping>
  
  
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>


    2.4  配置SpringMVC.xml

 

            如下:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"       
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    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">

	<!-- 可以掃描controller、service、...
	這裡讓掃描controller,指定controller的包
	 -->
	<context:component-scan base-package="com.yc"></context:component-scan>
	
		
	<!--註解對映器 -->
	<!-- <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/> -->
	<!--註解介面卡 -->
	<!-- <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/> -->
	
	<!-- 使用 mvc:annotation-driven代替上邊註解對映器和註解介面卡配置
	mvc:annotation-driven預設載入很多的引數繫結方法,
	比如json轉換解析器就預設載入了,如果使用mvc:annotation-driven不用配置上邊的RequestMappingHandlerMapping和RequestMappingHandlerAdapter
	實際開發時使用mvc:annotation-driven
	 -->
<!-- 	<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven> -->
	<mvc:annotation-driven ></mvc:annotation-driven>

	<!-- 檢視解析器
	解析jsp解析,預設使用jstl標籤,classpath下的得有jstl的包
	 -->
	<bean
		class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<!-- 配置jsp路徑的字首 -->
		<property name="prefix" value="/login"/>
		<!-- 配置jsp路徑的字尾 -->
		<property name="suffix" value=".jsp"/>
	</bean>
	
	<!-- 自定義引數繫結 -->
	<!-- <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
		轉換器
		<property name="converters">
			<list>
				日期型別轉換
				<bean class="com.yc.ssm.controller.converter.CustomDateConverter"/>
			</list>
		</property>
	</bean> -->
</beans>

      2.5  配置applicationContext-service.xml

          這裡我對service採用配置的形式,也可以採用註解的方式

<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:util="http://www.springframework.org/schema/util" 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/util 
        http://www.springframework.org/schema/util/spring-util.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">
<!-- 使用者管理service -->
<bean id="userService" class="com.yc.ssm.service.impl.UserServiceImpl"/>
</beans>

      2.6  測試spring+mybatis與mysql是否連通

          這裡面我自己寫了一個user實體類,user mapper介面,user Controller類,user Service介面,user Service實現類,和mapper.xml  在mysql中建立了一個user 來模擬使用者的簡單登入。這裡我就不貼程式碼了,到時候上傳到百度雲,供大家參考.貼一下目錄結構:

                                                            

       2.7   編寫jsp頁面

           在webapp目錄下建立一個login目錄,在其目錄下建立三個jsp頁面。分別是login.jsp,success.jsp,fail.jsp

login.jsp程式碼為:

<%@ page contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>使用者登入介面</title>
</head>
<body>
	<form action="userLogin.action"  method="post" style="text-align: center; margin: 80px auto; width: 500px;">
		<p>使用者名稱:<input type="text" name="uname" /></p>
		<p>密碼:<input type="password" name="upwd" /></p>
		<input type="submit" value="登入"/>
	</form>
	
</body>
</html>

success.jsp和fail.jsp的程式碼我就不貼了,就是用來顯示登入是否成功。

     2.7.1   測試springmvc 層是否成功

          在UserController程式碼為

package com.yc.ssm.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.yc.ssm.entity.User;
import com.yc.ssm.service.UserService;

/**
 * 
 * <p>Title:UserController.java</p>
 * <p>Description:</p>
 * <p>Company:</p>
 * @author HuangMai
 * @Version 1.0
 * 
 */

@Controller
@RequestMapping("/login")
public class UserController {
	
	@Autowired
	private UserService userService;
	
	@RequestMapping("/userLogin")
	public ModelAndView userLogin(String uname,String upwd){
		ModelAndView mav=new ModelAndView();
		User user=userService.login(uname, upwd);
		if(user!=null){
			mav.setViewName("/success");
			return mav;
		}else{
			mav.setViewName("/fail");
			return mav;
		}
	}

}

PS:配置Controller 別配置錯了,不然會報404錯誤。中間我也出現過小問題,通過debug除錯就解決了。大家細心點。要注意在springmvc.xml中配置的字首後和字尾。我改過來了。

測試頁面:



測試成功:


失敗我就不上傳了,改一下密碼就Ok。

3. 總結

    搭建的方式不唯一,大家靈活運用,能搭建成功就ok。本次springmvc+spring+mybatis+maven快速搭建到此結束。ps:注意編碼,可以配置一個過濾器    案例demo在此:http://download.csdn.net/detail/michael_hm/9631402