Mybatis配置解析

MyBatis配置解析

一、核心配置文件

  • mybatis-config.xmljava

  • MyBatis 的配置文件包含了會深深影響 MyBatis 行爲的設置和屬性信息。數據庫

  • 配置文檔的頂層結構以下:安全

    configuration(配置)
    properties(屬性)
    settings(設置)
    typeAliases(類型別名)
    typeHandlers(類型處理器)
    objectFactory(對象工廠)
    plugins(插件)
    environments(環境配置)
    environment(環境變量)
    transactionManager(事務管理器)
    dataSource(數據源)
    databaseIdProvider(數據庫廠商標識)
    mappers(映射器)

二、環境配置(environments)

學會配置多套運行環境!mybatis

不過要記住:儘管能夠配置多個環境,但每一個 SqlSessionFactory 實例只能選擇一種環境。併發

  • 每一個數據庫對應一個 SqlSessionFactory 實例

Mybatis默認的事務管理器:JDBC,鏈接池:POOLEDapp

三、屬性(properties)

能夠經過properties屬性實現對配置文件的引用ide

這些屬性能夠在外部進行配置,並能夠進行動態替換。你既能夠在典型的 Java 屬性文件中配置這些屬性,也能夠在 properties 元素的子元素中設置。【xx.properties】ui

在覈心配置文件中引入properties中的值url

注意:xml文件中標籤的順序是固定的!!插件

<!--引入外部配置文件-->	
<properties resource="org/mybatis/example/config.properties">
  <property name="username" value="dev_user"/>
  <property name="password" value="F2Fa3!33TYyg"/>
</properties>

<dataSource type="POOLED">
  <property name="driver" value="${driver}"/>
  <property name="url" value="${url}"/>
  <property name="username" value="${username}"/>
  <property name="password" value="${password}"/>
</dataSource>

注意點:

  • 能夠直接引入外部文件
  • 能夠在其中增長一些屬性配置
  • 若是屬性名相同時,優先使用從外部引入的配置文件中的屬性

四、類型別名(typeAliases)

  • 類型別名可爲 Java 類型設置一個縮寫名字。

  • 它僅用於 XML 配置,意在下降冗餘的全限定類名書寫。

    <!--給實體類起別名-->
    <typeAliases>
      <typeAlias alias="User" type="com.spong.pojo.User"/>
    </typeAliases>

    當這樣配置時,User 能夠用在任何使用 com.spong.pojo.User 的地方

  • 也能夠指定一個包名,MyBatis 會在包名下面搜索須要的 Java Bean

    <typeAliases>
      <package name="com.spong.pojo"/>
    </typeAliases>

    在沒有註解的狀況下,會使用 Bean 的首字母小寫的非限定類名來做爲它的別名,如有註解,則別名爲其註解值。

    @Alias("myuser")
    public class User {
        ...
    }

在實體類比較少的時候,使用第一種方式;

實體類較多時,使用第二種;

五、映射器(mappers)

<!-- 使用相對於類路徑的資源引用 -->
<mappers>
  <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
</mappers>
<!-- 使用映射器接口實現類的徹底限定類名 -->
<mappers>
  <mapper class="org.mybatis.builder.AuthorMapper"/>
</mappers>
<!-- 將包內的映射器接口實現所有註冊爲映射器 -->
<mappers>
  <package name="org.mybatis.builder"/>
</mappers>

使用class文件綁定和掃描包進行綁定的注意點:

  • 接口和它的Mapper配置文件必須同名!
  • 接口和它的Mapper配置文件必須在同一包下!

六、做用域(Scope)和生命週期

不一樣做用域和生命週期類別是相當重要的,由於錯誤的使用會致使很是嚴重的【併發問題】。

SqlSessionFactoryBuilder

  • 一旦建立了 SqlSessionFactory,就再也不須要它了。
  • 最佳做用域是方法做用域(也就是局部方法變量)。

SqlSessionFactory:

  • 能夠想象爲:數據庫鏈接池

  • 一旦被建立就應該在應用的運行期間一直存在,沒有任何理由丟棄它或從新建立另外一個實例

  • 最佳做用域是應用做用域

  • 使用單例模式或者靜態單例模式。

SqlSession:

  • 連接到數據庫鏈接池的一個請求
  • SqlSession 的實例不是線程安全的,所以是不能被共享的,因此它的最佳的做用域是請求或方法做用域。
  • 用完以後即關閉,不然佔用資源。

相關文章
相關標籤/搜索