mybatis typeAliases

本文详细介绍了MyBatis中的别名机制,包括默认别名的生成规则、如何自定义别名以及别名在XML配置文件中的使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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即你需要重置的别名。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值