mybatis typeAliases

typeAliases 别名

由于类的全限定名很长,需要大量使用时,总是不大方便,所以mybatis提供了别名方式来解决这个问题。在Mybatis中别名由TypeAliasRegistry去定义。值得注意的是,在mybatis中别名不区分大小写
还记得在此前的文章中提供的mybatis实例中

 <select id="findRoles" parameterType="string" resultType="role">

其中的parameterType和resultType中的值其实都是别名。mybatis初始化的时候,提供提供了一些别名:
1. 不包括char类型的基本数据类型的别名为 _XXX 例如 _btye , 但是int还有_integer 表示方式。
2. 包装类,String的别名为第一个字母变为小写,例如string 但是Integer还有int表示方式。
3. Date , BigDecimal , Object 的 别名也是第一个字母变为小写。
4. 集合类中提供了 Map , HashMap ,List , ArrayList,Collection 和 Iterator的别名,同样是第一个字母小写。
5. ResultSet的别名为本身,需要特殊记忆。
6. 除了集合类,Object 和ResultSet。其余都可以有数组形式的别名,形式为 别名[] 例如 _int[].
在mybatis中的别名是通过TypeAliasRegistry类注册而来,看一下源码中是如何注册别名的

 public TypeAliasRegistry() {
    registerAlias("string", String.class);
    registerAlias("byte", Byte.class);
    registerAlias("long", Long.class);
    ..............//此后省略
    }

我们可以知道它是通过 registerAlias方法来注册别名。

  public void registerAlias(String alias, Class value) {
    if (alias == null) {
      throw new TypeException("The parameter alias cannot be null");
    }
    // issue #748
    String key = alias.toLowerCase(Locale.ENGLISH);
    if (TYPE_ALIASES.containsKey(key) && TYPE_ALIASES.get(key) != null && !TYPE_ALIASES.get(key).equals(value)) {
      throw new TypeException("The alias '" + alias + "' is already mapped to the value '" + TYPE_ALIASES.get(key).getName() + "'.");
    }
    TYPE_ALIASES.put(key, value);
  }

上面是registerAlias的源码,TYPE_ALIASES是TypeAliasRegistry类中的一个属性,下面是它的实例化代码。

 private final Map<String, Class> TYPE_ALIASES = new HashMap<String, Class>();

由此可知,在mybatis中别名是储存在一个HashMap中。当我们自定义别名时,mybatis会判断别名是否已经被占用。通过判断后,将合法的别名放入这个HashMap中。
我们通常创建别名是下面的这种方式

<typeAliases>
        <typeAlias alias="role" type="lly.mybatis.example.pojo.Role" />
        <typeAlias alias="user" type="lly.mybatis.example.pojo.User" />
    typeAliases>

但是我们还有一种简便的方式,但是别名会默认为类名首字母小写 例如 类名:Role 别名: role

<typeAliases>
        <package name="lly.mybatis.example.pojo"/>
    typeAliases>

当这个路径下有两个类名字一样时,或者你不想使用首字母小写形式,那么可以在pojo对象上添加@Alias(“XXX”) 标签,其中的XXX即你需要重置的别名。

你可能感兴趣的:(Mybatis)