天天看點

Mybatis配置筆記

作者:tianlongbabu

1.Mybatis配置元素如下

Mybatis配置筆記

MyBatis 配置項的順序不能颠倒。如果颠倒了它們的順序,那麼在MyBatis啟動階段就會發生異常,導緻程式無法運作。

2 properties屬性

使用property子元素定義參數

Mybatis配置筆記

這裡使用了元素<properties>下的子元素<propertis>定義,用字元串database.username定義資料庫使用者名,然後就可以在資料庫定義中引入這個已經定義好的屬性參數,如${database.username},這樣定義一次就可以到處引用了。

使用properties檔案

使用properties檔案是比較普遍的方法,一方面這個檔案十分簡單,其邏輯就是鍵值對應,我們可以配置多個鍵值放在一個 properties 檔案中,也可以把多個鍵值放到多個properties檔案中,這些都是允許的,它友善日後維護和修改。

代碼清單:jdbc.properties

Mybatis配置筆記

建立一個檔案jdbc.properties放到classpath的路徑下

在MyBatis中通過<properties>的屬性resource來引入properties檔案。

<properties resource="jdbc.properties">

Mybatis配置筆記

也可以按${database.username}的方法引入properties檔案的屬性參數到MyBatis配置檔案中。這個時候通過維護properties檔案就可以維護我們的配置内容了。

使用程式傳遞方式傳遞參數

在真實的生産環境中,資料庫的使用者密碼是對開發人員和其他人員保密的。運維人員為了保密,一般都需要把使用者和密碼經過加密成為密文後,配置到properties檔案中。對于開發人員及其他人員而言,就不知道其真實的使用者密碼了,資料庫也不可能使用已經加密的字元串去連接配接,此時往往需要通過解密才能得到真實的使用者和密碼了。現在假設系統已經為提供了這樣的一個CodeUtils.decode(str)進行解密,那麼我們在建立 SqlSessionFactory前,就需要把使用者名和密碼解密,然後把解密後的字元串重置到properties屬性中.

舉例如下——

String resource = "mybatis-config.xml";

InputStream inputStream;

InputStream in = Resource.getResourceAsStream("jdbc.properties");

Properties props = new Properties();

props.load(in);

String username = props.getProperty("database.username");

String password = props.getProperty("database.password");

//解密使用者和密碼,并在屬性中重置

props.put("database.username",CodeUtils.decode(username));

props.put("database.password",CodeUtils.decode(password));

inputStream = ResoucesgetReSourceAsStream(resource);

//使用程式傳遞的方式覆寫願意的properties屬性參數

SqlSesionFactory = new SqlSessionFactoryBuilder().build(inputStream,props);

Mybatis配置筆記

首先使用Resources對象讀取了一個jdbc.properties配置檔案,然後擷取了它原來配置的使用者和密碼,進行解密并重置,最後使用SqlSessionFactoryBuilder的build方法,傳遞多個properties參數來完成。這将覆寫之前配置的密文,這樣就能連接配接資料庫了,同時也滿足了運維人員對資料庫使用者和密碼安全的要求。

3.settings設定

settings的配置項很多,但是真正用到的不會太多,我們把常用的配置項研究清楚就可以了,比如關于緩存的 cacheEnabled,關于級聯的 lazyLoadingEnabled 和 aggressiveLazy Loading,關于自動映射的autoMappingBehavior和mapUnderscoreToCamelCase,關于執行器類型的defaultExecutorType等。這裡給出一個全量的配置樣例

Mybatis配置筆記

4.typeAliases别名

自定義别名

1.使用配置檔案定義别名

Mybatis配置筆記

2.掃描别名

MyBatis還支援掃描别名。比如上面的兩個類都在包com.learn.ssm.chapter4.pojo之下,那麼就可以定義為:

Mybatis配置筆記

這樣 MyBatis 将掃描這個包裡面的類,将其第一個字母變為小寫作為其别名,比如類Role的别名會變為role,而User的别名會變為user。使用這樣的規則,有時候會出現重名,比如 com.learn.ssm.chapter3.pojo.User 這個類,MyBatis 還增加了對包 com.learn.ssm.chapter3.pojo 的掃描,那麼就會出現異常,這個時候可以使用 MyBatis 提供的注解@Alias("user3")進行區分,如代碼清單4-8所示。

Mybatis配置筆記

這樣就能夠避免因為别名重名導緻的掃描失敗的問題。

5.typeHandler類型轉換器

在很多情況下我們并不需要去配置typeHandler、jdbcType、javaType,因為MyBatis會探測應該使用什麼類型的typeHandler進行處理,但是有些場景無法探測到。對于那些需要使用自定義枚舉的場景,或者資料庫使用特殊資料類型的場景,可以使用自定義的typeHandler去處理類型之間的轉換問題。

6.引入映射器的方法

映射器定義命名空間(namespace)的方法,命名空間對應的是一個接口的全路徑,而不是實作類。

引入映射器的方法很多,一般分為以下幾種。

1.用檔案路徑引入映射器

Mybatis配置筆記

2.用包名引入映射器

Mybatis配置筆記

3.用類注冊引入映射器

Mybatis配置筆記

4.用userMapper.xml引入映射器

Mybatis配置筆記

繼續閱讀