MyBatis 3 Java API-SqlSessionFactory

2022-04-11 14:08 更新

SqlSessionFactory

??SqlSessionFactory ??有六個(gè)方法創(chuàng)建 ??SqlSession ??實(shí)例。通常來(lái)說(shuō),當(dāng)你選擇其中一個(gè)方法時(shí),你需要考慮以下幾點(diǎn):

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

基于以上需求,有下列已重載的多個(gè) ??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();

默認(rèn)的 ??openSession()?? 方法沒(méi)有參數(shù),它會(huì)創(chuàng)建具備如下特性的 ??SqlSession??:

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

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

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

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

在 ??SqlSessionFactory ??中還有一個(gè)方法我們沒(méi)有提及,就是 ??getConfiguration()??。這個(gè)方法會(huì)返回一個(gè) ??Configuration ??實(shí)例,你可以在運(yùn)行時(shí)使用它來(lái)檢查 MyBatis 的配置。

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


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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)