Mybatis系列九:Mybatis配置问价加载解析总结

Mybatis系列九:Mybatis配置问价加载解析总结

Mybatis系列一:构建SqlSessionFactory》
《Mybatis系列二:MetaClass解析Class元数据》
《Mybatis系列三:类型别名、类型解析器的注册》
《Mybatis系列四:XMLMapperBuilder解析XL配置文件》
《Mybatis系列五:MapperRegistry注册并解析Mapper Class》
《Mybatis系列六:MapperAnnotationBuilder解析Mapper Class》
《Mybatis系列七:XMLStatementBuilder创建MappedStatement》
《Mybatis系列八:SqlSource生成运行时SQL》
前八篇文章对Mybatis加载XML配置文件做了分析,现做一个总结概括,了解每个组件作用以及相互间配合完成整个XML解析。

组件名称依赖组件描述
Configuration配置文件Mybatis内部表示
TypeAliasRegistry类型别名注册表
TypeHandlerRegistry类型处理器注册表
SqlSessionFactoryBuilderXMLConfigBuilder DefaultSqlSessionFactory根据Mybatis配置文件或Configuration创建SqlSessionFactory
XMLConfigBuilderXMLMapperBuilder Configuration加载Mybatis配置文件创建Configuration,使用XMLMapperBuilder解析Mapper XML文件。使用MetaClass 反射读取Configuration元数据,判断settings标签配置的属性是否有效。
XMLMapperBuilderXMLStatementBuilder MapperBuilderAssistant MapperRegistry解析Mapper XML文件中各标签,使用XMLStatementBuilder解析select/insert/update/delet标签,使用MapperBuilderAssistant创建并注册,命名空间解析为Mapper接口注册到Configuration#mapperRegistry中。
XMLStatementBuilder解析select/insert/update/delet标签,创建MappedStatement注册到Configuration#mappedStatements中。
MapperRegistryMapperProxyFactoryMapper接口注册表,注册Mapper接口时先给Mapper接口绑定MapperProxyFactory,再使用MapperAnnotationBuilder解析Mapper接口中有SQL注解的方法。
MapperProxyFactorynewInstance方法创建Mapper接口的代理MapperProxy
MapperProxyMapperMethod负责代理Mapper接口的所有方法,每个方法对应一个MapperMethod,处理调用请求
MapperMethodMappedStatement是一个连接Mapper接口和MappedStatement的桥梁。根据Mapper接口和当前调用方法定位到MappedStatement,获取MappedStatement#id,在调用SqlSession方法时传入这个ID,从而可以执行MappedStatement。
MapperAnnotationBuilderXMLMapperBuilder MappedStatement使用XMLMapperBuilder扫描同名Mapper XML文件。扫描Mapper接口中有SQL注解的方法,每个有SQL注解的方法创建并注册MappedStatement。如果是@SelectProvider注解创建ProviderSqlSource;如果是@Select注解,则根据LanguageDriver创建相应的SqlSource。
MappedStatementMapper XML文件中的select/insert/update/elet标签或者Mapperjie口中有SQL注解的方法,创建一个MappedStatement封装SQL信息。
LanguageDriverRawLanguageDriver XMLLanguageDriver解析SQL脚本语言,有RawLanguageDriver、XMLLanguageDriver两种。RawLanguageDriver只能创建RawSqlSource,XMLLanguageDriver可以创建RawSqlSource、DynamicSqlSource。
DynamicSqlSourceSQL语句有${param0}(文本替换,可能是一段SQL)或者使用了if/where(运行时决定是否拼接SQL片段)等节点需要运行时才能解析出要执行的SQL。
RawSqlSource使用了#{param1}占位符或者没有使用,就是一个完整SQL,不需要运行时解析得到SQL。

Mybatis配置文件解析组件
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值