聲明:
Author:趙志乾
Date:2018-6-23
Declaration:All Right Reserved!!!
背景知識:
1、名稱
名稱是一個應用很廣泛的概念。如一個變量會有名稱、一個方法會有名稱、一個類型同樣會有名稱。名稱的存在意義主要是起到辨別作用,這種作用無論是作用于人也好,還是作用于機器,在應用和生活中都不可或缺。
2、别名
給人印象最深刻的就是外國友人的姓名,要多長有多長、要多難記就有多難記。為此,出現了各式各樣的簡稱,其本質就是别名。别名存在的意義也是顯而易見,就是友善人們進行記憶、書寫和交流。但對于裝置而言,其運作需要一套固定的規則,它不在乎名稱的長短、是否難記和閱讀,它在乎的僅僅是規則是否被滿足。于是在人和裝置之間便産生了一道溝壑,而别名和原名稱之間的對應關系便成為了架設于溝壑之上的一座橋梁。
typeAliases元素
1、來源
MyBatis作為Java應用中成熟的ORM架構,用于橋接POJO和資料庫表資料,是以其不可避免的要使用的Java類類型,而Java類型的全限定名通常會比較長(層級比較多),這會使得某一個類型被多次使用時,需要把全限定名寫上若幹遍。作為一個重度懶癌患者,自然不希望這種事情發生在自己身上。于是Mybatis架構提供了一個typeAliases元素,用于存放原名稱和别名間的對應關系,之後在MyBatis上下文中需要該類型的地方使用簡短明了的别名即可。
對于一些常用的類型,MyBatis為其内置了别名,稱作系統定義别名。當我們需要這些類型時,直接使用内置的别名即可。而對于其他的類型,就需要使用者自己在typeAlias元素中進行定義了,這些别名稱作使用者自定義别名。
2、系統定義别名
系統定義别名見下表。其中,對于支援數組類型的,在其别名後加"[]"即可表示對應的數組類型别名。
3、使用者自定義别名
每個應用中,通常會定義屬于該應用特有的類型,于是MyBatis架構允許使用者自己定義類型的别名。方法很簡單,使用typeAlias子元素的alias和type屬性即可,示例如下:
上述的配置方式雖然簡單,但需要配置的類型很多時,這種配置方式會顯得很繁瑣。于是MyBatis架構便提供了自動掃描功能。其對應的配置方法也很簡單,首先使用package子元素的name屬性制定對應的包,然後在需要定義别名的類上使用注解Alias即可。如下:<typeAliases> <typeAlias alias="role" type="com.zzq.model.Role"/> </typeAliases>
<typeAliases> <package name="com.zzq.model"/> </typeAliases>
package com.zzq.model; @Alias("role") public class Role{ //code }
注:通過package子元素指定要掃描的包,但Alias注解并不是必須的,因為在掃描的過程中,如果使用了Alias注解,會使用其value值來定義别名,否則将類名首字母小寫後作為别名。
注:要避免别名的重複。
郵箱:[email protected]
參考資料:《深入淺出MyBatis技術原理與實踐》--楊開振