<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      SSM框架——詳細(xì)整合教程(Spring+SpringMVC+MyBatis)

      ?

      1、基本概念

       

      1.1、Spring 

              Spring是一個(gè)開(kāi)源框架,Spring是于2003 年興起的一個(gè)輕量級(jí)的Java 開(kāi)發(fā)框架,由Rod Johnson 在其著作Expert One-On-One J2EE Development and Design中闡述的部分理念和原型衍生而來(lái)。它是為了解決企業(yè)應(yīng)用開(kāi)發(fā)的復(fù)雜性而創(chuàng)建的。Spring使用基本的JavaBean來(lái)完成以前只可能由EJB完成的事情。然而,Spring的用途不僅限于服務(wù)器端的開(kāi)發(fā)。從簡(jiǎn)單性、可測(cè)試性和松耦合的角度而言,任何Java應(yīng)用都可以從Spring中受益。 簡(jiǎn)單來(lái)說(shuō),Spring是一個(gè)輕量級(jí)的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架。

       

      1.2、SpringMVC     

              Spring MVC屬于SpringFrameWork的后續(xù)產(chǎn)品,已經(jīng)融合在Spring Web Flow里面。Spring MVC 分離了控制器、模型對(duì)象、分派器以及處理程序?qū)ο蟮慕巧@種分離讓它們更容易進(jìn)行定制。

       

      1.3、MyBatis

             MyBatis 本是apache的一個(gè)開(kāi)源項(xiàng)目iBatis, 2010年這個(gè)項(xiàng)目由apache software foundation 遷移到了google code,并且改名為MyBatis 。MyBatis是一個(gè)基于Java的持久層框架。iBATIS提供的持久層框架包括SQL Maps和Data Access Objects(DAO)MyBatis 消除了幾乎所有的JDBC代碼和參數(shù)的手工設(shè)置以及結(jié)果集的檢索。MyBatis 使用簡(jiǎn)單的 XML或注解用于配置和原始映射,將接口和 Java 的POJOs(Plain Old Java Objects,普通的 Java對(duì)象)映射成數(shù)據(jù)庫(kù)中的記錄。

       

       

      2、開(kāi)發(fā)環(huán)境搭建以及創(chuàng)建Maven Web項(xiàng)目

      參看之前的博文:http://www.rzrgm.cn/zyw-205520/p/4767633.html

       

      3、SSM整合

       下面主要介紹三大框架的整合,至于環(huán)境的搭建以及項(xiàng)目的創(chuàng)建,參看上面的博文。這次整合我分了2個(gè)配置文件,分別是spring-mybatis.xml,包含spring和mybatis的配置文件,還有個(gè)是spring-mvc的配置文件,此外有2個(gè)資源文件:jdbc.propertis和log4j.properties。完整目錄結(jié)構(gòu)如下(最后附上源碼下載地址):                                                                      

      使用框架的版本:

             Spring 4.0.2 RELEASE

             Spring MVC 4.0.2 RELEASE

             MyBatis 3.2.6

       

      3.1、Maven引入需要的JAR包

          在pom.xml中引入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.javen.maven01</groupId>
          <artifactId>maven01</artifactId>
          <packaging>war</packaging>
          <version>0.0.1-SNAPSHOT</version>
          <name>maven01 Maven Webapp</name>
          <url>http://maven.apache.org</url>
          
          <properties>  
              <!-- spring版本號(hào) -->  
              <spring.version>4.0.2.RELEASE</spring.version>  
              <!-- mybatis版本號(hào) -->  
              <mybatis.version>3.2.6</mybatis.version>  
              <!-- log4j日志文件管理包版本 -->  
              <slf4j.version>1.7.7</slf4j.version>  
              <log4j.version>1.2.17</log4j.version>  
          </properties> 
          
          <dependencies>
              <dependency>
                  <groupId>junit</groupId>
                  <artifactId>junit</artifactId>
                  <version>3.8.1</version>
                   <!-- 表示開(kāi)發(fā)的時(shí)候引入,發(fā)布的時(shí)候不會(huì)加載此包 -->  
                  <scope>test</scope>
              </dependency>
              <!-- <dependency>
                  <groupId>javax.servlet</groupId>
                  <artifactId>javax.servlet-api</artifactId>
                  <version>3.1.0</version>
              </dependency> -->
              
               <!-- spring核心包 -->  
              <dependency>  
                  <groupId>org.springframework</groupId>  
                  <artifactId>spring-core</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-oxm</artifactId>  
                  <version>${spring.version}</version>  
              </dependency>  
              <dependency>  
                  <groupId>org.springframework</groupId>  
                  <artifactId>spring-tx</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-webmvc</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-context-support</artifactId>  
                  <version>${spring.version}</version>  
              </dependency>  
        
              <dependency>  
                  <groupId>org.springframework</groupId>  
                  <artifactId>spring-test</artifactId>  
                  <version>${spring.version}</version>  
              </dependency>  
              <!-- mybatis核心包 -->  
              <dependency>  
                  <groupId>org.mybatis</groupId>  
                  <artifactId>mybatis</artifactId>  
                  <version>${mybatis.version}</version>  
              </dependency>  
               <!-- mybatis/spring包 -->  
              <dependency>  
                  <groupId>org.mybatis</groupId>  
                  <artifactId>mybatis-spring</artifactId>  
                  <version>1.2.2</version>  
              </dependency>  
              
               <!-- 導(dǎo)入java ee jar 包 -->  
              <dependency>  
                  <groupId>javax</groupId>  
                  <artifactId>javaee-api</artifactId>  
                  <version>7.0</version>  
              </dependency>  
              
               <!-- 導(dǎo)入Mysql數(shù)據(jù)庫(kù)鏈接jar包 -->  
              <dependency>  
                  <groupId>mysql</groupId>  
                  <artifactId>mysql-connector-java</artifactId>  
                  <version>5.1.36</version>  
              </dependency>  
              <!-- 導(dǎo)入dbcp的jar包,用來(lái)在applicationContext.xml中配置數(shù)據(jù)庫(kù) -->  
              <dependency>  
                  <groupId>commons-dbcp</groupId>  
                  <artifactId>commons-dbcp</artifactId>  
                  <version>1.2.2</version>  
              </dependency>  
              
              <!-- JSTL標(biāo)簽類 -->  
              <dependency>  
                  <groupId>jstl</groupId>  
                  <artifactId>jstl</artifactId>  
                  <version>1.2</version>  
              </dependency>  
              <!-- 日志文件管理包 -->  
              <!-- log start -->  
              <dependency>  
                  <groupId>log4j</groupId>  
                  <artifactId>log4j</artifactId>  
                  <version>${log4j.version}</version>  
              </dependency>  
                
                
              <!-- 格式化對(duì)象,方便輸出日志 -->  
              <dependency>  
                  <groupId>com.alibaba</groupId>  
                  <artifactId>fastjson</artifactId>  
                  <version>1.1.41</version>  
              </dependency>  
        
        
              <dependency>  
                  <groupId>org.slf4j</groupId>  
                  <artifactId>slf4j-api</artifactId>  
                  <version>${slf4j.version}</version>  
              </dependency>  
        
              <dependency>  
                  <groupId>org.slf4j</groupId>  
                  <artifactId>slf4j-log4j12</artifactId>  
                  <version>${slf4j.version}</version>  
              </dependency>  
              <!-- log end -->  
              <!-- 映入JSON -->  
              <dependency>  
                  <groupId>org.codehaus.jackson</groupId>  
                  <artifactId>jackson-mapper-asl</artifactId>  
                  <version>1.9.13</version>  
              </dependency>  
              <!-- 上傳組件包 -->  
              <dependency>  
                  <groupId>commons-fileupload</groupId>  
                  <artifactId>commons-fileupload</artifactId>  
                  <version>1.3.1</version>  
              </dependency>  
              <dependency>  
                  <groupId>commons-io</groupId>  
                  <artifactId>commons-io</artifactId>  
                  <version>2.4</version>  
              </dependency>  
              <dependency>  
                  <groupId>commons-codec</groupId>  
                  <artifactId>commons-codec</artifactId>  
                  <version>1.9</version>  
              </dependency>  
      
          </dependencies>
          
          <build>
              <finalName>maven01</finalName>
              <plugins>
                  <plugin>
                      <groupId>org.eclipse.jetty</groupId>
                      <artifactId>jetty-maven-plugin</artifactId>
                      <version>9.2.8.v20150217</version>
                      <configuration>
                          <httpConnector>
                              <port>80</port>
                          </httpConnector>
                          <stopKey>shutdown</stopKey>
                          <stopPort>9966</stopPort>
                      </configuration>
                  </plugin>
              </plugins>
          </build>
      
      </project>

       

      3.2、整合SpringMVC

      3.2.1、配置spring-mvc.xml

      配置里面的注釋也很詳細(xì),主要是自動(dòng)掃描控制器,視圖模式,注解的啟動(dòng)這三個(gè)。

       

      <?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">  
          <!-- 自動(dòng)掃描該包,使SpringMVC認(rèn)為包下用了@controller注解的類是控制器 -->  
          <context:component-scan base-package="com.javen.controller" />  
          <!-- 擴(kuò)充了注解驅(qū)動(dòng),可以將請(qǐng)求參數(shù)綁定到控制器參數(shù) -->
          <mvc:annotation-driven/>
          <!-- 靜態(tài)資源處理  css js imgs -->
          <mvc:resources location="/resources/**" mapping="/resources"/>
          
          <!--避免IE執(zhí)行AJAX時(shí),返回JSON出現(xiàn)下載文件 -->  
          <bean id="mappingJacksonHttpMessageConverter"  
              class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">  
              <property name="supportedMediaTypes">  
                  <list>  
                      <value>text/html;charset=UTF-8</value>  
                  </list>  
              </property>  
          </bean>  
          <!-- 啟動(dòng)SpringMVC的注解功能,完成請(qǐng)求和注解POJO的映射 -->  
          <bean  
              class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
              <property name="messageConverters">  
                  <list>  
                      <ref bean="mappingJacksonHttpMessageConverter" /> <!-- JSON轉(zhuǎn)換器 -->  
                  </list>  
              </property>  
          </bean>  
            
          <!-- 配置文件上傳,如果沒(méi)有使用文件上傳可以不用配置,當(dāng)然如果不配,那么配置文件中也不必引入上傳組件包 -->  
          <bean id="multipartResolver"    
              class="org.springframework.web.multipart.commons.CommonsMultipartResolver">    
              <!-- 默認(rèn)編碼 -->  
              <property name="defaultEncoding" value="utf-8" />    
              <!-- 文件大小最大值 -->  
              <property name="maxUploadSize" value="10485760000" />    
              <!-- 內(nèi)存中的最大值 -->  
              <property name="maxInMemorySize" value="40960" />    
              <!-- 啟用是為了推遲文件解析,以便捕獲文件大小異常 -->
              <property name="resolveLazily" value="true"/>
          </bean>   
          
          <!-- 配置ViewResolver 。可用多個(gè)ViewResolver 。使用order屬性排序。   InternalResourceViewResolver 放在最后-->
          <bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
          <property name="order" value="1"></property>
              <property name="mediaTypes">
                  <map>
                      <!-- 告訴視圖解析器,返回的類型為json格式 -->
                      <entry key="json" value="application/json" />
                      <entry key="xml" value="application/xml" />
                      <entry key="htm" value="text/htm" />
                  </map>
              </property>
              <property name="defaultViews">
                  <list>
                      <!-- ModelAndView里的數(shù)據(jù)變成JSON -->
                      <bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
                  </list>
              </property>
              <property name="ignoreAcceptHeader" value="true"></property>
          </bean>
          
         <!-- 定義跳轉(zhuǎn)的文件的前后綴 ,視圖模式配置-->  
          <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">  
              <!-- 這里的配置我的理解是自動(dòng)給后面action的方法return的字符串加上前綴和后綴,變成一個(gè) 可用的url地址 -->  
              <property name="prefix" value="/WEB-INF/jsp/" />  
              <property name="suffix" value=".jsp" />  
          </bean>  
      </beans>  

       

       

       

      3.2.2、配置web.xml文件

       配置的spring-mvc的Servlet就是為了完成SpringMVC+MAVEN的整合。

      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"  
          version="3.0">  
          <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>   -->
          <!-- 編碼過(guò)濾器 -->  
          <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監(jiān)聽(tīng)器 -->  
         <!--  <listener>  
              <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
          </listener>   -->
          <!-- 防止Spring內(nèi)存溢出監(jiān)聽(tīng)器 -->  
          <!-- <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>  
              <!-- 此處可以可以配置成*.do,對(duì)應(yīng)struts的后綴習(xí)慣 -->  
              <url-pattern>/</url-pattern>  
          </servlet-mapping>  
          <welcome-file-list>  
              <welcome-file>/index.jsp</welcome-file>  
          </welcome-file-list>  
        
      </web-app>  

       

       

       

      3.2.3、Log4j的配置

         為了方便調(diào)試,一般都會(huì)使用日志來(lái)輸出信息,Log4j是Apache的一個(gè)開(kāi)放源代碼項(xiàng)目,通過(guò)使用Log4j,我們可以控制日志信息輸送的目的地是控制臺(tái)、文件、GUI組件,甚至是套接口服務(wù)器、NT的事件記錄器、UNIX Syslog守護(hù)進(jìn)程等;我們也可以控制每一條日志的輸出格式;通過(guò)定義每一條日志信息的級(jí)別,我們能夠更加細(xì)致地控制日志的生成過(guò)程。

       

            Log4j的配置很簡(jiǎn)單,而且也是通用的,下面給出一個(gè)基本的配置,換到其他項(xiàng)目中也無(wú)需做多大的調(diào)整,如果想做調(diào)整或者想了解Log4j的各種配置,參看我轉(zhuǎn)載的一篇博文,很詳細(xì):Log4j配置詳解_shu_lin的博客-CSDN博客

      下面給出配置文件目錄:

       

       

      log4j.properties

       

      log4j.rootLogger=INFO,Console,File  
      #定義日志輸出目的地為控制臺(tái)  
      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  
        
      #文件大小到達(dá)指定尺寸的時(shí)候產(chǎn)生一個(gè)新的文件  
      log4j.appender.File = org.apache.log4j.RollingFileAppender  
      #指定輸出目錄  
      log4j.appender.File.File = logs/ssm.log  
      #定義文件最大大小  
      log4j.appender.File.MaxFileSize = 10MB  
      # 輸出所以日志,如果換成DEBUG表示輸出DEBUG以上級(jí)別日志  
      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  

       

       

       

      3.2.4、使用Jetty測(cè)試

       

       

       

      package com.javen.model;
      
      public class User {
          private Integer id;
      
          private String userName;
      
          private String password;
      
          private Integer age;
      
          public Integer getId() {
              return id;
          }
      
          public void setId(Integer id) {
              this.id = id;
          }
      
          public String getUserName() {
              return userName;
          }
      
          public void setUserName(String userName) {
              this.userName = userName == null ? null : userName.trim();
          }
      
          public String getPassword() {
              return password;
          }
      
          public void setPassword(String password) {
              this.password = password == null ? null : password.trim();
          }
      
          public Integer getAge() {
              return age;
          }
      
          public void setAge(Integer age) {
              this.age = age;
          }
      
          @Override
          public String toString() {
              return "User [id=" + id + ", userName=" + userName + ", password="
                      + password + ", age=" + age + "]";
          }
          
          
      }

       

      package com.javen.controller;
      import javax.servlet.http.HttpServletRequest;
      
      import org.slf4j.Logger;
      import org.slf4j.LoggerFactory;
      import org.springframework.stereotype.Controller;  
      import org.springframework.ui.Model;  
      import org.springframework.web.bind.annotation.RequestMapping;  
      import org.springframework.web.bind.annotation.RequestMethod;
      import com.javen.model.User;
        
        
      @Controller  
      @RequestMapping("/user")  
      // /user/**
      public class UserController {  
          private static Logger log=LoggerFactory.getLogger(UserController.class);
            
          
          // /user/test?id=1
          @RequestMapping(value="/test",method=RequestMethod.GET)  
          public String test(HttpServletRequest request,Model model){  
              int userId = Integer.parseInt(request.getParameter("id"));  
              System.out.println("userId:"+userId);
              User user=null;
              if (userId==1) {
                   user = new User();  
                   user.setAge(11);
                   user.setId(1);
                   user.setPassword("123");
                   user.setUserName("javen");
              }
             
              log.debug(user.toString());
              model.addAttribute("user", user);  
              return "index";  
          }  
      }  

       

       

       

      在瀏覽器中輸入:http://localhost/user/test?id=1

       

      到此 SpringMVC+Maven 整合完畢

       

       

       


      3.3 Spring與MyBatis的整合

         取消3.2.2 web.xml中注釋的代碼 

       

       

      3.3.1、建立JDBC屬性文件

       

       

       

      jdbc.properties(文件編碼修改為utf-8)

       

      driver=com.mysql.jdbc.Driver
      url=jdbc:mysql://localhost:3306/maven
      username=root
      password=root
      #定義初始連接數(shù)  
      initialSize=0  
      #定義最大連接數(shù)  
      maxActive=20  
      #定義最大空閑  
      maxIdle=20  
      #定義最小空閑  
      minIdle=1  
      #定義最長(zhǎng)等待時(shí)間  
      maxWait=60000  

       

      此時(shí)的目錄結(jié)構(gòu)為 

       

       

                                                                    

       

      3.3.2、建立spring-mybatis.xml配置文件

          這個(gè)文件就是用來(lái)完成spring和mybatis的整合的。這里面也沒(méi)多少行配置,主要的就是自動(dòng)掃描,自動(dòng)注入,配置數(shù)據(jù)庫(kù)。注釋也很詳細(xì),大家看看就明白了。

      spring-mybatis.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">  
          <!-- 自動(dòng)掃描 -->  
          <context:component-scan base-package="com.javen" />  
          
          <!-- 引入配置文件 -->  
          <bean id="propertyConfigurer"  
              class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
              <property name="location" value="classpath:jdbc.properties" />  
          </bean>  
        
          <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"  
              destroy-method="close">  
              <property name="driverClassName" value="${driver}" />  
              <property name="url" value="${url}" />  
              <property name="username" value="${username}" />  
              <property name="password" value="${password}" />  
              <!-- 初始化連接大小 -->  
              <property name="initialSize" value="${initialSize}"></property>  
              <!-- 連接池最大數(shù)量 -->  
              <property name="maxActive" value="${maxActive}"></property>  
              <!-- 連接池最大空閑 -->  
              <property name="maxIdle" value="${maxIdle}"></property>  
              <!-- 連接池最小空閑 -->  
              <property name="minIdle" value="${minIdle}"></property>  
              <!-- 獲取連接最大等待時(shí)間 -->  
              <property name="maxWait" value="${maxWait}"></property>  
          </bean>  
        
          <!-- spring和MyBatis完美整合,不需要mybatis的配置映射文件 -->  
          <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">  
              <property name="dataSource" ref="dataSource" />  
              <!-- 自動(dòng)掃描mapping.xml文件 -->  
              <property name="mapperLocations" value="classpath:com/javen/mapping/*.xml"></property>  
          </bean>  
        
          <!-- DAO接口所在包名,Spring會(huì)自動(dòng)查找其下的類 -->  
          <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">  
              <property name="basePackage" value="com.javen.dao" />  
              <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"></property>  
          </bean>  
        
          <!-- (事務(wù)管理)transaction manager, use JtaTransactionManager for global tx -->  
          <bean id="transactionManager"  
              class="org.springframework.jdbc.datasource.DataSourceTransactionManager">  
              <property name="dataSource" ref="dataSource" />  
          </bean>  
        
      </beans>  

       

      3.4、JUnit測(cè)試

        經(jīng)過(guò)以上步驟,我們已經(jīng)完成了Spring和mybatis的整合,這樣我們就可以編寫(xiě)一段測(cè)試代碼來(lái)試試是否成功了。

       

      3.4.1、創(chuàng)建測(cè)試用表

      既然我們需要測(cè)試,那么我們就需要建立在數(shù)據(jù)庫(kù)中建立一個(gè)測(cè)試表,這個(gè)表建的很簡(jiǎn)單,SQL語(yǔ)句為:

       

      -- ----------------------------
      -- Table structure for `user_t`
      -- ----------------------------
      DROP TABLE IF EXISTS `user_t`;
      CREATE TABLE `user_t` (
        `id` int(11) NOT NULL AUTO_INCREMENT,
        `user_name` varchar(40) NOT NULL,
        `password` varchar(255) NOT NULL,
        `age` int(4) NOT NULL,
        PRIMARY KEY (`id`)
      ) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8;
      
      -- ----------------------------
      -- Records of user_t
      -- ----------------------------
      INSERT INTO `user_t` VALUES ('1', '測(cè)試', '345', '24');
      INSERT INTO `user_t` VALUES ('2', 'javen', '123', '10');

       

      3.4.2、利用MyBatis Generator自動(dòng)創(chuàng)建代碼

       

      參考博文:SSM框架——使用MyBatis Generator自動(dòng)創(chuàng)建代碼_shu_lin的博客-CSDN博客

       

       這個(gè)可根據(jù)表自動(dòng)創(chuàng)建實(shí)體類、MyBatis映射文件以及DAO接口,當(dāng)然,我習(xí)慣將生成的接口名改為IUserDao,而不是直接用它生成的UserMapper。如果不想麻煩就可以不改。完成后將文件復(fù)制到工程中。如圖:

        

      3.4.3、建立Service接口和實(shí)現(xiàn)類

        

      下面給出具體的內(nèi)容:

      IUserService.jave

      package com.javen.service;  
      
      import com.javen.model.User;
        
        
      public interface IUserService {  
          public User getUserById(int userId);  
      } 

      UserServiceImpl.java

      package com.javen.service.impl;
      import javax.annotation.Resource;  
      
      import org.springframework.stereotype.Service;  
      import com.javen.dao.IUserDao;
      import com.javen.model.User;
      import com.javen.service.IUserService;
        
        
      @Service("userService")  
      public class UserServiceImpl implements IUserService {  
          @Resource  
          private IUserDao userDao;  
          
          public User getUserById(int userId) {  
              // TODO Auto-generated method stub  
              return this.userDao.selectByPrimaryKey(userId);  
          }  
        
      } 

       

      3.4.4、建立測(cè)試類

       測(cè)試類在src/test/java中建立,下面測(cè)試類中注釋掉的部分是不使用Spring時(shí),一般情況下的一種測(cè)試方法;如果使用了Spring那么就可以使用注解的方式來(lái)引入配置文件和類,然后再將service接口對(duì)象注入,就可以進(jìn)行測(cè)試了。

             如果測(cè)試成功,表示Spring和Mybatis已經(jīng)整合成功了。輸出信息使用的是Log4j打印到控制臺(tái)。

      package com.javen.testmybatis;
      
      import javax.annotation.Resource;  
      
      import org.apache.log4j.Logger;  
      import org.junit.Test;
      import org.junit.runner.RunWith;
      import org.springframework.test.context.ContextConfiguration;  
      import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;  
      import com.alibaba.fastjson.JSON;  
      import com.javen.model.User;
      import com.javen.service.IUserService;
        
      @RunWith(SpringJUnit4ClassRunner.class)     //表示繼承了SpringJUnit4ClassRunner類  
      @ContextConfiguration(locations = {"classpath:spring-mybatis.xml"})  
        
      public class TestMyBatis {  
          private static Logger logger = Logger.getLogger(TestMyBatis.class);  
      //  private ApplicationContext ac = null;  
          @Resource  
          private IUserService userService = null;  
        
      //  @Before  
      //  public void before() {  
      //      ac = new ClassPathXmlApplicationContext("applicationContext.xml");  
      //      userService = (IUserService) ac.getBean("userService");  
      //  }  
        
          @Test  
          public void test1() {  
              User user = userService.getUserById(1);  
              // System.out.println(user.getUserName());  
              // logger.info("值:"+user.getUserName());  
              logger.info(JSON.toJSONString(user));  
          }  
      }  

      測(cè)試結(jié)果 

       

       

      3.4.5、建立UserController類

      UserController.java  控制器   

      package com.javen.controller;
      import java.io.File;
      import java.io.IOException;
      import java.util.Map;
      
      import javax.annotation.Resource;
      import javax.servlet.http.HttpServletRequest;
      
      import org.apache.commons.io.FileUtils;
      import org.slf4j.Logger;
      import org.slf4j.LoggerFactory;
      import org.springframework.http.HttpStatus;
      import org.springframework.http.ResponseEntity;
      import org.springframework.stereotype.Controller;  
      import org.springframework.ui.Model;  
      import org.springframework.web.bind.annotation.PathVariable;
      import org.springframework.web.bind.annotation.RequestMapping;  
      import org.springframework.web.bind.annotation.RequestMethod;
      import org.springframework.web.bind.annotation.RequestParam;
      import org.springframework.web.bind.annotation.ResponseBody;
      import org.springframework.web.multipart.MultipartFile;
      
      import com.javen.model.User;
      import com.javen.service.IUserService;
        
        
      @Controller  
      @RequestMapping("/user")  
      // /user/**
      public class UserController {  
          private static Logger log=LoggerFactory.getLogger(UserController.class);
           @Resource  
           private IUserService userService;     
          
          // /user/test?id=1
          @RequestMapping(value="/test",method=RequestMethod.GET)  
          public String test(HttpServletRequest request,Model model){  
              int userId = Integer.parseInt(request.getParameter("id"));  
              System.out.println("userId:"+userId);
              User user=null;
              if (userId==1) {
                   user = new User();  
                   user.setAge(11);
                   user.setId(1);
                   user.setPassword("123");
                   user.setUserName("javen");
              }
             
              log.debug(user.toString());
              model.addAttribute("user", user);  
              return "index";  
          }  
          
          
          // /user/showUser?id=1
          @RequestMapping(value="/showUser",method=RequestMethod.GET)  
          public String toIndex(HttpServletRequest request,Model model){  
              int userId = Integer.parseInt(request.getParameter("id"));  
              System.out.println("userId:"+userId);
              User user = this.userService.getUserById(userId);  
              log.debug(user.toString());
              model.addAttribute("user", user);  
              return "showUser";  
          }  
          
       // /user/showUser2?id=1
          @RequestMapping(value="/showUser2",method=RequestMethod.GET)  
          public String toIndex2(@RequestParam("id") String id,Model model){  
              int userId = Integer.parseInt(id);  
              System.out.println("userId:"+userId);
              User user = this.userService.getUserById(userId);  
              log.debug(user.toString());
              model.addAttribute("user", user);  
              return "showUser";  
          }  
          
          
          // /user/showUser3/{id}
          @RequestMapping(value="/showUser3/{id}",method=RequestMethod.GET)  
          public String toIndex3(@PathVariable("id")String id,Map<String, Object> model){  
              int userId = Integer.parseInt(id);  
              System.out.println("userId:"+userId);
              User user = this.userService.getUserById(userId);  
              log.debug(user.toString());
              model.put("user", user);  
              return "showUser";  
          }  
          
       // /user/{id}
          @RequestMapping(value="/{id}",method=RequestMethod.GET)  
          public @ResponseBody User getUserInJson(@PathVariable String id,Map<String, Object> model){  
              int userId = Integer.parseInt(id);  
              System.out.println("userId:"+userId);
              User user = this.userService.getUserById(userId);  
              log.info(user.toString());
              return user;  
          }  
          
          // /user/{id}
          @RequestMapping(value="/jsontype/{id}",method=RequestMethod.GET)  
          public ResponseEntity<User>  getUserInJson2(@PathVariable String id,Map<String, Object> model){  
              int userId = Integer.parseInt(id);  
              System.out.println("userId:"+userId);
              User user = this.userService.getUserById(userId);  
              log.info(user.toString());
              return new ResponseEntity<User>(user,HttpStatus.OK);  
          } 
          
          //文件上傳、
          @RequestMapping(value="/upload")
          public String showUploadPage(){
              return "user_admin/file";
          }
          
          @RequestMapping(value="/doUpload",method=RequestMethod.POST)
          public String doUploadFile(@RequestParam("file")MultipartFile file) throws IOException{
              if (!file.isEmpty()) {
                  log.info("Process file:{}",file.getOriginalFilename());
              }
              FileUtils.copyInputStreamToFile(file.getInputStream(), new File("E:\\",System.currentTimeMillis()+file.getOriginalFilename()));
              return "succes";
          }
      } 

       

      3.4.6、新建jsp頁(yè)面

      file.jsp

      <%@ page language="java" contentType="text/html; charset=utf-8"
          pageEncoding="utf-8"%>
      <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
      <html>
      <head>
      <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
      <title>Insert title here</title>
      </head>
      <body>
          <h1>上傳文件</h1>
          <form method="post" action="/user/doUpload" enctype="multipart/form-data">
              <input type="file" name="file"/>
              <input type="submit" value="上傳文件"/>
              
          </form>
      </body>
      </html

      index.jsp

      <html>
      <body>
      <h2>Hello World!</h2>
      </body>
      </html>

      showUser.jsp

      <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>  
      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
      <html>  
        <head>  
          <title>測(cè)試</title>  
        </head>  
          
        <body>  
          ${user.userName}  
        </body>  
      </html> 
      

      至此,完成Spring+SpingMVC+mybatis這三大框架整合完成。

       

      3.4.7、部署項(xiàng)目

       

      輸入地址:http://localhost/user/jsontype/2

       

        項(xiàng)目下載地址:GitHub - Javen205/SSM: SSM框架——詳細(xì)整合教程(Spring+SpringMVC+MyBatis)

       

          參考博客:http://blog.csdn.net/gebitan505/article/details/44455235

      ?
      posted @ 2023-09-11 15:01  Knight_Key  閱讀(26)  評(píng)論(0)    收藏  舉報(bào)
      主站蜘蛛池模板: 亚洲老熟女一区二区三区| 亚洲国产精品人人做人人爱| 日韩卡一卡2卡3卡4卡| 中文国产成人精品久久不卡| 尤物yw193无码点击进入| 亚洲欧洲av一区二区久久| 久久精品无码免费不卡 | 成在人线av无码免费| 久久国产自偷自偷免费一区| 女人与公狍交酡女免费| 国产成人一区二区三区免费| 人妻激情视频一区二区三区| 欧美人妻在线一区二区| 国产不卡精品视频男人的天堂| 成在人线av无码免费看网站直播| 无码av最新无码av专区| 成人免费在线播放av| 日韩一区国产二区欧美三区| 丰满少妇在线观看网站| 无码人妻斩一区二区三区 | 久久国产免费直播| 国产精品久久无码不卡黑寡妇| 九九久久人妻精品一区色| 国产福利微视频一区二区| Y111111国产精品久久久| 日韩精品久久一区二区三| 国产稚嫩高中生呻吟激情在线视频| 成人午夜电影福利免费| 亚洲欧洲无码av电影在线观看 | 国产av一区二区三区综合| 人人妻人人狠人人爽| 欧美日韩国产综合草草| 精品国产精品午夜福利| 色综合久久综合中文综合网| 亚洲人妻精品一区二区| 亚洲人成网站77777在线观看| 国产精品天天看天天狠| 免费国产va在线观看| 亚洲av网一区天堂福利| 熟妇的奶头又大又长奶水视频| 一区二区三区四区亚洲综合|