【MyBatis學習05】SqlMapConfig.xml檔案中的配置總結
經過上兩篇博文的總結,對mybatis中的dao開發方法和流程基本掌握了,這一節主要來總結一下mybatis中的全域性配置檔案SqlMapConfig.xml在開發中的一些常用配置,首先看一下該全域性配置檔案中都有哪些可以配置的東西:
配置內容 | 作用 |
---|---|
<properties> |
用來載入屬性檔案 |
<settings> |
用來設定全域性引數 |
<typeAliases> |
用來設定型別的別名 |
<typeHandlers> |
用來設定型別處理器 |
<objectFactory> |
用來設定物件工廠 |
<plugins> |
用來設定外掛 |
<environments> |
用來設定mybatis的環境 |
<mappers> |
用來配置對映檔案 |
從前面的博文中可以看出,<environments>
是用來配置mybatis的環境的,在和spring整合前是由mybatis自己管理的,但是和Spring整合後,這些配置都將被廢棄掉,<environments>
部分在前面已經有提到過,這裡就不再贅述了。然後objectFactory和plugins一般我們不用,所以在這裡就不總結了,<typeHandlers>
型別處理器是mybatis中用來完成jdbc型別和
1. properties載入屬性檔案
我們之前連線資料庫的一些配置都是在<environments>
中寫死的,在實際開發中肯定不是這樣子的,我們需要將資料庫連線引數單獨配在db.properties檔案中,然後在SqlMapConfig.xml中載入db.properties的屬性值即可,這就用到了<properties>
了。即:
<properties resource="db.properties">
- 1
- 1
然後environment中做一下對應的修改即可:
在<properties>
內部還可以定義屬性值:<property
name="" value=""/>
,在property中定義的屬性也可以被<evironments>
中來載入,這就涉及到了mybatis載入屬性的順序了:
- 在
<properties>
元素體內定義的首先被讀取- 然後讀取
<properties>
元素中resource或者url載入的屬性,它會覆蓋已讀取的同名屬性- 最後讀取parameterType傳遞的屬性(使用${}這種方式,不是#{}這種方式),它會覆蓋已讀的同名屬性
建議:從上面可以看出來,如果在<properties>
中定義屬性的話,有點亂,搞不好就會出錯,所以開發中不要在<properties>
元素體內新增任何屬性值,只將屬性值定義在properties檔案中。另外在properties檔案中定義的屬性名要有一定的特殊性,如xxx.xxx,這樣不容易和其他的一些屬性值起衝突。
2. settings全域性引數配置
mybatis框架在執行時可以調整一些執行引數,比如:開啟二級快取、開啟延遲載入等,有個settings全域性引數配置文件:
這些全域性引數的配置會影響mybatis的執行行為,需要的時候再設定,不需要的時候不能亂設定,這裡就不做詳細介紹了,等後面用到的時候我再針對相應的做一下介紹。說實在的,這麼多我也懶得去看……
3. typeAliases類型別名
這是配置中的一個重點,我們知道,在mapper.xml中定義了很多的statement,statement需要parameterType來指定輸入引數的型別、需要resultType來指定輸出結果的型別。如果在指定型別時輸入型別全路徑,有時候會很長,不方便進行開發,那麼我們就可以可以針對parameterType或resultType指定的型別定義一些別名,在mapper.xml中通過別名<typeAliases>
來定義,方便開發。
mybatis有預設支援的一些別名,一般基本型別都有別名,如下:
但是針對pojo的需要我們自定義別名了,比如我們將自己定義的User物件取個別名為user,如下:
<!-- 別名的定義 -->
<typeAliases>
<!-- 針對單個別名的定義。type:型別的路徑; alias:別名 -->
<typeAlias type="mybatis.po.User" alias="user"/>
</typeAliases>
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
然後輸入引數或者輸出結果為mybatis.po.User時,就可以用user來代替了,如下:
但是問題來了,如果工程中有很多pojo,那豈不是完蛋……這得定義多少個啊,所以mybatis幫我們解決了這個問題,它提供了批量別名的定義,如下:
<!-- 批量別名定義(這個常用)
指定一個包名,mybatis會自動的掃描包中po類,自動定義別名,別名就是類名(首字母大寫或小寫都可以) -->
<package name="mybatis.po"/>
- 1
- 2
- 3
- 1
- 2
- 3
這就爽了,如果進行了上面這樣設定,那麼所有放在mybatis.po包下的pojo都可以不用定義了,直接使用類名就可以了,所以我們直接使用user即可。毫無疑問,開發中肯定使用這個批量的別名定義。
3. mappers對映配置
在前面的幾篇博文中可以看到,<mappers>
標籤是通過resource方法載入單個對映檔案的,即:
<mappers>
<mapper resource="sqlmap/User.xml" />
<mapper resource="mapper/UserMapper.xml" />
</mappers>
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
當然咯,除了resource外,也可以用url來載入,只不過url指定的是絕對路徑,硬碟中的路徑。這裡就不舉例了,這裡介紹另一種載入對映檔案的方式:通過mapper介面來載入。通過mapper介面來載入的話要遵循一個規範:
規範:需要將mapper介面類名和mapper.xml對映檔名稱保持一致,且在一個目錄中
這個規範的前提是:使用的是mapper代理的方法
所以上面的配置就可以改成
<mappers>
<mapper resource="sqlmap/User.xml" />
<mapper class="mybatis.mapper.UserMapper"/>
</mappers>
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
所以要把原來的UserMapper.xml從config/mapper中的拖到和UserMapper.java一個目錄下且同名,如下:
但是還是有個弊端,就跟上面那個別名的配置一樣,如果現在有好多個mapper咋整,所以mybatis也給我們提供了批量載入方法:我們只要指定mapper介面的包名,mybatis自動掃描包下面所有的mapper介面進行載入。當然,還是要遵循上面的那個規範。所以我們可以修改上面的配置:
<mappers>
<mapper resource="sqlmap/User.xml" />
<package name="mybatis.mapper"/>
</mappers>
- 1
- 2
- 3
- 4
- 1
- 2
- 3
- 4
這樣mybatis.mapper包下的所有mapper.xml對映檔案都可以載入了,這就更加簡潔了。在開發中推薦使用這種批量載入對映檔案的方法。
關於SqlMapConfig.xml檔案中的配置就總結這麼多吧~