如何完美回答面試官問的MyBatis的核心配置

什麼是SqlSessionFactory?

SqlSessionFactory是MyBatis框架中十分重要的對象,它是單個數據庫映射關係經過編譯後的內存鏡像,其主要作用是創建SqlSession

SqlSessionFactory對象的實例可以通過SqlSessionFactoryBuilder對象來構建,而SqlSessionFactoryBuilder則可以通過XML配置文件或一個預先定義好的Configuration實例構建出SqlSessionFactory的實例。

構建SqlSessionFactory

通過XML配置文件構建出的SqlSessionFactory實例現代碼如下:

InputStream inputStream = Resources.getResourceAsStream("配置文件位置");
SqlSessionFactory sqlSessionFactory = 
                              new SqlSessionFactoryBuilder().build(inputStream);

SqlSessionFactory對象是線程安全的,它一旦被創建,在整個應用執行期間都會存在。如果我們多次的創建同一個數據庫的SqlSessionFactory,那麼此數據庫的資源將很容易被耗盡。爲此,通常每一個數據庫都會只對應一個SqlSessionFactory,所以在構建SqlSessionFactory實例時,建議使用單列模式

什麼是SqlSession?

SqlSession是MyBatis框架中另一個重要的對象,它是應用程序與持久層之間執行交互操作的一個單線程對象,其主要作用是執行持久化操作。
使用完SqlSession對象後要及時關閉,通常可以將其放在finally塊中關閉。

SqlSession sqlSession = sqlSessionFactory.openSession();
try {
       // 此處執行持久化操作
} finally {
      sqlSession.close();
}

配置文件的主要元素

在MyBatis框架的核心配置文件中,<configuration>元素是配置文件的根元素,其他元素都要在<configuration>元素內配置。
在這裏插入圖片描述

<properties>元素

<properties>是一個配置屬性的元素,該元素通常用來將內部的配置外在化,即通過外部的配置來動態的替換內部定義的屬性。例如,數據庫的連接等屬性,就可以通過典型的Java屬性文件中的配置來替換。

<settings>元素

<settings>元素主要用於改變MyBatis運行時的行爲,例如開啓二級緩存、開啓延遲加載等。

<typeAliases>元素

<typeAliases>元素用於爲配置文件中的Java類型設置一個簡短的名字,即設置別名。別名的設置與XML配置相關,其使用的意義在於減少全限定類名的冗餘。

  1. 使用元素配置別名的方法如下:
<typeAliases>
        <typeAlias alias="user" type="com.itheima.po.User"/>
</typeAliases>
  1. 當POJO類過多時,可以通過自動掃描包的形式自定義別名,具體如下:
<typeAliases>
        <package name="com.itheima.po"/>
</typeAliases>

<typeHandler>元素

<typeHandler>元素的作用就是將預處理語句中傳入的參數從javaType(Java類型)轉換爲jdbcType(JDBC類型),或者從數據庫取出結果時將jdbcType轉換爲javaType。

<objectFactory>元素

MyBatis中默認的ObjectFactory的作用是實例化目標類,它既可以通過默認構造方法實例化,也可以在參數映射存在的時候通過參數構造方法來實例化。通常使用默認的ObjectFactory即可。大部分場景下都不用配置和修改默認的ObjectFactory.

<plugins>元素

MyBatis允許在已映射語句執行過程中的某一點進行攔截調用,這種攔截調用是通過插件來實現的。<plugins>元素的作用就是配置用戶所開發的插件。

<environments>元素

<environments>元素用於對環境進行配置。MyBatis的環境配置實際上就是數據源的配置,我們可以通過<environments>元素配置多種數據源,即配置多種數據庫。

事務管理器的配置:
在MyBatis中,可以配置兩種類型的事務管理器,分別是JDBC和MANAGED。
數據源的配置:
1.UNPOOLED
2.POOLED
3.JNDI

<mappers>元素

<mappers>元素用於指定MyBatis映射文件的位置,一般可以使用以下4種方法引入映射器文件,具體如下。
1.使用類路徑引入
2.使用本地文件路徑引入
3.使用接口類引入
4.使用包名引入

映射文件的主要元素

在映射文件中,<mapper>元素是映射文件的根元素,其他元素都是它的子元素。
在這裏插入圖片描述

<select>元素

<select>元素用來映射查詢語句,它可以幫助我們從數據庫中讀取出數據,並組裝數據給業務開發人員。

元素的常用屬性

在這裏插入圖片描述

<insert>元素

<insert>元素用於映射插入語句,在執行完元素中定義的SQL語句後,會返回一個表示插入記錄數的整數
<insert>元素的屬性:<insert>元素的屬性與<select>元素的屬性大部分相同,但還包含了3個特有屬性,這3個屬性的描述如下所示。
在這裏插入圖片描述

<update><delete>元素

<update>和<delete>元素的使用比較簡單,它們的屬性配置也基本相同。

<sql>元素

<sql>元素的作用就是定義可重用的SQL代碼片段,然後在其他語句中引用這一代碼片段。
使用 <include> 元素的 refid 屬性引用自定義的代碼片段, refid 的屬性值爲自定義代碼片段的 id。

<resultMap>元素

<resultMap>元素表示結果映射集,是MyBatis中最重要也是最強大的元素。它的主要作用是定義映射規則、級聯的更新以及定義類型轉化器等。
當數據表中的列和需要返回的對象的屬性不完全一致, MyBatis是不會自動賦值的。此時,就可以使用<resultMap>元素進行處理。
<resultMap> 元素中包含了一些子元素,它的元素結構如下所示:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章