小程序原生组件—提升你的小程序体验
607
2022-10-23
聊聊Mybatis的类型转换的别名管理
@[TOC]
聊聊Mybatis的类型转换的别名管理
用过mybatis框架的都知道,通过<typeAlias>标签可以使用别名来替代完整的类名,实现这个功能的类在于TypeAliasRegistry
可以根据@Alias注解来获取别名,完成别名和类的注册
对应方法是registerAliases():
别名注册
TypeAliasRegistry的registerAliases()方法:
public void registerAliases(String packageName, Class> superType) {
ResolverUtil
查找指定包下所有的superType类型 不是内部类、接口以及抽象类的话调用registerAlias()方法,这个方法里获取类的名称,然后获取类中@Alias注解的value值,然后调用registerAlias(alias, type);来进行注册。
具体注册
注册方法registerAlias():
public void registerAlias(String alias, Class> value) { if (alias == null) { // 传入的别名为null,直接返回false throw new TypeException("The parameter alias cannot be null"); } String key = alias.toLowerCase(Locale.ENGLISH); if (typeAliases.containsKey(key) && typeAliases.get(key) != null && !typeAliases.get(key).equals(value)) { throw new TypeException("The alias '" + alias + "' is already mapped to the value '" + typeAliases.get(key).getName() + "'."); } typeAliases.put(key, value); }
首先会将别名全部转为小写,然后把别名和类的映射关系保存到typeAliases集合中,TypeAliasRegistry的构造方法全部调用这个方法进行注册
总结
这就是Mybatis的类型转换的别名功能的实现,主要的类就是TypeAliasRegistry,涉及的方法主要是registerAlias()方法,别名可以指定别名和对应的类来进行注册,也可以通过包扫描所有的类来进行注册,所谓注册就是放到了一个map中: Map<String, Class<?>> typeAliases = new HashMap<>();,大体内容就是这些,TypeAliasRegistry类中的registerAlias()有很多重载的实现,我们在阅读源码的时候需要注意一下,理顺方法和功能,这样才不会看到源码就头疼。今天的mybatis的类型转换模块的源码就分析到这里了,下篇文章我们会讲述mybatis的其他模块的源码内容。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~