이전 글 "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 시리즈에 대한 심층 소개입니다(4)---typeAliases 별칭(mybatis 소스 코드)의 세부 구성에 대한 자세한 내용은 PHP 중국어 웹사이트(www)를 참고하세요. .php.cn)!