MyBatis的核心組件分爲4個部分。sql
SqlSessionFactoryBuilder 的做用在於建立 SqlSessionFactory,建立成功後,SqlSessionFactoryBuilder 就失去了做用,因此 SqlSessionFactoryBuilder 不須要長期存在,只做用於建立 SqlSessionFactory 的方法中便可。數據庫
SqlSessionFactory 能夠被認爲是一個數據庫鏈接池,它的做用是建立 SqlSession 接口對象。SqlSessionFactory 的生命週期存在於整個 MyBatis 的應用之中,一旦建立了 SqlSessionFactory,就要長期保存它,直至再也不使用 MyBatis 應用。MyBatis 的本質就是 Java 對數據庫的操做。
通常的應用中咱們每每但願 SqlSessionFactory 做爲一個單例,讓它在應用中被共享。由於 SqlSessionFactory 是一個對數據庫的鏈接池,它佔據着數據庫的鏈接資源,若是建立多個 SqlSessionFactory,那麼就存在多個數據庫鏈接池,會致使數據庫鏈接資源被消耗光。編程
SqlSession 就至關於一個數據庫鏈接 (Connection 對象),你能夠在一個事務裏面執行多條 SQL,而後經過它的 commit、 rollback 等方法,提交或者回滾事務。因此它應該存活在一個業務請求中,處理完整個請求後,應該關閉這條鏈接,讓它歸還給 SqlSessionFactory,不然數據庫資源就很快被耗費精光,系統就會癱瘓,因此用 try...catch...finally...語句來保證其正確關閉。session
Mapper 是一個接口,它由 SqlSession 所建立,因此它的最大生命週期至多和 SqlSession 保持一致,可是因爲 SqlSession 的關閉,它的數據庫鏈接資源也會消失,因此它的生命週期應該小於等於 SqlSession 的生命週期。 Mapper 表明的是一個請求中的業務處理 ,因此它應該在一個請求中,一旦處理完了相關的業務,就應該廢棄它。mybatis