1、Mybatis配置詳解

Mybatis配置詳解

XML配置文件層次結構

下圖展現了mybatis-config.xml的所有配置元素java

png

properties元素

properties是一個配置屬性的元素,讓咱們能在配置文件的上下文中使用它,MyBatis提供3種配置方式。mysql

  • property子元素。sql

    <property name="driver" value="com.mysql.jdbc.Driver"/>
  • properties配置文件。數據庫

    通常狀況下,咱們會使用一個單獨的properties配置文件來配置屬性值,以方便咱們在多個配置文件中重複使用它們,也方便往後維護和隨時修改。咱們能夠經過${key}的形式,取出在配置文件中配置的值。apache

    <configuration>
        <!-- 引入配置文件 -->
        <properties resource="datasource.properties"/>
    
        <environments default="dev">
            <environment id="dev">
                <transactionManager type="JDBC"/>
                <dataSource type="POOLED">
                    <!-- 使用配置文件中的屬性 -->
                    <property name="driver" value="${driver}"/>
                    <property name="url" value="${url}"/>
                    <property name="username" value="${username}"/>
                </dataSource>
            </environment>
        </environments>
    </configuration>
  • SqlSessionFactoryBuilder使用Properties文件構建。數組

    出於安全考慮,properties配置文件中的帳號密碼等元素多是加密的,這個時候就須要對加密的元素進行處理。緩存

    public static void func() throws Exception {
        Properties properties = new Properties();
        properties.load(Resources.getResourceAsStream("datasource.properties"));
        // 對原帳號密碼解密
        properties.setProperty("username", decode(properties.getProperty("username")));
        properties.setProperty("password", decode(properties.getProperty("password")));
    
        InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
        // SqlSessionFactoryBuilder可使用一個InputStream和一個Properties構建SqlSessionFactory
        SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is, properties);
    }

settings設置

settings(設置)在MyBatis中是最複雜的配置,它會改變 MyBatis運行時的行爲。安全

設置參數 描述 有效值 默認值
cacheEnabled 該配置影響全部映射器中配置的緩存全局開關 true、 false true
lazyLoadingEnabled 延遲加載的全局開關,當它開啓時,全部關聯對象都會延遲加載。特定關聯關係中可經過設置fetchType屬性來覆蓋該項的開關狀態 true、false false
aggressiveLazyLoading 當啓用時,對任意延遲屬性的調用會使帶有延遲加載屬性的對象完整加載;反之,每種屬性將會按需加載 true、 false true
multipleresultSetsEnabled 是否容許單一語句返回多結果集(須要兼容驅動) true、 false true
useColumnLabel 使用列標籤代替列名。不一樣的驅動在這方面會有不一樣的表現,具體可參考相關驅動文檔或經過測試這兩種不一樣的模式來觀察所用驅動的結果 true、 false true
useGeneratedKeys 容許JDBC支持自動生成主鍵,須要驅動兼容。若是設置爲true,則這個設置強制使用自動生成主鍵 true、fase false
autoMappingBehavior 指定 MyBatis應如何自動映射列到字段或屬性:NONE表示取消自動映射、PARTIAL只會自動映射沒有定義嵌套結果集映射的結果集、FULL會自動映射任意複雜的結果集 NONE、 PARTIAL、FULL PARTIAL
defaultExecutorType 配置默認的執行器:SIMPLE是普通的執行器、REUSE執行器會重用預處理語句(prepared statements)、BATCH執行器將重用語句並執行批量更新 SIMPLE、 REUSE、SIMPLE SIMPLE
defaultStatementTimeout 設置超時時間,它決定驅動等待數據庫響應的秒數。當沒有設置的時候它取的就是驅動默認的時間 any positive integer Not set(null)

typeAliases別名

別名(typeAliases)是一個指代的名稱。由於咱們遇到的類全限定名過長,因此咱們但願用一個簡短的名稱去指代它,而這個名稱能夠在MyBatis上下文中使用,在 MyBatis中別名是不分大小寫的。一個 typeAliases的實例是在解析配置文件時生成的,而後長期保存在 Configuration對象中,這樣就沒有必要運行的時候再次生成它的實例了。mybatis

  • 系統定義的別名app

    經過org.apache.ibatis.type.TypeAliasRegistry能夠查看全部系統定義的別名,主要是基本數據類型、字符串、基本數據類型數組、日期、容器類。

  • 經過XML自定義別名

    在mybatis-config.xml中經過<typeAliases>元素能夠自定義別名。

    <typeAliases>
        <typeAlias type="com.zl.domain.UserDomain" alias="user"/>
    </typeAliases>
  • 經過註解的方式自定義別名

    在mybatis-config.xml中添加package掃描包

    <typeAliases>
        <package name="com.zl.domain"/>
    </typeAliases>
    @Alias("user")
    public class UserDomain {
    }

    當配合上面的配置,MyBatis就會自動掃描包,將掃描到的類裝載到上下文中。若是配置了包掃描的路徑,而沒有註解@Alias的類也會被MyBatis裝載,MyBatis會自動把類名的第一個字母變爲小寫,做爲MyBatis的別名。

typeHandler類型轉換器

typeHandler爲類型處理器。MyBatis在預處理語句(PreparedStatement)中設置一個參數或者從結果集(ResultSet)中取出一個值時,都會用註冊了的typeHandler進行處理。typeHandler經常使用的配置爲Java類型(javaType)、JDBC類型(jdbcType)。typeHandler的做用就是將參數從javaType轉化爲 jdbcType,或者從數據庫取出結果時把jdbcType轉化爲javaType。

具體詳見:Mybatis類型轉換介紹 TypeHandler

objectFactory對象工廠

當MyBatis在構建一個結果返回的時候,都會使用ObjectFactory(對象工廠)去構建POJO,咱們能夠定製本身的對象工廠。MyBatis中默認的ObjectFactory是由DefaultObjectFactory來提供服務的。

environments環境變量

<environments default="dev">
    <environment id="dev">
        <transactionManager type="JDBC"/>
        <dataSource type="POOLED">
            <property name="driver" value="${driver}"/>
            <property name="url" value="${url}"/>
            <property name="username" value="${username}"/>
        </dataSource>
    </environment>
</environments>
  • default:表示默認使用哪一個數據源
  • id:表示數據源的名稱
  • transactionManager的事務類型type一共有三種:JDBC,採用JDBC方式管理事務,獨立編碼中咱們經常使用;MANAGED,採用容器方式管理事務,在JNDI數據源中經常使用;自定義,由使用者自定義數據庫事務管理辦法,適用於特殊應用。
  • property元素配置數據源的各種屬性
  • dataSource的type屬性是提供咱們對數據厙鏈接方式的配置:UNPOOLED(非鏈接池數據庫)、POOLED(鏈接池數據庫)、JNDI(JNDI數據源)、自定義數據源。
相關文章
相關標籤/搜索