1. 程式人生 > >Mybatis最入門---Mapper檔案配置詳解(上)

Mybatis最入門---Mapper檔案配置詳解(上)

[一步是咫尺,一步即天涯]

前文中,我們演示了最基本的HelloWorld程式,下面我們將介紹我們上面各項配置檔案的詳細解釋,以及我們正式開發過程中,各種配置的注意事項等。

慣例,先來看看我們的準備工作有:

a.作業系統 :win7 x64

b.基本軟體:MySQL,Mybatis,Spring,SQLyog,Tomcat,web基礎

-------------------------------------------------------------------------------------------------------------------------------------

1.環境配置

上文中我們示例程式碼如下:

....
<configuration>
	......
	<environments default="development">
		<environment id="development">
			<transactionManager type="JDBC" />
			<dataSource type="POOLED">
				<property name="driver" value="${jdbc.driverClassName}" />
				<property name="url" value="${jdbc.url}" />
				<property name="username" value="${jdbc.username}" />
				<property name="password" value="${jdbc.password}" />
			</dataSource>
		</environment>
	</environments>
	......
</configuration>

注意這裡的關鍵點:

  • 預設的環境 ID(比如:default=”development”)。在實際使用時,常見的環境配置有開發環境,測試環境,正式環境等。為了方便開發,mybatis提供給我們方便切換環境的方法,這裡的ID需要對應下面的每個environment標籤的ID值。
  • 每個 environment 元素定義的環境 ID(比如:id=”development”)。在該標籤中,我們需要配置每一個環境的具體引數,本例我們只是用到基本配置,更多用法見後文中的使用,敬請期待!

2.事務管理器的配置(比如:type=”JDBC”)。

  • 在 MyBatis 中有兩種型別的事務管理器(也就是 type=”[JDBC|MANAGED]”):

    • JDBC – 這個配置就是直接使用了 JDBC 的提交和回滾設定,它依賴於從資料來源得到的連線來管理事務範圍。
    • MANAGED – 這個配置幾乎沒做什麼。它從來不提交或回滾一個連線,而是讓容器來管理事務的整個生命週期(比如 JEE 應用伺服器的上下文)。 預設情況下它會關閉連線,然而一些容器並不希望這樣,因此需要將 closeConnection 屬性設定為 false 來阻止它預設的關閉行為。
    • 特別的:如果正在使用 Spring + MyBatis,則沒有必要配置事務管理器, 因為 Spring 模組會使用自帶的管理器來覆蓋前面的配置。具體用法見後文示例。

3.資料來源的配置(共有3種::type=”POOLED”,:type=”UNPOOLED”,:type=”JNDI”)。

POOLED---這種資料來源的實現利用“池”的概念將 JDBC 連線物件組織起來,避免了建立新的連線例項時所必需的初始化和認證時間。 這是一種使得併發 Web 應用快速響應請求的流行處理方式。

  • poolMaximumActiveConnections – 在任意時間可以存在的活動(也就是正在使用)連線數量,預設值:10
  • poolMaximumIdleConnections – 任意時間可能存在的空閒連線數。
  • poolMaximumCheckoutTime – 在被強制返回之前,池中連線被檢出(checked out)時間,預設值:20000 毫秒(即 20 秒)
  • poolTimeToWait – 這是一個底層設定,如果獲取連線花費的相當長的時間,它會給連線池列印狀態日誌並重新嘗試獲取一個連線(避免在誤配置的情況下一直安靜的失敗),預設值:20000 毫秒(即 20 秒)。
  • poolPingQuery – 傳送到資料庫的偵測查詢,用來檢驗連線是否處在正常工作秩序中並準備接受請求。預設是“NO PING QUERY SET”,這會導致多數資料庫驅動失敗時帶有一個恰當的錯誤訊息。
  • poolPingEnabled – 是否啟用偵測查詢。若開啟,也必須使用一個可執行的 SQL 語句設定 poolPingQuery 屬性(最好是一個非常快的 SQL),預設值:false。
  • poolPingConnectionsNotUsedFor – 配置 poolPingQuery 的使用頻度。這可以被設定成匹配具體的資料庫連線超時時間,來避免不必要的偵測,預設值:0(即所有連線每一時刻都被偵測 — 當然僅當 poolPingEnabled 為 true 時適用)。

UNPOOLED---這個資料來源的實現只是每次被請求時開啟和關閉連線。雖然一點慢,它對在及時可用連線方面沒有效能要求的簡單應用程式是一個很好的選擇。 不同的資料庫在這方面表現也是不一樣的,所以對某些資料庫來說使用連線池並不重要,這個配置也是理想的。UNPOOLED 型別的資料來源僅僅需要配置以下 5 種屬性:

  • driver – 這是 JDBC 驅動的 Java 類的完全限定名(並不是JDBC驅動中可能包含的資料來源類)。
  • url – 這是資料庫的 JDBC URL 地址。
  • username – 登入資料庫的使用者名稱。
  • password – 登入資料庫的密碼。
  • defaultTransactionIsolationLevel – 預設的連線事務隔離級別。

JNDI--- 這個資料來源的實現是為了能在如 EJB 或應用伺服器這類容器中使用,容器可以集中或在外部配置資料來源,然後放置一個 JNDI 上下文的引用。這種資料來源配置只需要兩個屬性:

  • initial_context – 這個屬性用來在 InitialContext 中尋找上下文(即,initialContext.lookup(initial_context))。這是個可選屬性,如果忽略,那麼 data_source 屬性將會直接從 InitialContext 中尋找。
  • data_source – 這是引用資料來源例項位置的上下文的路徑。提供了 initial_context 配置時會在其返回的上下文中進行查詢,沒有提供時則直接在 InitialContext 中查詢。

4.屬性配置(動態配置,子元素配置)

動態配置:即通過porpeties檔案來配置,如在HelloWorld工程中使用的方式即可。

子元素配置:這個不如直接看用法吧,如下:

<properties>
  <property name="username" value="root"/>
  <property name="password" value="1234"/>
</properties>
特別的:

如果屬性在不只一個地方進行了配置,那麼 MyBatis 將按照下面的順序來載入:

  • 在 properties 元素體內指定的屬性首先被讀取。
  • 然後根據 properties 元素中的 resource 屬性讀取類路徑下屬性檔案或根據 url 屬性指定的路徑讀取屬性檔案,並覆蓋已讀取的同名屬性。
  • 最後讀取作為方法引數傳遞的屬性,並覆蓋已讀取的同名屬性。

因此,通過方法引數傳遞的屬性具有最高優先順序,resource/url 屬性中指定的配置檔案次之,最低優先順序的是 properties 屬性中指定的屬性。

5.別名配置:類型別名是為 Java 型別設定一個短的名字。它只和 XML 配置有關,存在的意義僅在於用來減少類完全限定名的冗餘。

基本用法如下:

<typeAliases>
  <typeAlias alias="Author" type="domain.blog.Author"/>
  <typeAlias alias="Blog" type="domain.blog.Blog"/>
  <typeAlias alias="Comment" type="domain.blog.Comment"/>
  <typeAlias alias="Post" type="domain.blog.Post"/>
  <typeAlias alias="Section" type="domain.blog.Section"/>
  <typeAlias alias="Tag" type="domain.blog.Tag"/>
</typeAliases>
這種用法會使得配置項非常非常多,因此我們推薦使用下面的方法進行配置。
<typeAliases>
  <package name="domain.blog"/>
</typeAliases>
即配置一個包路徑,當前包下面的所有類都會被自動轉化為一個JAVA BEAN.

特別的,當時用這種方法配置時,其別名是首字母小寫的別名,如,Author物件的別名為author。同時,我們不難發現,在沒有其他配置的情況下,最好不要出現相同命名的物件。如果實在需要時,要使用單獨註解的方式來實現,具體使用如下:

@Alias("author")
public class Author {
    ...
}
另外,在Mybatis中已經建立了一些基本的別名物件,它們都是大小寫不敏感的,需要注意的是由基本型別名稱重複導致的特殊處理。具體如下:
別名 對映的型別
_byte byte
_long long
_short short
_int int
_integer int
_double double
_float float
_boolean boolean
string String
byte Byte
long Long
short Short
int Integer
integer Integer
double Double
float Float
boolean Boolean
date Date
decimal BigDecimal
bigdecimal BigDecimal
object Object
map Map
hashmap HashMap
list List
arraylist ArrayList
collection Collection
iterator Iterator

6.對映器(mappers)

所謂對映器,即Mybatis尋找資料庫語句檔案的配置。在HelloWorld中,我們演示裡其中一種配置方式,現在我們我們總結一下我們可以使用的所有配置方法。

a.使用想對路徑進行配置,如下:

<!-- Using classpath relative resources -->
<mappers>
  <mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
  <mapper resource="org/mybatis/builder/BlogMapper.xml"/>
  <mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>
b.使用檔案定位符配置,如下:
<!-- Using url fully qualified paths -->
<mappers>
  <mapper url="file:///var/mappers/AuthorMapper.xml"/>
  <mapper url="file:///var/mappers/BlogMapper.xml"/>
  <mapper url="file:///var/mappers/PostMapper.xml"/>
</mappers>
c.使用介面配置
<!-- Using mapper interface classes -->
<mappers>
  <mapper class="org.mybatis.builder.AuthorMapper"/>
  <mapper class="org.mybatis.builder.BlogMapper"/>
  <mapper class="org.mybatis.builder.PostMapper"/>
</mappers>
d.使用包路經配置,如下:
<!-- Register all interfaces in a package as mappers -->
<mappers>
  <package name="org.mybatis.builder"/>
</mappers>
-------------------------------------------------------------------------------------------------------------------------------------

至此,Mybatis最入門---配置詳解(上)結束,我們在HelloWorld工程中使用的配置已經介紹完畢,下文我們介紹一些我們後續可能會使用的配置項。

參考資料:

官方文件:http://www.mybatis.org/mybatis-3/