在正式介绍 <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 |