9.2.4 typeAliases标签

9.2 深入Mybatis配置文件 9.2.4 typeAliases标签

MyBatis的配置文件包含了影响MyBatis行为的信息。文档的结构如下:

  • 顶层configuration配置
  • properties属性
  • settings设置
  • typeAliases类型命名
  • typeHandlers类型处理器
  • objectFactory对象工厂
  • plugins插件
  • environments环境
  • environment环境变量
  • transactionManager事务管理器
  • dataSource数据源
  • databaseldProvider数据库厂商标识
  • mappers映射器

类型别名的作用

类型别名用来减少类完全限定名的冗余,可以为Java类型设置的一个短的名字。它只和XML配置有关。存在的意义仅在于用来减少类完全限定名的冗余。

实例 为类的完全限定名取别名

mybatis-config.xml中的配置如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
......
<!-- 设置类别名 -->
<typeAliases>
<typeAlias
alias="user"
type="org.fkit.domain.User"/>
</typeAliases>
......
</configuration>

org.fkit.domain.User类设置别名为user。当在MyBatis配置文件中这样配置后,在其他Mappper XML配置文件中,任何使用org.fkit.domain.User的地方,就可以使用user替代。

在其他MyBatis的xml中使用别名

UserMapper.xml文件中使用user来替代全限定名org.fkit.domain.User

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace指用户自定义的命名空间。 -->
<mapper namespace="org.fkit.mapper.UserMapper">
<!-- 以前的配置 -->
<!--
<insert
id="saveUser"
parameterType="org.fkit.domain.User"
useGeneratedKeys="true"
keyProperty="id"> insert into tb_user(name,sex,age) values(#{name},#{sex},#{age})
</insert> -->

<!--
parameterType="user"表示该插入语句需要一个user对象作为参数
这个user对象就是org.fkit.domain.User的别名
-->
<insert
id="saveUser"
parameterType="user"
useGeneratedKeys="true"
keyProperty="id"> insert into tb_user(name,sex,age) values(#{name},#{sex},#{age})
</insert>
......
</mapper>

实例 给一个包下的类批量取别名

1
2
3
<typeAliases>
<package name="org.fkit.domain"/>
</typeAliases>

每一个在包org.fkit.domain中的JavaBean,在没有注解的情况下,会使用Bean的首字母小写的非限定类名来作为它的别名。比如org.fkit.domain.User的别名为user;若有注解,则别名为其注解值。

1
2
3
4
@Alias("user")
public class User{
...
}

MyBatis默认别名

MyBatis已经为许多常见的Java类型内建了相应的类型别名(见表9.2)。它们都是大小写不敏感的,需要注意的是由基本类型名称重复导致的特殊处理。

引用类型都是其类名的全小写形式

基本数据类型对应的包装类型的别名是基本类型的名称,例如Integer的别名为int,Double的别名为double,ArrayList的别名是arraylist

包装类型的别名 映射的类型
byte Byte
short Short
int Integer
long Long
float Float
double Double
常用引用类型的别名 映射的类型
string String
date Date
bigdecimal BigDecimal
object Object
map Map
hashmap HashMap
list List
arraylist ArrayList
collection Collection
iterator Iterator

基本类型前面多一个下划线

需要注意的是基本数据类型,为了避免和包装类型的别名重名,基本类型的别名前面多了一个下划线,也就是基本数据类型的别名是:下划线基本类型名,例如int类型的别名为_int,double的别名为_double

基本类型的别名 映射的类型
_byte byte
_short short
_int int
_long long
_float float
_double double