MyBatis快速入門(06)全域性配置 環境配置

2021-10-09 14:49:17 字數 4457 閱讀 6834

mybatis中的環境配置指的就是environments標籤內的配置,如下:

注意這裡的關鍵點:

預設使用的環境 id(比如:"development")。

每個 environment 元素需要定義環境 id(比如:id="development" 等)。

事務管理器的配置(比如:type="jdbc")。

資料來源的配置(比如:type="pooled")。

配置中,外面是environments標籤,裡面是environment標籤,從結構上可以看出,mybatis 支援配置多個環境,這種機制有助於將 sql 語句的對映檔案應用於多個資料庫之中, 現實情況下有很多開發場景需要這麼做。例如,開發、測試和生產環境需要有不同的資料庫配置;或者想在具有相同 schema 的多個生產資料庫中 使用相同的 sql 對映檔案等等。

不過要記住:儘管可以配置多個環境,但每個 sqlsessionfactory 例項只能選擇一種環境。

所以,如果你想連線兩個資料庫,就需要建立兩個 sqlsessionfactory 例項,每個資料庫對應乙個。而如果是三個資料庫,就需要三個例項,依此類推。我們來增加乙個環境:

環境id也換成了我們熟悉的test和prod。這時候再建立sqlsessionfactory就需要把環境id傳過去:

我們把環境引數提取出來,可以很方便的在多環境之間切換:

如果不寫環境id,那麼預設的環境id:development會被載入。

transactionmanager標籤用來配置事務。在 mybatis 中有兩種型別的事務管理器,入門例子中寫的是type="jdbc",還有一種是type="managed"。

jdbc – 這個配置就是直接使用了 jdbc 的提交和回滾設定,它依賴於從資料來源得到的連線來管理事務作用域。

managed – 這個配置幾乎沒做什麼。它從來不提交或回滾乙個連線,而是讓容器來管理事務的整個生命週期(比如 jee 應用伺服器的上下文)。 預設情況下它會關閉連線,然而一些容器並不希望這樣,因此需要將 closeconnection 屬性設定為 false 來阻止它預設的關閉行為。例如:

使用下列方式獲取sqlsession,預設是關閉自動提交的,需要手動提交:

sqlsessionfactory.opensession()

如果想預設開啟自動提交,需要新增乙個引數:

sqlsessionfactory.opensession(true)

datasource標籤內是資料來源配置,內容是連線資料庫的引數。datasource 元素使用標準的 jdbc 資料來源介面來配置 jdbc 連線物件的資源。入門例子中資料來源的型別是type="pooled",mybatis共有三種內建的資料來源型別(也就是 type=」[unpooled|pooled|jndi]」):

unpooled– 這個資料來源的實現只是每次被請求時開啟和關閉連線。雖然有點慢,但對於在資料庫連線可用性方面沒有太高要求的簡單應用程式來說,是乙個很好的選擇。 不同的資料庫在效能方面的表現也是不一樣的,對於某些資料庫來說,使用連線池並不重要,這個配置就很適合這種情形。

pooled– 這種資料來源的實現利用「連線池」的概念將 jdbc 連線物件組織起來,避免了建立新的連線例項時所必需的初始化和認證時間。 這是一種使得併發 web 應用快速響應請求的流行處理方式。

jndi– 這個資料來源的實現是為了能在如 ejb 或應用伺服器這類容器中使用,容器可以集中或在外部配置資料來源,然後放置乙個 jndi 上下文的引用。

其中unpooled和jndi 不再細說。使用執行緒池的pooled除了驅動,連線,使用者名稱和密碼四個引數外,還有很多屬性用來配置 pooled 的資料來源:

defaulttransactionisolationlevel – 預設的連線事務隔離級別。

poolmaximumactiveconnections – 在任意時間可以存在的活動(也就是正在使用)連線數量,預設值:10

poolmaximumidleconnections – 任意時間可能存在的空閒連線數。

poolmaximumcheckouttime – 在被強制返回之前,池中連線被檢出(checked out)時間,預設值:20000 毫秒(即 20 秒)

pooltimetowait – 這是乙個底層設定,如果獲取連線花費了相當長的時間,連線池會列印狀態日誌並重新嘗試獲取乙個連線(避免在誤配置的情況下一直安靜的失敗),預設值:20000 毫秒(即 20 秒)。

poolmaximumlocalbadconnectiontolerance – 這是乙個關於壞連線容忍度的底層設定, 作用於每乙個嘗試從快取池獲取連線的執行緒。 如果這個執行緒獲取到的是乙個壞的連線,那麼這個資料來源允許這個執行緒嘗試重新獲取乙個新的連線,但是這個重新嘗試的次數不應該超過 poolmaximumidleconnections 與 poolmaximumlocalbadconnectiontolerance 之和。 預設值:3 (新增於 3.4.5版本)

poolpingquery – 傳送到資料庫的偵測查詢,用來檢驗連線是否正常工作並準備接受請求。預設是「no ping query set」,這會導致多數資料庫驅動失敗時帶有乙個恰當的錯誤訊息。

poolpingenabled – 是否啟用偵測查詢。若開啟,需要設定 poolpingquery 屬性為乙個可執行的 sql 語句(最好是乙個速度非常快的 sql 語句),預設值:false。

poolpingconnectionsnotusedfor – 配置 poolpingquery 的頻率。可以被設定為和資料庫連線超時時間一樣,來避免不必要的偵測,預設值:0(即所有連線每一時刻都被偵測 — 當然僅當 poolpingenabled 為 true 時適用)。

除了預設的連線池,還有很多開源的更加好用的連線池,下面來配置一下比較常用的c3p0和druid連線池。

c3p0是乙個開源的jdbc連線池,它實現了資料來源和jndi繫結,支援jdbc3規範和jdbc2的標準擴充套件。目前使用它的開源專案有hibernate,spring等。mybatis 沒有幫開發者實現 c3p0 資料庫連線池,故需要使用者自己實現 c3p0 來載入資料連線池。其實很簡單的,只要繼承 unpooleddatasourcefactory 並把 datasource 實現。我們的 mybatis 就實現了 c3p0 資料庫連線池。首先要引入c3p0的jar包:

然後新建乙個類,實現datasource:

接下來在資料來源中配置c3p0,將type="pooled"改為type="c3p0datasourcefactory",具體修改內容如下:

注意資料來源引數的名字有變化。

druid是阿里巴巴開源平台上乙個資料庫連線池實現,它結合了c3p0、dbcp、proxool等db池的優點,同時加入了日誌監控,可以很好的監控db池連線和sql的執**況,可以說是針對監控而生的db連線池,據說是目前最好的連線池。使用druid的步驟和c3p0差不多,首先加入jar包依賴:

然後新建乙個類,實現datasource:

雖然druid提供了乙個同名的druiddatasourcefactory類,但是不能在mybatis中直接使用。接下來在資料來源中配置druid,具體修改內容如下:

這樣在呼叫的時候可以使用druid執行緒池。

mybatis快速入門

1.持久化概念 1.1.持久化是程式資料在瞬時狀態和持久狀態間轉換的過程 2.orm概念 2.2.資料在程式中以物件的形式被操作,例如user user new user 1,jack 2.3.資料在資料庫以一行記錄的形式被儲存,例如 編號姓名 jack 2.4.兩種形式通過某種框架進行切換 3.m...

MyBatis快速入門

1.持久化概念 1.1.持久化是程式資料在瞬時狀態和持久狀態間轉換的過程 2.orm概念 2.2.資料在程式中以物件的形式被操作,例如user user new user 1,jack 2.3.資料在資料庫以一行記錄的形式被儲存,例如 編號姓名 jack 2.4.兩種形式通過某種框架進行切換 3.m...

Mybatis快速入門指南

簡介 當下越來越多的企業專案架構中,在持久層部分,拋棄了hibernate框架,而選用mybatis框架取而代之,旨在更加深入細緻的控制和資料庫的互動。mybatis 本是apache的乙個開源專案ibatis,2010年這個專案由apache software foundation 遷移到了goo...