(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