前兩章簡單的講解了MyBatis的使用方式. 接下來先全局的說一下MyBatis的全局的xml配置詳細說明.
XML格式定義
-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
configuration 的映射文件(根據定義順序說明)
- properties 屬性
- settings 設置
- typeAliases 類型別名
- typeHandlers 類型處理器
- objectFactory 對象工廠
- objectWrapperFactory MyBatis對基本類型, 基本對象map和集合的封裝.
- reflectorFactory 反射模塊工廠
- plugins 插件
- environments 環境配置
- databaseIdProvider 數據庫廠商標識
- mappers 映射器
properties 屬性
這些屬性都是可外部配置且可動態替換的,既可以在典型的 Java 屬性文件中配置,也可通過 properties 元素的子元素來傳遞。例如:
properties中的 resource 是根據項目查找, 所以config.properties 所在目錄如下圖所示:

引用的config.properties內容如下:

這里使用組合使用的方式主要是為了能夠演示properties的使用方式, 在真正使用的時候, 直接引入config.properties就可以了. 這樣在真正的和Spring做搭建的時候提供了便利.
在MyBatis的config中使用方式如下圖:

測試代碼(UserMapperTest):

測試通過:

需要注意配置的加載順序, 按照以下來加載。
- 在 properties 元素體內指定的屬性首先被讀取。
- 然后根據 properties 元素中的 resource 屬性讀取類路徑下屬性文件或根據 url 屬性指定的路徑讀取屬性文件,并覆蓋已讀取的同名屬性。
- 最后讀取作為方法參數傳遞的屬性,并覆蓋已讀取的同名屬性。也就是Java代碼配置的方式。
因此,通過方法參數傳遞的屬性具有最高優先級,resource/url 屬性中指定的配置文件次之,最低優先級的是 properties 屬性中指定的屬性。
從 MyBatis 3.4.2 開始,你可以為占位符指定一個默認值。使用范例如下:
這個特性默認是關閉的。如果你想為占位符指定一個默認值, 你應該添加一個指定的屬性來開啟這個特性。例如:
創建對應的配置文件(config.properties)和 dot-mybatis-config.xml 代碼如下:

編寫測試程序(DotUserMapperTest), 代碼如下:

準備測試, 測試通過。

就是你要的效果。 可以嘗試輸入一些錯誤的配置, 看一下效果。
注意:因為“:”是允許設置成name值得, 所以想開啟上面的配置, 就需要修改默認的分隔符。
使用的時候就需要使用, 這里的db:username是一個property的name值
案例說明:
這里如果使用了db:username為name值, 就會出現如下的錯誤信息:

從錯誤信息看, 應該是使用默認的“:”進行分割的。 模擬代碼就是通過字符匹配到第一個“:”, 然后截取對應的字符串。源碼如下:

所以我們就需要配置自定義的分隔符(separator-mybatis-config.xml)。

測試代碼(SeparatorUserMapperTest):

測試結果為, 測試成功

這里給點建議, 把上面的例子都自己動手做一邊, 多修改修改數據,不用管對錯, 先運行起來看看, 這樣你除了能夠看到如何正確配置之外,也能看到配置錯誤之后, 錯誤的信息是什么。 看的錯誤多了, 你也就成了別人眼里能夠解決問題的大牛了。 你想成為大牛嗎?
關注我, 感謝感謝。
全部代碼已經上傳到Github
GitHub地址: https://github.com/xymiao/mybatis3
本篇代碼地址: https://github.com/xymiao/mybatis3/tree/master/mybatis3_03_mybatis_config_properties