Spring-SpringMVC-Mybatis整合的步驟
1.導入jar包
1.1 spring面向切面jar包
com.springsource.net.sf.cglib-2.2.0.jar
com.springsource.org.aopalliance-1.0.0.jar
com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
1.2 springJDBCjar包
c3p0-0.9.2.1.jar
mchange-commons-java-0.2.3.4.jar
spring-jdbc-4.2.2.RELEASE.jar
1.3 mybatis與spring整合jar包
mybatis-3.2.2.jar
mybatis-spring-1.2.1.jar
1.4 mysql數據庫jar包
mysql-connector-java-5.0.8-bin.jar
1.5 springAOP及springMVCjar包
commons-logging-1.1.3.jar
spring-aop-4.2.2.RELEASE.jar
spring-beans-4.2.2.RELEASE.jar
spring-context-4.2.2.RELEASE.jar
spring-core-4.2.2.RELEASE.jar
spring-expression-4.2.2.RELEASE.jar
spring-tx-4.2.2.RELEASE.jar
spring-web-4.2.2.RELEASE.jar
spring-webmvc-4.2.2.RELEASE.jar
1.6 js標簽庫jar包
jstl.jar
standard.jar
1.7 文件上傳jar包
commons-fileupload-1.3.1.jar
commons-io-2.2.jar
1.8 springMVC與ajax交互jar包
jackson-annotations-2.2.1.jar
jackson-core-2.2.1.jar
jackson-databind-2.2.1.jar
2.配置spring的xml文件
1 <?xml version="1.0" encoding="UTF-8"?> 2<beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xmlns:aop="http://www.springframework.org/schema/aop" 6 xmlns:tx="http://www.springframework.org/schema/tx" 7 xsi:schemaLocation="http://www.springframework.org/schema/beans 8 http://www.springframework.org/schema/beans/spring-beans.xsd 9 http://www.springframework.org/schema/context 10 http://www.springframework.org/schema/context/spring-context.xsd 11 http://www.springframework.org/schema/tx 12 http://www.springframework.org/schema/tx/spring-tx.xsd 13 http://www.springframework.org/schema/aop 14 http://www.springframework.org/schema/aop/spring-aop.xsd"> 15 16 <!-- 包掃描 *業務層 --> 17 <context:component-scan base-package="com.eduask.liusheng.service"/> 18 19 <!-- 引入屬性文件 *數據源屬性及連接池屬性 --> 20 <context:property-placeholder location="classpath:db.properties"/> 21 22 <!-- 配置數據源 --> 23 <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"> 24 <property name="driverClass" value="${jdbc.driver}"></property> 25 <property name="jdbcUrl" value="${jdbc.url}"></property> 26 <property name="user" value="${jdbc.username}"></property> 27 <property name="password" value="${jdbc.password}"></property> 28 </bean> 29 30 <!-- 配置SQLSessionFactory --> 31 <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> 32 <!-- 註入數據庫連接池 --> 33 <property name="dataSource" ref="dataSource"/> 34 <!-- 掃描實體類包,使用別名 --> 35 <property name="typeAliasesPackage" value="com.eduask.liusheng.bean"/> 36 <!-- 掃描映射文件 --> 37 <property name="mapperLocations" value="classpath:com/eduask/liusheng/mapper/*.xml"/> 38 </bean> 39 40 <!-- 配置掃描Dao接口包,動態實現Dao接口,註入到spring容器中 --> 41 <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"> 42 <!-- 註入sqlSessionFactory --> 43 <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/> 44 <!-- 給出需要掃描Dao接口包,自動生成對應實體,不用手動實現 --> 45 <property name="basePackage" value="com.eduask.liusheng.dao"/> 46 </bean> 47 48 <!-- 配置事務管理器 --> 49 <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 50 <property name="dataSource" ref="dataSource"></property> 51 </bean> 52 53 <!-- 配置事務通知 *如果是註解方式,需要配置事務管理註解驅動--> 54 <tx:advice id="advice" transaction-manager="transactionManager"> 55 <tx:attributes> 56 <tx:method name="insert*" propagation="REQUIRED" isolation="DEFAULT" read-only="false"/> 57 <tx:method name="update*" propagation="REQUIRED" isolation="DEFAULT" read-only="false"/> 58 <tx:method name="delete*" propagation="REQUIRED" isolation="DEFAULT" read-only="false"/> 59 <tx:method name="select*" read-only="true"/> 60 <tx:method name="*" read-only="true"/> 61 </tx:attributes> 62 </tx:advice> 63 64 <!-- 配置切點 --> 65 <aop:config> 66 <!-- 配置切點 --> 67 <aop:pointcut expression="execution(* com.eduask.liusheng.service.*.*(..))" id="pointcut"/> 68 <!-- 關聯切點與通知 --> 69 <aop:advisor advice-ref="advice" pointcut-ref="pointcut"/> 70 </aop:config> 71 72 </beans>
1 jdbc.driver=com.mysql.jdbc.Driver 2 jdbc.url=jdbc:mysql://localhost:3306/employeemanager 3 jdbc.username=root 4 jdbc.password=root 5 #連接池屬性在這裏配置屬性文件
3.配置springMVC的xml文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <beans xmlns="http://www.springframework.org/schema/beans" 3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 4 xmlns:context="http://www.springframework.org/schema/context" 5 xmlns:mvc="http://www.springframework.org/schema/mvc" 6 xsi:schemaLocation="http://www.springframework.org/schema/beans 7 http://www.springframework.org/schema/beans/spring-beans.xsd 8 http://www.springframework.org/schema/context 9 http://www.springframework.org/schema/context/spring-context.xsd 10 http://www.springframework.org/schema/mvc 11 http://www.springframework.org/schema/mvc/spring-mvc.xsd"> 12 13 <!-- 配置包掃描 *控制器層 --> 14 <context:component-scan base-package="com.eduask.liusheng.controller"/> 15 16 <!-- 配置視圖解析器 *受保護的網頁放在/WEB-INF下,不能被直接訪問,只能請求轉發到該頁面 --> 17 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 18 <property name="prefix" value="/WEB-INF/view/"></property> 19 <property name="suffix" value=".jsp"></property> 20 </bean> 21 22 <!-- 訪問靜態資源 js jpg html css 等靜態資源 --> 23 <mvc:default-servlet-handler/> 24 25 <!-- 配置登陸攔截器 --> 26 <mvc:interceptors> 27 <mvc:interceptor> 28 <mvc:mapping path="/**"/> 29 <bean class="com.eduask.liusheng.inerceptor.LoginInterceptor"></bean> 30 </mvc:interceptor> 31 </mvc:interceptors> 32 33 <!-- 配置全局時間轉化類 沒有時間轉化可省略以下 --> 34 <!-- 第一步: 創建自定義日期轉換規則 class:為時間轉化類的全類名 --> 35 <bean id="dateConvert" class="com.eduask.liusheng.util.DateConvert"/> 36 <!-- 第二步: 創建convertion-Service ,並註入dateConvert--> 37 <bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean"> 38 <property name="converters"> 39 <set> 40 <ref bean="dateConvert"/> 41 </set> 42 </property> 43 </bean> 44 <!-- 第三步:註冊處理器映射器/處理器適配器 ,添加conversion-service屬性--> 45 <mvc:annotation-driven conversion-service="conversionService"/> 46 47 <!-- 配置文件上傳的映射 *id必須為multipartResolver --> 48 <bean id="multipartResolver" 49 class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> 50 <!-- 配置上傳的大小 --> 51 <property name="maxUploadSize" value="104857600"></property> 52 <!-- 配置緩存 --> 53 <property name="maxInMemorySize" value="4096" /> 54 <!-- 配置上傳的編碼 --> 55 <property name="defaultEncoding" value="utf-8"></property> 56 </bean> 57 58 </beans>
1 import java.text.ParseException; 2 import java.text.SimpleDateFormat; 3 import java.util.Date; 4 5 import org.springframework.core.convert.converter.Converter; 6 7 public class DateConvert implements Converter<String, Date> { 8 9 @Override 10 public Date convert(String stringDate){ 11 //時間轉化類(時間格式) 12 SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd"); 13 try { 14 return simpleDateFormat.parse(stringDate); 15 } catch (ParseException e) { 16 e.printStackTrace(); 17 } 18 return null; 19 } 20 21 }DateConvert.java
1 import java.io.File; 2 import java.io.FileOutputStream; 3 4 import javax.servlet.http.HttpServletRequest; 5 6 import org.springframework.stereotype.Controller; 7 import org.springframework.web.bind.annotation.RequestMapping; 8 import org.springframework.web.bind.annotation.RequestParam; 9 import org.springframework.web.multipart.MultipartFile; 10 import org.springframework.web.multipart.MultipartHttpServletRequest; 11 import org.springframework.web.multipart.commons.CommonsMultipartFile; 12 13 @Controller 14 public class UploadController { 15 @RequestMapping("/upload1.do") 16 public String upload(HttpServletRequest req) throws Exception{ 17 long startTime=System.currentTimeMillis(); 18 MultipartHttpServletRequest multiRequest=(MultipartHttpServletRequest)req; 19 MultipartFile multiFile=multiRequest.getFile("myfile1"); 20 String path=req.getSession().getServletContext().getRealPath("/upload"); 21 File file=new File(path+"\\"+multiFile.getOriginalFilename()); 22 FileOutputStream fos=new FileOutputStream(file); 23 fos.write(multiFile.getBytes()); 24 fos.flush(); 25 fos.close(); 26 long endTime=System.currentTimeMillis(); 27 System.out.println("upload1運行時間:"+String.valueOf(endTime-startTime)+"ms"); 28 return "a"; 29 } 30 31 @RequestMapping("/upload2.do") 32 public String upload1(@RequestParam("myfile2") CommonsMultipartFile file,HttpServletRequest req) throws Exception{ 33 long startTime=System.currentTimeMillis(); 34 String path=req.getSession().getServletContext().getRealPath("/upload"); 35 File uploadfile=new File(path+"\\"+file.getOriginalFilename()); 36 file.transferTo(uploadfile); 37 long endTime=System.currentTimeMillis(); 38 System.out.println("upload2運行時間:"+String.valueOf(endTime-startTime)+"ms"); 39 return "a"; 40 } 41 42 @RequestMapping("/upload3.do") 43 public String upload3(HttpServletRequest req) throws Exception{ 44 long startTime=System.currentTimeMillis(); 45 MultipartHttpServletRequest multiRequest=(MultipartHttpServletRequest)req; 46 MultipartFile multiFile=multiRequest.getFile("myfile3"); 47 String path=req.getSession().getServletContext().getRealPath("/upload"); 48 File file=new File(path+"\\"+multiFile.getOriginalFilename()); 49 multiFile.transferTo(file); 50 long endTime=System.currentTimeMillis(); 51 System.out.println("upload3運行時間:"+String.valueOf(endTime-startTime)+"ms"); 52 return "a"; 53 } 54 55 }文件上傳三種方法
1 import java.io.PrintWriter; 2 3 import org.springframework.stereotype.Controller; 4 import org.springframework.web.bind.annotation.RequestMapping; 5 import org.springframework.web.bind.annotation.ResponseBody; 6 7 @Controller 8 public class AjaxController { 9 10 @RequestMapping("/fun1.do") 11 public void fun1(PrintWriter out,User user){ 12 System.out.println(user); 13 out.print("你好"); 14 } 15 16 @RequestMapping("/fun2.do") 17 @ResponseBody 18 public User fun2(User user){ 19 return user; 20 } 21 22 }spring與ajax交互,spring的自動封裝
1 import javax.servlet.http.HttpServletRequest; 2 import javax.servlet.http.HttpServletResponse; 3 4 import org.springframework.web.servlet.HandlerInterceptor; 5 import org.springframework.web.servlet.ModelAndView; 6 7 8 public class LoginInterceptor implements HandlerInterceptor { 9 10 /** 11 * preHandle方法是進行處理器攔截用的,顧名思義,該方法將在Controller處理之前進行調用, 12 * SpringMVC中的Interceptor攔截器是鏈式的,可以同時存在多個Interceptor, 13 * 然後SpringMVC會根據聲明的前後順序一個接一個的執行, 14 * 而且所有的Interceptor中的preHandle方法都會在Controller方法調用之前調用。 15 * SpringMVC的這種Interceptor鏈式結構也是可以進行中斷的, 16 * 這種中斷方式是令preHandle的返回值為false,當preHandle的返回值為false的時候整個請求就結束了。 17 */ 18 public boolean preHandle(HttpServletRequest request, HttpServletResponse response, 19 Object o) throws Exception { 20 System.out.println("----------preHandle------------"); 21 String path=request.getServletPath(); 22 System.out.println("path:"+path); 23 if("/login.do".equals(path)){ 24 return true; 25 } 26 if("/logout.do".equals(path)){ 27 request.getSession().removeAttribute("user"); 28 } 29 String str=(String) request.getSession().getAttribute("user"); 30 if (str!=null) { 31 return true; 32 }else{ 33 response.sendRedirect("login.jsp"); 34 return false; 35 } 36 } 37 38 /** 39 * 這個方法只會在當前這個Interceptor的preHandle方法返回值為true的時候才會執行。 40 * postHandle是進行處理器攔截用的,它的執行時間是在處理器進行處理之後, 41 * 也就是在Controller的方法調用之後執行,但是它會在DispatcherServlet進行視圖的渲染之前執行, 42 * 也就是說在這個方法中你可以對ModelAndView進行操作。 43 * 這個方法的鏈式結構跟正常訪問的方向是相反的,也就是說先聲明的Interceptor攔截器該方法反而會後調用, 44 * 這跟Struts2裏面的攔截器的執行過程有點像, 45 * 只是Struts2裏面的intercept方法中要手動的調用ActionInvocation的invoke方法, 46 * Struts2中調用ActionInvocation的invoke方法就是調用下一個Interceptor 47 * 或者是調用action,然後要在Interceptor之前調用的內容都寫在調用invoke之前, 48 * 要在Interceptor之後調用的內容都寫在調用invoke方法之後。 49 */ 50 public void postHandle(HttpServletRequest request, HttpServletResponse response, 51 Object o, ModelAndView ex) throws Exception { 52 System.out.println("----------postHandle------------"); 53 } 54 55 /** 56 * 該方法也是需要當前對應的Interceptor的preHandle方法的返回值為true時才會執行。 57 * 該方法將在整個請求完成之後,也就是DispatcherServlet渲染了視圖執行, 58 * 這個方法的主要作用是用於清理資源的,當然這個方法也只能在當前這個Interceptor的preHandle方法的返回值為true時才會執行。 59 */ 60 public void afterCompletion(HttpServletRequest request, 61 HttpServletResponse response, Object o, Exception ex) 62 throws Exception { 63 System.out.println("----------afterCompletion------------"); 64 } 65 66 }LoginInterceptor.java
4.配置web.xml
1 <?xml version="1.0" encoding="UTF-8"?> 2 <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"> 3 <display-name>EmployeeManager</display-name> 4 <welcome-file-list> 5 <welcome-file>index.html</welcome-file> 6 <welcome-file>index.htm</welcome-file> 7 <welcome-file>index.jsp</welcome-file> 8 <welcome-file>default.html</welcome-file> 9 <welcome-file>default.htm</welcome-file> 10 <welcome-file>default.jsp</welcome-file> 11 </welcome-file-list> 12 13 <!-- 配置前端控制器 和 springMVC-servlet 的配置文件引入--> 14 <servlet> 15 <servlet-name>springMVC</servlet-name> 16 <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 17 <init-param> 18 <param-name>contextConfigLocation</param-name> 19 <param-value>classpath:springMVC-servlet.xml</param-value> 20 </init-param> 21 <load-on-startup>1</load-on-startup> 22 </servlet> 23 <servlet-mapping> 24 <servlet-name>springMVC</servlet-name> 25 <url-pattern>/*</url-pattern> 26 </servlet-mapping> 27 28 <!-- 設置servlet所有編碼的過濾器 --> 29 <filter> 30 <filter-name>CharacterEncodingFilter</filter-name> 31 <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> 32 <init-param> 33 <param-name>encoding</param-name> 34 <param-value>utf-8</param-value> 35 </init-param> 36 <init-param> 37 <param-name>forceEncoding</param-name> 38 <param-value>true</param-value> 39 </init-param> 40 </filter> 41 <filter-mapping> 42 <filter-name>CharacterEncodingFilter</filter-name> 43 <url-pattern>/*</url-pattern> 44 </filter-mapping> 45 46 <!-- 配置監聽器 --> 47 <listener> 48 <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 49 </listener> 50 51 <!-- Spring配置文件的引入 --> 52 <context-param> 53 <param-name>contextConfigLocation</param-name> 54 <param-value>classpath:applicationContext.xml</param-value> 55 </context-param> 56 57 </web-app>
Spring-SpringMVC-Mybatis整合的步驟