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 包
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章