文章出處

 經過上兩篇博文的總結,對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加載屬性的順序了:

 

  1. <properties>元素體內定義的首先被讀取
  2. 然后讀取<properties>元素中resource或者url加載的屬性,它會覆蓋已讀取的同名屬性
  3. 最后讀取parameterType傳遞的屬性(使用${}這種方式,不是#{}這種方式),它會覆蓋已讀的同名屬性

 建議:從上面可以看出來,如果在<properties>中定義屬性的話,有點亂,搞不好就會出錯,所以開發中不要在<properties>元素體內添加任何屬性值,只將屬性值定義在properties文件中。另外在properties文件中定義的屬性名要有一定的特殊性,如xxx.xxx,這樣不容易和其他的一些屬性值起沖突。

2. settings全局參數配置

mybatis框架在運行時可以調整一些運行參數,比如:開啟二級緩存、開啟延遲加載等,有個settings全局參數配置文檔: 
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接口配置 
  但是還是有個弊端,就跟上面那個別名的配置一樣,如果現在有好多個mapper咋整,所以mybatis也給我們提供了批量加載方法:我們只要指定mapper接口的包名,mybatis自動掃描包下面所有的mapper接口進行加載。當然,還是要遵循上面的那個規范。所以我們可以修改上面的配置:

 

<mappers>
    <mapper resource="sqlmap/User.xml" />
    <mapper class="mybatis.mapper"/>
</mappers>

 

這樣mybatis.mapper包下的所有mapper.xml映射文件都可以加載了,這就更加簡潔了。在開發中推薦使用這種批量加載映射文件的方法。 
  關于SqlMapConfig.xml文件中的配置就總結這么多吧~ 

 


文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()