1. 程式人生 > >mybatis之mybatis-config.xml 配置中的標籤詳解

mybatis之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>  
        <!-- 引數設定 -->  
        <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" />  
    <!--當檢測出未知列(或未知屬性)時,如何處理,預設情況下沒有任何提示,這在測試的時候很不方便,不容易找到錯誤。
    NONE : 不做任何處理 (預設值)
    WARNING : 警告日誌形式的詳細資訊
    FAILING : 對映失敗,丟擲異常和詳細資訊
    -->
    <setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
    <!-- 配置預設的執行器。SIMPLE執行器沒有什麼特別之處。REUSE執行器重用預處理語句。BATCH執行器重用語句和批量更新 -->  
            <setting name="defaultExecutorType" value="SIMPLE" /> 
    <!-- 設定超時時間,它決定驅動等待一個數據庫響應的時間 -->  
            <setting name="defaultStatementTimeout" value="25000" />  
    <!--設定查詢返回值數量,可以被查詢數值覆蓋  -->
    <setting name="defaultFetchSize" value="100"/>
    <!-- 允許在巢狀語句中使用分頁-->
    <setting name="safeRowBoundsEnabled" value="false"/>
    <!--是否開啟自動駝峰命名規則(camel case)對映,即從經典資料庫列名 A_COLUMN 到經典 Java 屬性名 aColumn 的類似對映。-->
    <setting name="mapUnderscoreToCamelCase" value="false"/>
    <!--MyBatis 利用本地快取機制(Local Cache)防止迴圈引用(circular references)和加速重複巢狀查詢。 預設值為 SESSION,這種情況下會快取一個會話中執行的所有查詢。 若設定值為 STATEMENT,本地會話僅用在語句執行上,對相同 SqlSession 的不同調用將不會共享資料。-->
    <setting name="localCacheScope" value="SESSION"/>
    <!-- 當沒有為引數提供特定的 JDBC 型別時,為空值指定 JDBC 型別。 某些驅動需要指定列的 JDBC 型別,多數情況直接用一般型別即可,比如 NULL、VARCHAROTHER。-->
    <setting name="jdbcTypeForNull" value="OTHER"/>
    <!-- 指定哪個物件的方法觸發一次延遲載入。-->
    <setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/> 
        </settings>  

        <!-- 別名定義 -->  
        <typeAliases>  
            <typeAlias alias="pageAccessURL" type="com.lgm.mybatis.model.PageAccessURL" />  
        </typeAliases>  

        <!--自定義型別處理器 -->
        <typeHandlers>
    <!-- <typeHandler handler="com.xhm.util.BooleanTypeHandlder" /> -->
    <!--掃描整個包下的自定義型別處理器-->
    <package name="com.xhm.util"/>
        </typeHandlers>

        <!--plugins外掛之 分頁攔截器  -->
        <plugins>
        <plugin interceptor="com.xhm.util.PageInterceptor"></plugin>
        </plugins>

        <!--配置environment環境-->
        <environments default="development">  
            <!-- 環境配置1,每個SqlSessionFactory對應一個環境 -->  
            <environment id="development1">  
                <!-- 事務配置 type= JDBC、MANAGED 1.JDBC:這個配置直接簡單使用了JDBC的提交和回滾設定。它依賴於從資料來源得到的連線來管理事務範圍。   
                    2.MANAGED:這個配置幾乎沒做什麼。它從來不提交或回滾一個連線。而它會讓容器來管理事務的整個生命週期(比如Spring或JEE應用伺服器的上下文)。 預設情況下它會關閉連線。然而一些容器並不希望這樣,因此如果你需要從連線中停止它,將closeConnection屬性設定為false -->  
                <transactionManager type="JDBC" />  
            <!-- <transactionManager type="MANAGED">   
                 <property name="closeConnection" value="false"/>   
                 </transactionManager> -->  
                <!-- 資料來源型別:type = UNPOOLED、POOLED、JNDI 1.UNPOOLED:這個資料來源的實現是每次被請求時簡單開啟和關閉連線。它有一點慢,這是對簡單應用程式的一個很好的選擇,因為它不需要及時的可用連線。   
                    不同的資料庫對這個的表現也是不一樣的,所以對某些資料庫來說配置資料來源並不重要,這個配置也是閒置的 2.POOLED:這是JDBC連線物件的資料來源連線池的實現,用來避免建立新的連線例項時必要的初始連線和認證時間。   
                    這是一種當前Web應用程式用來快速響應請求很流行的方法。 3.JNDI:這個資料來源的實現是為了使用如Spring或應用伺服器這類的容器,容器可以集中或在外部配置資料來源,然後放置一個JNDI上下文的引用 -->  
                <dataSource type="UNPOOLED">  
                    <property name="driver" value="com.mysql.jdbc.Driver" />  
                    <property name="url" value="jdbc:mysql://localhost:3306/xhm" />  
                    <property name="username" value="root" />  
                    <property name="password" value="root" />  
                    <!-- 預設連線事務隔離級別 <property name="defaultTransactionIsolationLevel" value=""   
                        /> -->  
                </dataSource>  
            </environment>  
      
            <!-- 環境配置2 -->  
            <environment id="development2">  
                <transactionManager type="JDBC" />  
                <dataSource type="POOLED">  
                    <property name="driver" value="com.mysql.jdbc.Driver" />  
                    <property name="url" value="jdbc:mysql://localhost:3306/xhm" />  
                    <property name="username" value="root" />  
                    <property name="password" value="root" />  
                    <!-- 在任意時間存在的活動(也就是正在使用)連線的數量 -->  
                    <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>  
      
            <!-- 環境配置3 -->  
            <environment id="development3">  
                <transactionManager type="JDBC" />  
                <dataSource type="JNDI">  
                    <property name="data_source" value="java:comp/env/jndi/mybatis" />  
                    <property name="env.encoding" value="UTF8" />  
                    <!-- <property name="initial_context" value=""/> <property name="env.encoding"   
                        value="UTF8"/> -->  
                </dataSource>  
            </environment>  
        </environments>  
      
        <!-- 對映檔案,mapper的配置檔案 -->  
        <mappers>
    <!--直接對映到相應的mapper檔案-->
    <mapper resource="com/xhm/mapper/UserMapper.xml"/>
    <!--掃描包路徑下所有xxMapper.xml檔案-->
    <package name="com.xhm.mapper"/>
        </mappers>  
      
    </configuration>