>  기사  >  Java  >  Mybatis 시리즈에 대한 심층 설명(4)---typeAliases 별칭의 세부 구성(mybatis 소스 코드)

Mybatis 시리즈에 대한 심층 설명(4)---typeAliases 별칭의 세부 구성(mybatis 소스 코드)

黄舟
黄舟원래의
2017-03-02 10:44:172906검색

이전 글 "Mybatis 시리즈 심층 소개(3)---속성 및 환경 상세 구성(mybatis 소스 코드)"에서는 속성과 환경을 소개했습니다. 이 문서에서는 나머지 구성 노드 중 하나인 typeAliases에 대해 계속해서 설명합니다. typeAliases 노드는 주로 별칭을 설정하는 데 사용됩니다. 실제로 이는 별칭을 구성하면 더 이상 전체 패키지 이름을 지정할 필요가 없으며 별칭도 사용할 수 있습니다.

예: com.demo.entity.UserEntity를 사용할 때 별칭 사용자를 직접 구성할 수 있으므로 나중에 구성 파일에서 com.demo.entity.UserEntity를 사용하려는 경우 직접 사용할 수 있습니다. Just User.

위의 예를 예로 들어 구현하고 typeAliases가 어떻게 구성되어 있는지 살펴보겠습니다.

<configuration>
    <typeAliases>
      <!--
      通过package, 可以直接指定package的名字, mybatis会自动扫描你指定包下面的javabean,
      并且默认设置一个别名,默认的名字为: javabean 的首字母小写的非限定类名来作为它的别名。
      也可在javabean 加上注解@Alias 来自定义别名, 例如: @Alias(user) 
      <package name="com.dy.entity"/>       -->
      <typeAlias alias="UserEntity" type="com.dy.entity.User"/>
  </typeAliases>
  
  ......  
</configuration>

작동하는지 확인하기 위해 다른 테스트 코드를 작성합니다. (저는 의사 코드만 작성했습니다.)

아아아아

===================================================== 소스코드 구분선============================================ ==

위에서는 typeAliases의 사용법을 간략하게 소개합니다. 다음으로 Mybatis의 소스 코드를 살펴보겠습니다.

기존 규칙, xml 구문 분석부터 시작하겠습니다.

Configuration con = sqlSessionFactory.getConfiguration();
Map<String, Class<?>> typeMap = con.getTypeAliasRegistry().getTypeAliases();
for(Entry<String, Class<?>> entry: typeMap.entrySet()) {
    System.out.println(entry.getKey() + " ================> " + entry.getValue().getSimpleName());
}


중요한 소스 코드는 다음과 같습니다.

TypeAliasRegistry:

 1 /** 
 2  * 解析typeAliases节点 
 3  */ 
 4 private void typeAliasesElement(XNode parent) {
 5     if (parent != null) { 
 6       for (XNode child : parent.getChildren()) { 
 7         //如果子节点是package, 那么就获取package节点的name属性, mybatis会扫描指定的package 
 8         if ("package".equals(child.getName())) { 
 9           String typeAliasPackage = child.getStringAttribute("name");
 10           //TypeAliasRegistry 负责管理别名, 这儿就是通过TypeAliasRegistry 进行别名注册, 下面就会看看TypeAliasRegistry源码
 11           configuration.getTypeAliasRegistry().registerAliases(typeAliasPackage);
 12         } else {
 13           //如果子节点是typeAlias节点,那么就获取alias属性和type的属性值
 14           String alias = child.getStringAttribute("alias");
 15           String type = child.getStringAttribute("type");
 16           try {
 17             Class<?> clazz = Resources.classForName(type);
 18             if (alias == null) {
 19               typeAliasRegistry.registerAlias(clazz);
 20             } else {
 21               typeAliasRegistry.registerAlias(alias, clazz);
 22             }
 23           } catch (ClassNotFoundException e) {
 24             throw new BuilderException("Error registering typeAlias for '" + alias + "'. Cause: " + e, e);
 25           }
 26         }
 27       }
 28     }
 29   }

소스 코드에서 볼 수 있듯이 별칭 설정은 매우 간단합니다. Mybatis는 기본적으로 이를 설정합니다. 위 코드에서 볼 수 있는 많은 별칭이 있습니다.

그럼 이 글의 내용은 이렇게 간단합니다. 다음 글에서는 아직 완성되지 않은 구성 노드들에 대해 계속 설명하겠습니다.

위는 Mybatis 시리즈에 대한 심층 소개입니다(4)---typeAliases 별칭(mybatis 소스 코드)의 세부 구성에 대한 자세한 내용은 PHP 중국어 웹사이트(www)를 참고하세요. .php.cn)!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.