一起来学习Mybatis(四)-配置文件之typeAliases 元素

前言


  上篇文章分析了MyBatis配置文件中的<properties>元素《一起来学习Mybatis(三)-配置文件之properties 属性》,今天再来了解一个简单却很有用的元素<typeAliases >


分析


  typeAliases即是类型别名,是为 Java 类型设置一个短的名字。它只在 XML 配置文件中起作用,来缩减长长的类型名称。比如:

<select id="selectUserByID" resultType="com.test.entity.UserEntity">

  这里的resultType需要使用包含完全路径的类名,如果使用typeAliases申明类型别名,会非常简单、方便。

<typeAliases>
  <typeAlias alias="User" type="com.test.entity.UserEntity"/>
</typeAliases>

  SQL Mapper只需要:

<select id="selectUserByID" resultType="User">

  看到这里,肯定会有疑问:难道类型别名只能一个一个的进行申明吗?如果有很多个岂不是很麻烦。MyBatis为了解决这个问题,还允许指定报名。

<typeAliases>
  <package name="com.test.entity"/>
</typeAliases>

  MyBatis 会在 com.test.entity 包名下面搜索需要的实体类,默认会使用首字母小写的类名来作为它的别名。SQL Mapper可以这样用:

<select id="selectUserByID" resultType="userEntity">

  当然,除了在XML配置文件中配置别名,还可以使用注解的方式为POJO设置别名(在使用了package元素的情况下,注解方式配置的别名优先):

import org.apache.ibatis.type.Alias;
@Alias("User")
public class UserEntity {}
源码


  XML文件中的typeAliases元素是由 typeAliasesElement方法来解析的。

typeAliasesElement(root.evalNode("typeAliases"));

  进入typeAliasesElement方法体:

private void typeAliasesElement(XNode parent) {
    if (parent != null) {
      for (XNode child : parent.getChildren()) {
        //解析package元素
        if ("package".equals(child.getName())) {
          String typeAliasPackage = child.getStringAttribute("name");
          configuration.getTypeAliasRegistry().registerAliases(typeAliasPackage);
        } else {
          //解析typeAlias元素
          String alias = child.getStringAttribute("alias");
          String type = child.getStringAttribute("type");
          try {
            Class<?> clazz = Resources.classForName(type);
            if (alias == null) {
              typeAliasRegistry.registerAlias(clazz);
            } else {
              typeAliasRegistry.registerAlias(alias, clazz);
            }
          } catch (ClassNotFoundException e) {
            throw new BuilderException("Error registering typeAlias for '" + alias + "'. Cause: " + e, e);
          }
        }
      }
    }
  }
小结


  MyBatis已经为许多常见的 Java 类型内建了相应的类型别名。它们都是大小写不敏感的,具体列表可以查看MyBatis文档

评论 19
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值