經過上兩篇博文的總結,對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類型和Java類型之間轉換的,mybatis默認支持的類型處理器基本夠我們使用了,一般不需要自定義。這篇博文主要來總結一下剩下的幾個配置的用法。
1. properties加載屬性文件
我們之前連接數據庫的一些配置都是在<environments>
中寫死的,在實際開發中肯定不是這樣子的,我們需要將數據庫連接參數單獨配在db.properties文件中,然后在SqlMapConfig.xml中加載db.properties的屬性值即可,這就用到了<properties>
了。即:
<properties resource="db.properties">
然后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>
然后輸入參數或者輸出結果為mybatis.po.User時,就可以用user來代替了,如下:
但是問題來了,如果工程中有很多pojo,那豈不是完蛋……這得定義多少個啊,所以mybatis幫我們解決了這個問題,它提供了批量別名的定義,如下:
<!-- 批量別名定義(這個常用) 指定一個包名,mybatis會自動的掃描包中po類,自動定義別名,別名就是類名(首字母大寫或小寫都可以) --> <package name="mybatis.po"/>
這就爽了,如果進行了上面這樣設置,那么所有放在mybatis.po包下的pojo都可以不用定義了,直接使用類名就可以了,所以我們直接使用user即可。毫無疑問,開發中肯定使用這個批量的別名定義。
3. mappers映射配置
在前面的幾篇博文中可以看到,<mappers>
標簽是通過resource方法加載單個映射文件的,即:
<mappers> <mapper resource="sqlmap/User.xml" /> <mapper resource="mapper/UserMapper.xml" /> </mappers>
當然咯,除了resource外,也可以用url來加載,只不過url指定的是絕對路徑,硬盤中的路徑。這里就不舉例了,這里介紹另一種加載映射文件的方式:通過mapper接口來加載。通過mapper接口來加載的話要遵循一個規范:
規范:需要將mapper接口類名和mapper.xml映射文件名稱保持一致,且在一個目錄中
這個規范的前提是:使用的是mapper代理的方法
所以上面的配置就可以改成
<mappers> <mapper resource="sqlmap/User.xml" /> <mapper class="mybatis.mapper.UserMapper"/> </mappers>
所以要把原來的UserMapper.xml從config/mapper中的拖到和UserMapper.java一個目錄下且同名,如下:
但是還是有個弊端,就跟上面那個別名的配置一樣,如果現在有好多個mapper咋整,所以mybatis也給我們提供了批量加載方法:我們只要指定mapper接口的包名,mybatis自動掃描包下面所有的mapper接口進行加載。當然,還是要遵循上面的那個規范。所以我們可以修改上面的配置:
<mappers> <mapper resource="sqlmap/User.xml" /> <mapper class="mybatis.mapper"/> </mappers>
這樣mybatis.mapper包下的所有mapper.xml映射文件都可以加載了,這就更加簡潔了。在開發中推薦使用這種批量加載映射文件的方法。
關于SqlMapConfig.xml文件中的配置就總結這么多吧~
文章列表