MyBatis基本組件與其生命週期

本文對MyBatis核心組件總結並瞭解其在MyBatis應用中的生命週期。

MyBatis核心組件:

  • SqlSessionFactoryBuilder: 根據配置信息生成SqlSessionFactory.
  • SqlSessionFactory:創建SqlSession。
  • SqlSession: SqlSession類似JDBC的Connection對象,是一個既可以發送SQL執行並返回結果,也可以獲取Mapper的接口。
  • SQL Mapper: 它是MyBatis新設計的組件,由一個java接口和XML文件組成,需要給出對應的SQL和映射規則,負責發送SQL去執行,並返回結果。
Created with Raphaël 2.1.0StartSqlSessionFactoryBuilderSqlSessionFactorySqlSessionSQL MapperendEndend

各組件生命週期:

  1. SqlSessionFactoryBuilder

    SqlSessionFactoryBuilder是利用XML或者java編碼獲得資源來構建SqlSessionFactoryde ,通過它可以構建多個SessionFactory。它的作用就是一個構建器,一旦我們構建了SqlSessionFactory,它的作用就已經完結了,失去了存在的意義。所以它的生命週期只存在於方法的內部

  2. SqlSessionFactory

    SqlSessionFactory的作用是創建SqlSession,而SqlSession就是一個會話,相當於JDBC中的Connection對象。每次應用程序訪問數據庫,我們都需要SqlSessionFactory創建SqlSession,所以SqlSessionFactory應該在MyBatis應用的整個生命週期中。而如果我們多次創建同一個數據庫的SqlSessionFactory,則每次創建SqlSessionFactory會打開更多的數據庫連接資源,那麼連接資源就很快會被耗盡。因此SqlSessionFactory的責任是唯一的,它的責任就是創建SqlSession,所以應該採用單利模式。正確的做法是使得每一個數據庫只對應一個SqlSessionFactory,管理好數據庫資源的分配,避免過多的Connection被消耗。

  3. SqlSession

    SqlSession是一個會話,相當於JDBC的一個Connection對象,它的生命週期應該是在請求數據庫處理事務的過程中。它是一個線程不安全的對象,在涉及多線程的時候我們需要特別小心,操作數據庫需要注意其隔離級別,數據庫鎖等高級特效。此外,每次創建的SqlSession都必須及時關閉它,它的長期存在會使數據庫連接池的活動資源減少,對系統性能的影響太大。它存活於一個應用的請求和操作,可以執行多條SQL,保證事務的一致性。

  4. Mapper

    Mapper是一個接口,而沒有具體的實現類,它的作用是發送SQL,然後返回我們需要的結果,或者執行SQL從而修改數據庫的數據,因此它應該在一個SqlSession事務方法之內,是一個方法級別的東西。

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