(小黑看源码)mybatis之package别名映射

作为一个初学者,刚接触mybaits时,就好奇配置文件到底时如何通过一个package标签,为该包下面所有的实体类绑定别名,即便包内还有层级,也同样会映射。

mybatis启动首先需要加载配置文件,这个过程会在SqlSessionFactoryBuilder().build()方法中执行。

        点入build()方法进入源码,里面创建了一个XMLConfigBuilder 的实例,完成并对配置的xml 的解析。并调用其parse()方法根据配置封装需要的类。

点入parse()方法,内部封装了一个parseConfiguration()方法用来装载需要的类。

该方法内部配置了mybatis运行时所需要的数据并封装在Configuration对象中。

 找到配置别名的方法,通过字符串,读取已经解析好,封装在XNode对象中的数据。

也就是在mybatis-config.xml中配置的<typeAliases>标签名

 在方法内用循环的方式取出<typeAliases>下的子节点数据。

当标签名为package时根据其包名路径调用registerAliases()方法

 进入registerAliases()方法 观察resolverUtil.find()方法,该方法装载包下所有类的class实例。

 

 resolverUtil.find()方法内部主要是通过调用 VFS.getInstance().list(path)扫描包路径下所有文件的路径。

 判断为Java编译文件的则执行addIfMatching()方法

 addIfMatching()方法内部主要使用反射技术,通过类的路径,获取该类的class实例,并添加到set集合中。

 获取类的class实例集合后,回到registerAliases()方法。使用foreach为class实例执行

registerAlias()的重载方法

 该方法内部则创建了Alias实例,对类的Class实例进行封装。

 并添加到mybatis的数据类型集合中。

 该集合中封装着mybatis运行所需要的基础类的别名,以及在mybatis-config配置的别名。

通过包的路径读取包下所有的文件路径,根据文件路径通过反射技术获取类的class实例,别名绑定类的class实例,以支持mybatis在运行中实现各种需求。

以上,便是这次读mybatis源码的收获。

 


                
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值