mybatis_4配置解析

四、配置解析

一、核心配置文件

  • mybatis-config.xmlhtml

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

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

二、環境配置(environments)

MyBatis 能夠配置成適應多種環境mysql

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

學會使用配置多套運行環境!數據庫

Mybatis默認的事務管理器就是 JDBC , 鏈接池 : POOLED安全

事務管理器(transactionManager)服務器

在 MyBatis 中有兩種類型的事務管理器(也就是 type="[JDBC|MANAGED]"):mybatis

JDBC – 這個配置直接使用了 JDBC 的提交和回滾設施,它依賴從數據源得到的鏈接來管理事務做用域。
MANAGED – 這個配置幾乎沒作什麼。它從不提交或回滾一個鏈接,而是讓容器來管理事務的整個生命週期(好比 JEE 應用服務器的上下文)。 默認狀況下它會關閉鏈接。
有三種內建的數據源類型(也就是 type="[UNPOOLED|POOLED|JNDI]")併發

UNPOOLED– 這個數據源的實現會每次請求時打開和關閉鏈接。app

POOLED– 這種數據源的實現利用「池」的概念將 JDBC 鏈接對象組織起來,避免了建立新的鏈接實例時所必需的初始化和認證時間。 這種處理方式很流行,能使併發 Web 應用快速響應請求

JNDI – 這個數據源實現是爲了能在如 EJB 或應用服務器這類容器中使用,容器能夠集中或在外部配置數據源,而後放置一個 JNDI 上下文的數據源引用

三、屬性(properties)

咱們能夠經過properties屬性來實現引用配置文件

這些屬性都是可外部配置且可動態替換的,既能夠在典型的 Java 屬性文件中配置,亦可經過 properties 元素的子元素來傳遞。【db.properties】

編寫一個配置文件

db.properties

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=UTF-8
username=root
password=tashuo955

在覈心配置文件中引入

<!--引入外部配置文件-->
    <properties resource="db.properties">
        <property name="username" value="root"/>
        <property name="pwd" value="11111"/>
    </properties>
  • 能夠直接引入外部文件
  • 能夠在其中增長一些屬性配置
  • 若是兩個文件有同一個字段,數據的引用優先使用外部properties文件的信息==先讀取property內部的而後外部資源會覆蓋已有屬性

四、類型別名(typeAliases)

  • 類型別名是爲 Java 類型設置一個短的名字。
  • 存在的意義僅在於用來減小類徹底限定名的冗餘。
<!--能夠給實體類起別名-->
    <typeAliases>
        <typeAlias type="com.loading.pojo.User" alias="User"/>
    </typeAliases>

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

掃描實體類的包,它的默認別名就爲這個類的 類名,首字母小寫!

<!--能夠給實體類起別名-->
<typeAliases>
    <package name="com.loading.pojo"/>
</typeAliases>

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

若是實體類十分多,建議使用第二種。

第一種能夠DIY別名,第二種則·不行·,若是非要改,須要在實體上增長註解

@Alias("user")
public class User {}

五、設置

這是 MyBatis 中極爲重要的調整設置,它們會改變 MyBatis 的運行時行爲。

六、其餘配置

七、映射器(mappers)

MapperRegistry:註冊綁定咱們的Mapper文件;

方式一: 【推薦使用】

<!--每個Mapper.XML都須要在Mybatis核心配置文件中註冊!-->
<mappers>
    <mapper resource="com/loading/dao/UserMapper.xml"/>
</mappers>

方式二:使用class文件綁定註冊

<!--每個Mapper.XML都須要在Mybatis核心配置文件中註冊!-->
<mappers>
    <mapper class="com.loading.dao.UserMapper"/>
</mappers>

注意點:

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

方式三:使用掃描包進行注入綁定

<!--每個Mapper.XML都須要在Mybatis核心配置文件中註冊!-->
<mappers>
    <package name="com.loading.dao"/>
</mappers>

注意點:

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

八、生命週期和做用域

生命週期,和做用域,是相當重要的,由於錯誤的使用會致使很是嚴重的併發問題

SqlSessionFactoryBuilder:

  • 一旦建立了 SqlSessionFactory,就再也不須要它了
  • 局部變量

SqlSessionFactory:

  • 說白了就是能夠想象爲 :數據庫鏈接池
  • SqlSessionFactory 一旦被建立就應該在應用的運行期間一直存在,沒有任何理由丟棄它或從新建立另外一個實例。
  • 所以 SqlSessionFactory 的最佳做用域是應用做用域。
  • 最簡單的就是使用單例模式或者靜態單例模式。

SqlSession

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

這裏面的每個Mapper,就表明一個具體的業務!

相關文章
相關標籤/搜索