Mybatis框架學習(一)——核心元件
阿新 • • 發佈:2018-12-15
Mybatis的核心元件
Mybatis的核心元件分為4個部分:
SqlSessionFactoryBuilder(構造器): 它會根據配置或者程式碼來生成SqlSessionFactory,採用的是分步構建的Builder模式。
SqlSessionFactory(工廠介面): 依靠它來生成SqlSession,使用的是工廠模式。
SqlSession(會話): 一個既可以傳送sql執行結果,也可以獲取Mapper的介面。在現有的技術中,一般我們會讓其在業務程式碼邏輯程式碼中“消失”,而使用的是Mybatis提供的Sql Mapper 介面程式設計技術,它能提高程式碼的可讀性和可維護性。
Sql Mapper(對映器):
注意 無論是對映器還是SqlSession都可以傳送Sql到資料庫中執行。
Mybatis元件的生命週期
生命週期是元件的重要問題,尤其是在多執行緒的環境中,比如網際網路應用、socket請求等,而Mybatis也常用於多執行緒的環境中,錯誤使用會造成嚴重的多執行緒併發問題。所謂生命週期就是每一個物件應該存活的時間,比如一些物件一次用完後就要關閉,使它們被JAVA虛擬機器銷燬,以避免繼續佔用資源,所以我們會根據每一個元件的作用去確定其生命週期。
- SqlSessionFactoryBuilder
SqlSessionFactoryBuilder的作用在於建立SqlSessionFactory,建立成功後,SqlSessionFactoryBuilder就失去了作用,所以它只能存在於建立SqlSessionFactory的方法中,而不能讓其長期存在。 - SqlSessionFactory
SqlSessionFactory可以被認為是一個數據庫連線池,它的作用是建立SqlSession介面物件。因為Mybatis的本質就是Java對資料庫的操作,所以SqlSessionFactory的生命週期存在於整個Mybatis的應用中,所以一旦建立SqlSessionFactory
由於SqlSessionFactory是一個對資料庫的連線池,所以它佔據著資料庫的連線資源。如果建立多個SqlSessionFactory,那麼就存在多個數據庫連線池,這樣不利於對資料庫資源的控制,也會導致資料庫連線資源被消耗光,出現系統宕機的情況,所以儘量避免發生這樣的情況。因此在一般的應用中往往將SqlSessionFactory作為一個單例,讓它在應用中被共享。 - SqlSession
SqlSession相當於一個數據庫連線物件(Connection物件),你可以在一個事務裡面執行多條Sql,然後通過它的Commit,Rollback等方法,提交或者回滾事務。所以它應該存活在一個業務請求中,處理完整個請求後,應該關閉這條連線,將它歸還給SqlSessionFactory,否則資料庫資源會很快被消耗完,系統就會癱瘓,所以用 try…catch…finally… 語句來保證其正確關閉。 - Mapper
Mapper是一個介面,它由SqlSession所建立,所以它的最大生命週期最多和SqlSession保持一致,由於SqlSession的關閉,它的資料庫連線資源也會消失。所以它的生命週期是應該 <= SqlSession 的生命週期。Mapper 代表的是一個請求中的業務處理,所以它應該在一個請求中,一旦完成了相關的業務,就應該廢棄它。