1. 程式人生 > >mybatis——config全域性配置檔案解析

mybatis——config全域性配置檔案解析

原文:https://www.cnblogs.com/pjfmeng/p/7677773.html

在全集配置檔案中引入dtd約束“http://mybatis.org/dtd/mybatis-3-config.dtd”,主要有以下幾個標籤,現在詳細解釋下這幾個標籤的使用

1、properties屬性----引入外部properties配置檔案

<?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>
    <!-- 1、mybatis使用properties來引入外部properties配置檔案的內容 
    resource 引入類路徑下資源 
    url 引入網路路徑或磁碟路徑下資源 -->
    <properties resource="db.properties"></properties>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <!-- 配置資料庫連線資訊 -->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.name}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/pjf/mybatis/mapper/hotelMapper.xml"></mapper>
    </mappers>
</configuration>

 

db.properties檔案

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/spring_mybatis
jdbc.name=root
jdbc.password=tuniu520

相當有之前寫的,這裡的jdbc連線資訊寫在datasource中的property屬性下,沒有引入外部配置檔案

<?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>
    <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/spring_mybatis" />
                <property name="username" value="root" />
                <property name="password" value="tuniu520" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
    <mapper resource="com/pjf/mybatis/mapper/hotelMapper.xml"></mapper>
    </mappers>
</configuration>

2、settings 執行時行為設定

可檢視mybatis文件,settings有很多配置項,如

這裡試驗下mapUnderscoreToCamelCase,可以自動完成hotelName到資料庫中欄位hotel_name的轉換

 

<?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>
    <!-- 1、mybatis使用properties來引入外部properties配置檔案的內容
             resource 引入類路徑下資源
             url 引入網路路徑或磁碟路徑下資源 -->
    <properties resource="db.properties"></properties>
    <!-- 2、settings包含很多重要的設定項
            setting標識具體的設定項
                 name表示設定項的名字
                 value表示設定項的值 
     -->
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true" />
    </settings>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <!-- 配置資料庫連線資訊 -->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.name}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/pjf/mybatis/mapper/hotelMapper.xml"></mapper>
    </mappers>
</configuration>

之前寫的sql語句可以直接修改成

<select id="getHotel" resultType="com.pjf.mybatis.po.Hotel">
        select id,hotel_name as hotelName, hotel_address as hotelAddress, price from hotel
        where id=#{id}
    </select>

修改為

<select id="getHotel" resultType="com.pjf.mybatis.po.Hotel">
        select * from hotel where id=#{id}
    </select>

mybatis會自動完成駝峰轉換

3、typeAliases別名配置

     檢視程式碼中3的註解

<?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>
    
    <!-- 1、mybatis使用properties來引入外部properties配置檔案的內容
               resource 引入類路徑下資源 
               url 引入網路路徑或磁碟路徑下資源 -->
    <properties resource="db.properties"></properties>
    
    <!-- 2、settings包含很多重要的設定項
             setting標識具體的設定項 
                 name表示設定項的名字 
                 value表示設定項的值 -->
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true" />
    </settings>
    
    <!-- 3、typeAliases 為java型別起別名,別名不區分大小寫 
              typeAlias 為某個具體的java型別取別名 
                   type java類的全類名,預設別名就是類名小寫 
                   alias 自定義別名 --> 
    <typeAliases>
        <typeAlias type="com.pjf.mybatis.po.Hotel" alias="hotel" />
        <!-- package為某個包下面所有類批量起別名 
           name 表示包的名稱 預設別名為類名小寫  
           這裡重複配置了Hotel類,複製的時候注掉一種配置-->
        <package name="com.pjf.mybatis.po" />
    </typeAliases>
    
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <!-- 配置資料庫連線資訊 -->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.name}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="com/pjf/mybatis/mapper/hotelMapper.xml"></mapper>
    </mappers>
</configuration>

已經為許多常見的 Java 型別內建了相應的類型別名。它們都是大小寫不敏感的,需要注意的是由基本型別名稱重複導致的特殊處理,8種基本資料型別類型別名是下劃線加資料型別。

4、typeHandlers 型別處理器

將java中的型別和資料庫中的型別進行對映

<!-- typeHandlers 型別處理器
  mybatis3.4之後,這些型別處理器都是自動註冊的
-->
    <typeHandlers>
    <typeHandler handler="BooleanTypeHandler"/>
    </typeHandlers>

可以填寫以下處理器

5、environments環境配置

<?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>
    
    <!-- 1、mybatis使用properties來引入外部properties配置檔案的內容
               resource 引入類路徑下資源 
               url 引入網路路徑或磁碟路徑下資源 -->
    <properties resource="db.properties"></properties>
    
    <!-- 2、settings包含很多重要的設定項
             setting標識具體的設定項 
                 name表示設定項的名字 
                 value表示設定項的值 -->
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true" />
    </settings>
    
    <!-- 3、typeAliases 為java型別起別名,別名不區分大小寫 
              typeAlias 為某個具體的java型別取別名 
                   type java類的全類名,預設別名就是類名小寫 
                   alias 自定義別名 --> 
    <typeAliases>
        <typeAlias type="com.pjf.mybatis.po.Hotel" alias="hotel" />
        <!-- package為某個包下面所有類批量起別名 
           name 表示包的名稱 預設別名為類名小寫
        <package name="com.pjf.mybatis.po" />
        -->
    </typeAliases>
    
    <!-- 4、typeHandlers 型別處理器-->
    <typeHandlers>
    <typeHandler handler=""/>
    </typeHandlers>
    
    <!-- 5、environments環境配置,可以配置多種環境  default指定使用某種環境,可以達到快速切換
               environment配置一個具體的環境資訊,必須有如下兩個標籤,id表示當前環境的唯一標識
                   transactionManager 事物管理器
                        type 事物管理器的型別   有兩種取值 
                              JDBC
                              managed
                   dataSource 資料來源   
                        type    有三種[UNPOOLED|POOLED|JNDI]
                -->
    <environments default="development">
        <environment id="test">
        <transactionManager type="JDBC" />
            <!-- 配置資料庫連線資訊 -->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.name}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>
        
        <environment id="development">
            <transactionManager type="JDBC" />
            <!-- 配置資料庫連線資訊 -->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.name}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>
    </environments>
    
    <mappers>
        <mapper resource="com/pjf/mybatis/mapper/hotelMapper.xml"></mapper>
    </mappers>
</configuration>

6、mappers  sql對映檔案註冊

 

<?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>
    
    <!-- 1、mybatis使用properties來引入外部properties配置檔案的內容
               resource 引入類路徑下資源 
               url 引入網路路徑或磁碟路徑下資源 -->
    <properties resource="db.properties"></properties>
    
    <!-- 2、settings包含很多重要的設定項
             setting標識具體的設定項 
                 name表示設定項的名字 
                 value表示設定項的值 -->
    <settings>
        <setting name="mapUnderscoreToCamelCase" value="true" />
    </settings>
    
    <!-- 3、typeAliases 為java型別起別名,別名不區分大小寫 
              typeAlias 為某個具體的java型別取別名 
                   type java類的全類名,預設別名就是類名小寫 
                   alias 自定義別名 --> 
    <typeAliases>
        <typeAlias type="com.pjf.mybatis.po.Hotel" alias="hotel" />
        <!-- package為某個包下面所有類批量起別名 
           name 表示包的名稱 預設別名為類名小寫
        <package name="com.pjf.mybatis.po" />
        -->
    </typeAliases>
    
    <!-- 4、typeHandlers 型別處理器-->
    <typeHandlers>
    <typeHandler handler=""/>
    </typeHandlers>
    
    <!-- 5、environments環境配置,可以配置多種環境  default指定使用某種環境,可以達到快速切換
               environment配置一個具體的環境資訊,必須有如下兩個標籤,id表示當前環境的唯一標識
                   transactionManager 事物管理器
                        type 事物管理器的型別   有兩種取值 
                              JDBC
                              managed
                   dataSource 資料來源   
                        type    有三種[UNPOOLED|POOLED|JNDI]
                -->
    <environments default="development">
        <environment id="test">
        <transactionManager type="JDBC" />
            <!-- 配置資料庫連線資訊 -->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.name}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>
        
        <environment id="development">
            <transactionManager type="JDBC" />
            <!-- 配置資料庫連線資訊 -->
            <dataSource type="POOLED">
                <property name="driver" value="${jdbc.driver}" />
                <property name="url" value="${jdbc.url}" />
                <property name="username" value="${jdbc.name}" />
                <property name="password" value="${jdbc.password}" />
            </dataSource>
        </environment>
    </environments>
        
    <!--6、 mappers將sql對映註冊到全域性配置檔案中
              mapper註冊一個sql對映
                 1、註冊配置檔案
                      resource引用類路徑下檔案
                      url  引用網路上或磁碟路徑下檔案
                 2、註冊mapper介面
                     class  有對映檔案,介面和對映檔案必須同名,而且放在同一個路徑裡
                            如果沒有對映檔案,sql語句使用註解的方式,就需要註冊介面了
                 3、package批量註冊  
                      使用批量註冊,  介面和對映檔案必須同名,而且放在同一個路徑裡                                                      
     -->
    <mappers>
        <mapper resource="com/pjf/mybatis/mapper/hotelMapper.xml"></mapper>
        <mapper class=""/>
        <package name="com.pjf.mybatis.po"/>
    </mappers>
</configuration>

7、databaseIdProvider多資料庫支援

MyBatis 可以根據不同的資料庫廠商執行不同的語句,這種多廠商的支援是基於對映語句中的 databaseId 屬性。 MyBatis 會載入不帶 databaseId 屬性和帶有匹配當前資料庫 databaseId 屬性的所有語句。 如果同時找到帶有 databaseId 和不帶 databaseId 的相同語句,則後者會被捨棄。 

<databaseIdProvider type="DB_VENDOR"></databaseIdProvider>

8、plugins 外掛

MyBatis 允許你在已對映語句執行過程中的某一點進行攔截呼叫。

<plugins>
    <plugin interceptor=""></plugin>
</plugins>

 

注:這些標籤編寫是有先後順序的,可以吧滑鼠放在configuration上,就可以看到順序了

(properties?, settings?, typeAliases?, typeHandlers?, objectFactory?, objectWrapperFactory?, reflectorFactory?, plugins?, environments?, databaseIdProvider?, mappers?)