MyBatis之XML解析基類BaseBuilder
BaseBuilder是解析XML檔案的基類
BaseBuilder是一個抽象類,是其它XML解析類的父類,它持有Configuration物件,型別註冊器TypeAliasRegistry及型別處理器註冊物件TypeHandlerRegistry,,mybatis初始始化的過程就是完善Configuration物件中各屬性值的過程。
BaseBuilder的構造方法中要傳入Configuration物件。
public abstract class BaseBuilder { // 持有Configuration,TypeAliasRegistry,TypeHandlerRegistry物件 protected final Configuration configuration; protected final TypeAliasRegistry typeAliasRegistry; protected final TypeHandlerRegistry typeHandlerRegistry; // 構造方法,客戶使用時傳入Configuration物件,從Configuration物件中獲得TypeAliasRegistry,TypeHandlerRegistry物件 // 在解析XML檔案過程中,逐步填充Configuration物件 public BaseBuilder(Configuration configuration) { this.configuration = configuration; this.typeAliasRegistry = this.configuration.getTypeAliasRegistry(); this.typeHandlerRegistry = this.configuration.getTypeHandlerRegistry(); } }
BaseBuilder常見方法:
**protected
protected Object createInstance(String alias) 使用反射獲得別名型別的物件
protected TypeHandler resolveTypeHandler(Class javaType, Class> typeHandlerType) 獲得TypeHandler物件
原始碼如下:
// 獲得別名對應的Class物件,簡單由typeAliasRegistry實現 protected <T> Class<? extends T> resolveAlias(String alias) { return typeAliasRegistry.resolveAlias(alias); } // 根據別名獲得別名對應的物件 protected Object createInstance(String alias) { // 獲得別名對應的型別Class Class<?> clazz = resolveClass(alias); if (clazz == null) { return null; } try { // 獲得預設構造方法物件,並建立物件 return clazz.getDeclaredConstructor().newInstance(); } catch (Exception e) { throw new BuilderException("Error creating instance. Cause: " + e, e); } } // 獲得TypeHandler物件,由typeHandlerRegistry實現 protected TypeHandler<?> resolveTypeHandler(Class<?> javaType, Class<? extends TypeHandler<?>> typeHandlerType) { if (typeHandlerType == null) { return null; } // javaType ignored for injected handlers see issue #746 for full detail TypeHandler<?> handler = typeHandlerRegistry.getMappingTypeHandler(typeHandlerType); if (handler == null) { // not in registry, create a new one handler = typeHandlerRegistry.getInstance(javaType, typeHandlerType); } return handler; }
BaseBuilder類體系結構
子類概述
XMLConfigBuilder解析mybatis配置檔案
XMLMapperBuilder解析mybatis對映檔案
MapperBuilderAssistant:XMLMapperBuilder的幫助類
XMLStatementBuilder解析對映檔案中的sql語句標籤insert|update|delete|select
XMLScriptBuilder SQL語句在XML檔案中,處理動態SQL語句標籤
SQLSourceBuilder:在RawSqlSource使用
,由SqlSessionFactoryBuilder建立,主要方法:
public Configuration parse()
private void parseConfiguration(XNode root) 從根節點開始解析配置檔案,並將解析結果存到Configuration物件中
XMLMapperBuilder解析mybatis對映檔案,主要方法:
public void parse() 入口方法
private void configurationElement(XNode context)解析對映檔案根節點的namespace及所有子節點
MapperBuilderAssistant:XMLMapperBuilder的幫助類
XMLStatementBuilder解析對映檔案中的sql語句標籤insert|update|delete|select,主要方法:
public void parseStatementNode()解析語句節點
XMLScriptBuilder SQL語句在XML檔案中,處理動態SQL語句標籤
SQLSourceBuilder:在RawSqlSource使用,主要方法:
**public SqlSource parse(String originalSql, Class<?> parameterType, Map<String, Object> additionalParameters) **