在正式介绍 <typeAliases> 标签之前,我们先看一个示例,该实例将 com.hxstrive.mybatis.dynamic_sql.demo1.UserBean 映射成 RESULT_MAP 名称,然后在 <select> 元素中使用,如下:
<!-- 映射结果 --> <resultMap id="RESULT_MAP" type="com.hxstrive.mybatis.dynamic_sql.demo1.UserBean"> <id column="user_id" jdbcType="INTEGER" property="userId" /> <result column="name" jdbcType="VARCHAR" property="name" /> <result column="sex" jdbcType="VARCHAR" property="sex" /> <result column="age" jdbcType="INTEGER" property="age" /> </resultMap>
上面可以看到,type 指定了 JavaBean 完全限定名,这个名称很长,每次都要完整的输入,很是麻烦。因此就出现了 <typeAliases> 标签,该标签用来将给定的实体定义别名,如:将 com.hxstrive.mybatis.dynamic_sql.demo1.UserBean 别名定义为定义为 UserBean。那么映射时就可以使用别名了,如下:
<!-- 映射结果 --> <resultMap id="RESULT_MAP" type="UserBean"> <id column="user_id" jdbcType="INTEGER" property="userId" /> <result column="name" jdbcType="VARCHAR" property="name" /> <result column="sex" jdbcType="VARCHAR" property="sex" /> <result column="age" jdbcType="INTEGER" property="age" /> </resultMap>
<typeAliases> 标签的 DTD 定义如下:
<!ELEMENT typeAliases (typeAlias*,package*)> <!ELEMENT typeAlias EMPTY> <!ATTLIST typeAlias type CDATA #REQUIRED alias CDATA #IMPLIED > <!ELEMENT package EMPTY> <!ATTLIST package name CDATA #REQUIRED >
其中,<typeAliases> 标签允许有一个或多个 <typeAlias> 或 <package> 标签。
<typeAlias> 标签用来为一个 JavaBean 指定别名,type 属性指定 JavaBean 类型,alias 属性指定别名名称。如下:
<typeAliases> <typeAlias alias="UserBean" type="com.hxstrive.mybatis.dynamic_sql.demo1.UserBean" /> </typeAliases>
如果你觉得每个 JavaBean 都需要使用 <typeAlias> 标签进行声明麻烦,可以使用 <package> 标签,该标签将指定一个包名称,然后 MyBatis 自动将该包下面的所有 JavaBean 进行别名声明,其中别名为类名。例如:
<typeAliases> <package name="com.hxstrive.mybatis.dynamic_sql.demo1" /> </typeAliases>
类型别名是为 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>
使用上面配置,“Blog”可以任意用来替代“domain.blog.Blog”所使用的地方。对于普通的 Java 类型,有许多内建的类型别名。它们都是大小写不敏感的,由于重载的名字,要注意原生类型的特殊处理。
| 别名 | 映射的类型 | 
| _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 | 
