Spring+Mybatis+SpringMVC 整合 XML

首先我們需要了解的是有幾個配置文件?

  • 基礎的web.xml

1、spring-mybatis.xml:spring本身的配置,以及spring的數據庫配置(即與mybatis的聯合配置)
2、spring-mvc.xml:springMVC的配置,例如定義了controller、service等
3、mybatis-config.xml:mybatis本身的一些設置

其次是如何調用的?
第一個元素,調用了spring-mybatis.xml

<!--全局範圍內環境參數初始化-->
<context-param>
    <!--參數名稱-->
    <param-name>contextConfigLocation</param-name>
    <!--參數取值-->
    <param-value>classpath:spring/spring-mybatis.xml</param-value>
</context-param>

第二個元素,調用了spring-mvc.xml

<!---servlet配置-->
<!--用來聲明一個servlet的數據 -->
<servlet>
    <!--指定servlet的名稱-->
    <servlet-name>dispatcher</servlet-name>
    <!--指定servlet的類名稱,這裏配置了前端控制器-->
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--用來定義參數,可有多個init-param。在servlet類中通過getInitParamenter(String name)方法訪問初始化參數    -->
    <init-param>
        <param-name>contextConfigLocation</param-name>  <!--參數名稱-->
        <param-value>classpath:spring/spring-mvc.xml</param-value> <!--參數值-->
    </init-param>
    <!--當值爲正數或零時:Servlet容器先加載數值小的servlet,再依次加載其他數值大的servlet.-->
    <load-on-startup>1</load-on-startup>
    <!--設置是否啓用異步支持-->
    <async-supported>true</async-supported>
</servlet>
<!--用來定義servlet所對應的URL-->
<servlet-mapping>
    <!--指定servlet的名稱-->
    <servlet-name>dispatcher</servlet-name>
    <!--指定servlet所對應的URL-->
    <url-pattern>/</url-pattern>
</servlet-mapping>

在spring-mybatis.xml中,又調用了mybatis-config.xml

<!-- 4   配置sessionfactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
    <property name="dataSource" ref="dataSource"/>
    <property name="configLocation" value="classpath:mybatis-config.xml"/>
    <!-- 自動掃描mapping.xml文件 -->
    <property name="mapperLocations" value="classpath:mapper/*.xml"/>
</bean>

mybatis-config.xml以及spring-mybatis中,可以調用外部properties文件如jdbc.properties

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:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.1.xsd">

    <!--1 自動掃描 將標註Spring註解的類自動轉化Bean-->
    <context:component-scan base-package="com.spring.entity"/>
    <context:component-scan base-package="com.spring.dto"/>

    <!--2 加載數據資源屬性文件 -->
    <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="${jdbc.driver}"/>
        <property name="url" value="${jdbc.url}"/>
        <property name="username" value="${jdbc.username}"/>
        <property name="password" value="${jdbc.password}"/>
        <!-- 初始化連接大小 -->
        <property name="initialSize" value="${jdbc.initialSize}"/>
        <!-- 連接池最大數量 -->
        <property name="maxActive" value="${jdbc.maxActive}"/>
        <!-- 連接池最大空閒 -->
        <property name="maxIdle" value="${jdbc.maxIdle}"/>
        <!-- 連接池最小空閒 -->
        <property name="minIdle" value="${jdbc.minIdle}"/>
        <!-- 獲取連接最大等待時間 -->
        <property name="maxWait" value="${jdbc.maxWait}"/>
    </bean>

    <!-- 4   配置sessionfactory -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="configLocation" value="classpath:mybatis-config.xml"/>
        <!-- 自動掃描mapping.xml文件 -->
        <property name="mapperLocations" value="classpath:mapper/*.xml"/>
    </bean>

    <!-- 5  裝配dao接口 -->
    <bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        <!-- DAO接口所在包名,Spring會自動查找其下的類 -->
        <property name="basePackage" value="com.spring.mapper"/>
        <property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
    </bean>

    <!-- 6、聲明式事務管理 -->
    <bean id="transactionManager"
          class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource"/>
    </bean>

    <!-- 7、註解事務切面 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>
</beans>

mybatis-config.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>
    <properties resource="jdbc.properties"/>

    <settings>
        <!-- ☆這個配置使全局的映射器啓用或禁用緩存 -->
        <setting name="cacheEnabled" value="true"/>
        <!-- ☆全局啓用或禁用延遲加載。當禁用時,所有關聯對象都會即時加載 -->
        <setting name="lazyLoadingEnabled" value="true"/>
        <!-- ☆當啓用時,有延遲加載屬性的對象在被調用時將會完全加載任意屬性。否則,每種屬性將會按需要加載 -->
        <setting name="aggressiveLazyLoading" value="true"/>
        <!-- 允許或不允許多種結果集從一個單獨的語句中返回(需要適合的驅動) -->
        <setting name="multipleResultSetsEnabled" value="true"/>
        <!-- 使用列標籤代替列名。不同的驅動在這方便表現不同。參考驅動文檔或充分測試兩種方法來決定所使用的驅動 -->
        <setting name="useColumnLabel" value="true"/>
        <!-- 允許JDBC支持生成的鍵。需要適合的驅動。如果設置爲true則這個設置強制生成的鍵被使用,儘管一些驅動拒絕兼容但仍然有效(比如Derby) -->
        <setting name="useGeneratedKeys" value="true"/>
        <!-- ☆指定MyBatis如何自動映射列到字段/屬性。PARTIAL只會自動映射簡單,沒有嵌套的結果。FULL會自動映射任意複雜的結果(嵌套的或其他情況) -->
        <setting name="autoMappingBehavior" value="PARTIAL"/>
        <!-- ☆配置默認的執行器。SIMPLE執行器沒有什麼特別之處。REUSE執行器重用預處理語句。BATCH執行器重用語句和批量更新 -->
        <setting name="defaultExecutorType" value="SIMPLE"/>
    </settings>

    <!-- 別名定義 -->
    <typeAliases>
        <!-- 將類名第一個字母變爲小寫作爲別名 -->
        <package name="com.spring.entity"/>
        <package name="com.spring.dto"/>
    </typeAliases>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC"/>
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/lifecat"/>
                <property name="username" value="root"/>
                <property name="password" value="wangshihao"/>
                <!-- 在任意時間存在的活動(也就是正在使用)連接的數量 -->
                <property name="poolMaximumActiveConnections" value="10"/>
                <!-- 任意時間存在的空閒連接數 -->
                <property name="poolMaximumIdleConnections" value="5"/>
                <!-- 在被強制返回之前,池中連接被檢查的時間 -->
                <property name="poolMaximumCheckoutTime" value="20000"/>
                <!-- 這是給連接池一個打印日誌狀態機會的低層次設置,還有重新嘗試獲得連接,這些情況下往往需要很長時間(爲了避免連接池沒有配置時靜默失敗) -->
                <property name="poolTimeToWait" value="20000"/>
                <!-- 發送到數據的偵測查詢,用來驗證連接是否正常工作,並且準備接受請求。 -->
                <property name="poolPingQuery" value="NO PING QUERY SET"/>
                <!-- 這是開啓或禁用偵測查詢。如果開啓,你必須用一個合法的SQL語句(最好是很快速的)設置poolPingQuery屬性 -->
                <property name="poolPingEnabled" value="false"/>
                <!-- 這是用來配置poolPingQuery多次時間被用一次。這可以被設置匹配標準的數據庫連接超時時間,來避免不必要的偵測 -->
                <property name="poolPingConnectionsNotUsedFor" value="0"/>
            </dataSource>
        </environment>
    </environments>

    <mappers>
        <!--掃描包路徑下所有xxMapper.xml文件-->
        <package name="classpath:mapper"/>
    </mappers>

</configuration>

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:aop="http://www.springframework.org/schema/aop"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:tx="http://www.springframework.org/schema/tx"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
        http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
        http://www.springframework.org/schema/tx
        http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
        http://www.springframework.org/schema/aop
        http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
        http://www.springframework.org/schema/context
        http://www.springframework.org/schema/context/spring-context-4.1.xsd
        http://www.springframework.org/schema/mvc
        http://www.springframework.org/schema/mvc/spring-mvc.xsd">

    <!-- 1、配置映射器與適配器 -->
    <mvc:annotation-driven/>

    <!-- 2、視圖解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- 前綴和後綴 -->
        <property name="prefix" value="/WEB-INF/jsp"/>
        <property name="suffix" value=".jsp"/>
    </bean>

    <!-- 3、自動掃描該包,使SpringMVC認爲包下用了@controller註解的類是控制器  -->
    <context:component-scan base-package="com.spring.controller"/>

    <context:component-scan base-package="com.spring.service"/>
</beans>

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <!--全局範圍內環境參數初始化-->
    <context-param>
        <!--參數名稱-->
        <param-name>contextConfigLocation</param-name>
        <!--參數取值-->
        <param-value>classpath:spring/spring-mybatis.xml</param-value>
    </context-param>

    <!--以下配置的加載順序:先 ServletContext >> context-param >> listener >> filter >> servlet >>  spring-->

    <!--過濾器配置-->
    <!--:編碼過濾器-->
    <filter>      <!-- 用來聲明filter的相關設定,過濾器可以截取和修改一個Servlet或JSP頁面的請求或從一個Servlet或JSP頁面發出的響應-->
        <filter-name>encodingFilter</filter-name>     <!--指定filter的名字-->
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <!--定義filter的類的名稱-->
        <async-supported>true</async-supported>     <!--設置是否啓用異步支持-->
        <init-param><!--用來定義參數,若在Servlet可以使用下列方法來獲得:String param_name=getServletContext().getInitParamter("param-name裏面的值");-->
            <param-name>encoding</param-name>   <!--參數名稱-->
            <param-value>UTF-8</param-value> <!--參數值-->
        </init-param>
    </filter>
    <filter-mapping><!--用來定義filter所對應的URL-->
        <filter-name>encodingFilter</filter-name>     <!--指定對應filter的名字-->
        <url-pattern>/ *</url-pattern>       <!--指定filter所對應的URL-->
    </filter-mapping>

    <!--監聽器配置-->
    <!--:spring監聽器-->
    <listener>        <!--用來設定Listener接口-->
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class><!--定義Listener的類名稱-->
    </listener>
    <!-- 防止Spring內存溢出監聽器  -->
    <listener>
        <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
    </listener>

    <!---servlet配置-->
    <!--用來聲明一個servlet的數據 -->
    <servlet>
        <!--指定servlet的名稱-->
        <servlet-name>dispatcher</servlet-name>
        <!--指定servlet的類名稱,這裏配置了前端控制器-->
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <!--用來定義參數,可有多個init-param。在servlet類中通過getInitParamenter(String name)方法訪問初始化參數    -->
        <init-param>
            <param-name>contextConfigLocation</param-name>  <!--參數名稱-->
            <param-value>classpath:spring/spring-mvc.xml</param-value> <!--參數值-->
        </init-param>
        <!--當值爲正數或零時:Servlet容器先加載數值小的servlet,再依次加載其他數值大的servlet.-->
        <load-on-startup>1</load-on-startup>
        <!--設置是否啓用異步支持-->
        <async-supported>true</async-supported>
    </servlet>
    <!--用來定義servlet所對應的URL-->
    <servlet-mapping>
        <!--指定servlet的名稱-->
        <servlet-name>dispatcher</servlet-name>
        <!--指定servlet所對應的URL-->
        <url-pattern>/</url-pattern>
    </servlet-mapping>

    <!--會話超時配置(單位爲分鐘)-->
    <session-config>
        <!--如果某個會話在一定時間未被訪問,則服務器可以扔掉以節約內存-->
        <session-timeout>120</session-timeout>
    </session-config>

    <!---MIME類型配置 -->
    <!--設定某種擴展名的文件用一種應用程序來打開的方式類型,當該擴展名文件被訪問的時候,瀏覽器會自動使用指定應用程序來打開-->
    <mime-mapping>
        <!--擴展名名稱-->
        <extension>*.ppt</extension>
        <!--MIME格式-->
        <mime-type>application/mspowerpoint</mime-type>
    </mime-mapping>

    <!---歡迎頁面配置 -->
    <!--定義首頁列單.-->
    <welcome-file-list>
        <!--用來指定首頁文件名稱.我們可以用<welcome-file>指定幾個首頁,而服務器會依照設定的順序來找首頁.-->
        <welcome-file>/WEB-INF/jsp/index.jsp</welcome-file>
    </welcome-file-list>

    <!--配置錯誤頁面-->
    <error-page>  <!--將錯誤代碼(Error Code)或異常(Exception)的種類對應到web應用資源路徑.-->
        <!--HTTP Error code,例如: 404403-->
        <error-code>404</error-code>
        <!--用來設置發生錯誤或異常時要顯示的頁面-->
        <location>/error.html</location>
    </error-page>

    <error-page>
        <!--設置可能會發生的java異常類型,例如:java.lang.Exception-->
        <exception-type>java.lang.Exception</exception-type>
        <!--用來設置發生錯誤或異常時要顯示的頁面-->
        <location>/ExceptionError.html</location>
    </error-page>

</web-app>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章