MyBatis 3 Java API-SqlSessionFactory

2022-04-11 14:08 更新

SqlSessionFactory

??SqlSessionFactory ??有六個方法創(chuàng)建 ??SqlSession ??實例。通常來說,當你選擇其中一個方法時,你需要考慮以下幾點:

  • 事務處理:你希望在 ??session ??作用域中使用事務作用域,還是使用自動提交(??auto-commit??)?(對很多數(shù)據(jù)庫和/或 ?JDBC ?驅(qū)動來說,等同于關閉事務支持)
  • 數(shù)據(jù)庫連接:你希望 MyBatis 幫你從已配置的數(shù)據(jù)源獲取連接,還是使用自己提供的連接?
  • 語句執(zhí)行:你希望 MyBatis 復用 ??PreparedStatement ??和/或批量更新語句(包括插入語句和刪除語句)嗎?

基于以上需求,有下列已重載的多個 ??openSession()?? 方法供使用。

SqlSession openSession()
SqlSession openSession(boolean autoCommit)
SqlSession openSession(Connection connection)
SqlSession openSession(TransactionIsolationLevel level)
SqlSession openSession(ExecutorType execType, TransactionIsolationLevel level)
SqlSession openSession(ExecutorType execType)
SqlSession openSession(ExecutorType execType, boolean autoCommit)
SqlSession openSession(ExecutorType execType, Connection connection)
Configuration getConfiguration();

默認的 ??openSession()?? 方法沒有參數(shù),它會創(chuàng)建具備如下特性的 ??SqlSession??:

  • 事務作用域?qū)_啟(也就是不自動提交)。
  • 將由當前環(huán)境配置的 ??DataSource ??實例中獲取 ??Connection ??對象。
  • 事務隔離級別將會使用驅(qū)動或數(shù)據(jù)源的默認設置。
  • 預處理語句不會被復用,也不會批量處理更新。

相信你已經(jīng)能從方法簽名中知道這些方法的區(qū)別。向 ??autoCommit ??可選參數(shù)傳遞 ??true ??值即可開啟自動提交功能。若要使用自己的 ??Connection ??實例,傳遞一個 ??Connection ??實例給 ??connection ??參數(shù)即可。注意,我們沒有提供同時設置 ??Connection ??和 ??autoCommit ??的方法,這是因為 MyBatis 會依據(jù)傳入的 ??Connection ??來決定是否啟用 ??autoCommit??。對于事務隔離級別,MyBatis 使用了一個 Java 枚舉包裝器來表示,稱為 ??TransactionIsolationLevel??,事務隔離級別支持 ?JDBC ?的五個隔離級別(??NONE??、??READ_UNCOMMITTED??、??READ_COMMITTED??、??REPEATABLE_READ ??和 ??SERIALIZABLE??),并且與預期的行為一致。

你可能對 ??ExecutorType ??參數(shù)感到陌生。這個枚舉類型定義了三個值:

  • ??ExecutorType.SIMPLE??:該類型的執(zhí)行器沒有特別的行為。它為每個語句的執(zhí)行創(chuàng)建一個新的預處理語句。
  • ??ExecutorType.REUSE??:該類型的執(zhí)行器會復用預處理語句。
  • ??ExecutorType.BATCH??:該類型的執(zhí)行器會批量執(zhí)行所有更新語句,如果 ??SELECT ??在多個更新中間執(zhí)行,將在必要時將多條更新語句分隔開來,以方便理解。

在 ??SqlSessionFactory ??中還有一個方法我們沒有提及,就是 ??getConfiguration()??。這個方法會返回一個 ??Configuration ??實例,你可以在運行時使用它來檢查 MyBatis 的配置。

如果你使用過 MyBatis 的舊版本,可能還記得 ??session??、事務和批量操作是相互獨立的。在新版本中則不是這樣。上述三者都包含在 ??session ??作用域內(nèi)。你不必分別處理事務或批量操作就能得到想要的全部效果。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號