Mybatis databaseIdProvider數據庫廠商標識

       在相同數據庫廠商的環境下,數據庫廠商標識沒有什麼意義,在實際的應用中使用得比較少,因爲使用不同廠商數據庫得系統還是比較少得。Mybatis可能會運行在不同廠商得數據庫中,它爲此提供一個數據庫標識,並提供自定義,它的作用在於指定SQL到對應的數據庫廠商提供的數據庫中運行。

1、系統默認的規則,mybatis提供默認的規則:

type="DB_VENDOR"是啓動Mybatis內部註冊的策略器。首先Mybatis會將你的配置讀入Configuration類裏面,在連接數據庫後調用getDatabaseProductName()方法去獲取數據庫的信息,然後用我們配置的name值取做匹配來得到DatabaseId。

我們也可以指定SQL在哪個數據庫廠商執行,我們把Mapper的XML配置修改一下:

在多了一個databaseId屬性的情況下,Mybatis將提供如下規則。

  • 如果沒有配置databaseIdProvider標籤,那麼databaseId就會返回null
  • 如果配置了databaseIdProvier標籤,Mybatis就會用配置的name值去匹配數據庫信息,如果匹配得上就會設置databaseId,否則依舊爲null
  • 如果Configuration得databaseId不爲空,則它只會找到配置databaseId得SQL語句
  • Mybatis會加載不帶databaseId屬性和帶有匹配當前數據庫databaseId屬性得所有語句。如果同時找到帶有databaseId和不帶databaseId得相同語句,則後者會被捨棄

2、不使用系統默認規則

Mybatis也提供規則允許自定義,我們只要實現databaseIdProvider接口,並且實現配置即可,看下面實例代碼:

 

其次,註冊這個類到MyBatis上下問環境中,我們這樣配置databaseIdProvider標籤:

我們把type修改爲我們自己實現的類,類裏面setProperties方法的參數傳遞進去的將會是我們在XML裏面配置的信息,我們保存在類的變量Properties裏,方便以後讀出。在方法getDatabaseId中,傳遞的參數是數據庫數據源,我們獲取其名稱,然後通過properties的鍵值找到對應的databaseId。

如有特殊的要求,我們可以根據自己所需要的規則來編寫databaseIdProvider,配置Mapper、使用規則和默認規則是一致的。

 

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