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使用
,

浙公网安备 33010602011771号