什麼是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配置相關,其使用的意義在於減少全限定類名的冗餘。
- 使用元素配置別名的方法如下:
<typeAliases>
<typeAlias alias="user" type="com.itheima.po.User"/>
</typeAliases>
- 當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>
元素中包含了一些子元素,它的元素結構如下所示: