1. 程式人生 > >(1.3)、MyBatis的基本要素——核心物件

(1.3)、MyBatis的基本要素——核心物件

MyBatis三個基本要素:

1. 核心介面和類。

2. MyBatis核心配置檔案(MyBatis-config.xml)。

3. SQL對映檔案(mapper.xml)。

MyBatis核心介面和類:

1. 每個MyBatis的應用程式都以一個SqlSessionFactory物件的例項為核心。

2. 首先獲取SqlSessionFactoryBuilder物件,可以根據XML配置檔案或Configuration類的例項構建該物件。

3. 然後獲取SqlSessionFactory物件,該物件例項可以通過SqlSessionFactoryBuilder物件來獲取。

4. 有了SqlSessionFactory物件之後,就可以進而獲取SqlSession例項,SqlSsession物件中完全包含以資料庫為背景的所有執行SQL操作的方法,可以用該例項來直接執行已對映的SQL語句。

SqlSessionFactoryBuilder的作用:SqlSessionFactoryBuilder負責構建SqlSessionFactory,並且提供了多個build()方法的過載。

SqlSessionFactoryBuilder的生命週期和作用域:SqlSessionFactoryBuilder的最大特點是:用過即丟。一旦建立了SqlSessionFactory物件之後,這個類就不再需要存在了,因此SqlSessionFactoryBuilder的最佳範圍就是存在與方法體內,也就是區域性變數而已。

SqlSessionFactory的作用:SqlSessionFactory簡單的理解就是建立SqlSession例項的工廠。所有的MyBatis應用都是以SqlSessionFactory例項為中心,SqlSessionFactory的例項可以通過SqlSessionFactoryBuilder物件來獲得。有了它之後,顧名思義,就可以通過SqlSessionFactory提供的openSession()方法來獲取SqlSession例項。

SqlSessionFactory的生命週期和作用域:SqlSessionFactory物件一旦建立,就會在整個應用執行過程中始終存在。沒有理由去銷燬或在建立它,並且應用執行中也不建議多次建立SqlSessionFactory。因此SqlSessionFactory的最佳作用域是Application,即隨著應用的生命週期一同存在。那麼這種"存在於整個應用執行期間,並且同時只存在一個物件例項"的模式就是所謂的單例模式(指在執行期間有且僅有一個例項)。

SqlSession的作用:SqlSession適用於持久化操作的物件,類似於JDBC的Connention。它提供了面向資料庫執行SQL命令所需的所有方法,可以通過SqlSession例項直接執行已對映的SQL語句。

SqlSession的生命週期和作用域:SqlSession對應著一次資料庫會話。由於資料庫會話不是永久的,因此SqlSession的生命週期也不應該是永久的。相反,在每次訪問資料庫時都需要建立它(注意:並不是說在SqlSession裡只能執行一次SQL,是完全可以執行多次的,但是若關閉SqlSession,那麼就需要重新建立它)。建立SqlSession的地方只有一個,那就是SqlSessionFactory物件的openSession()方法。

注意:每一個執行緒都有自己的SqlSession例項,SqlSession例項不能被共享,也不是執行緒安全的。因此最佳的作用域範圍是request作用域或者方法體作用域內。

關閉SqlSession是非常重要的。必須確保SqlSession在finally語句塊中正常關閉。

SqlSession的兩種使用方式:

1. 通過SqlSession例項來直接執行已對映的SQL語句。

2. 基於mapper介面方式操作資料。

第一種方式是舊版本的MyBatis提供的操作方式,雖然現在也可以正常工作但是第二種方式是MyBatis官方推薦使用的,其表達方式也更加直白,程式碼更加清晰,型別安全,也不用擔心易錯的字串字面值以及強制型別轉換。