mybatis-builder包阅读

builder包主要功能

  • builder包的核心功能很简单,就是解析注解或者解析xml配置文件,将配置汇总到session包的一个大杂烩的类Configuration中(builder下的annotation包是解析注解相关本文不分析);
  • 核心是三个类:XMLConfigBuilder、XMLMapperBuilder、XMLStatementBuilder分别解析mybatis-config.xml、XxxMapper.xml、XxxMapper.xml中的每一个sql语句;
  • 值得注意的是XMLStatementBuilder的parseStatementNode方法调用了scripting包中的XMLScriptBuilder完成整整的sql语句解析(其实是间接通过调用scripting包中的LanguageDriver类调用的)。

builder包主要结构

builder 包

builder包设计模式

  • 装饰设计模式,XMLMapperBuilder、XMLStatementBuilder、MapperBuilderAssistant都继承于BaseBuilder,而且XMLMapperBuilder、XMLStatementBuilder都包含MapperBuilderAssistant,MapperBuilderAssistant是被装饰者,解耦合,被装饰者的变话不影响装饰者的使用;

  • 附上一段源码做参考:

/**
 - @author Clinton Begin
 - BaseBuilder下的每个子类在使用构造器实例化时,必定会调用BaseBuilder的构造方法,这是因为BaseBuilder内部维护着三个属性Configuration,TypeAliasRegistry,TypeHandlerRegistry。Configuration本身是一个"大杂烩",内部维护着各种各样的对象实例。
 - TypeAliasRegistry,TypeHandlerRegistry就是其中两个,事实上,BaseBuilder的这两个实例就是从Configuration获取的,为什么要这样做呢?在编写mybatis配置文件时,有时候需要自定义参数别名和类型处理器,在解析配置文件的过程中,必须将自定义的别名处理器重新放入Configuration中
 */
public abstract class BaseBuilder {
  protected final Configuration configuration;
  protected final TypeAliasRegistry typeAliasRegistry;
  protected final TypeHandlerRegistry typeHandlerRegistry;

  public BaseBuilder(Configuration configuration) {
    this.configuration = configuration;
    this.typeAliasRegistry = this.configuration.getTypeAliasRegistry();
    this.typeHandlerRegistry = this.configuration.getTypeHandlerRegistry();
  }
......
}
  • 附上源码包结构做参考:
    builder 包
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值