XMLMapperBuilder
介绍
XMLMapperBuilder类继承自BaseBuilder类,该类也使用了建造者设计模式。XMLMapperBuilder类的主要作用是解析xxxMapper.xml配置文件中用户的配置,如下图所示。
mybatis-3-mapper.dtd文件中对于mapper节点的定义如下:
XMLMapperBuilder类的核心功能就是解析<mapper></mapper>
标签中配置的内容。
字段
XMLMapperBuilder类中定义的字段如下
//xpath解析器,用于解析用于配置的xml
private final XPathParser parser;
//Mapper建造者助手,一个小工具
private final MapperBuilderAssistant builderAssistant;
//sql片段集合,key为sql片段的namespace+id,value为对应的XNode节点
private final Map<String, XNode> sqlFragments;
//xml配置的资源路径
private final String resource;
构造函数
除了两个已经过时的方法外,所有的构造函数都通过重载调用了最后一个构造函数
@Deprecated
public XMLMapperBuilder(Reader reader, Configuration configuration, String resource, Map<String, XNode> sqlFragments, String namespace) {
this(reader, configuration, resource, sqlFragments);
this.builderAssistant.setCurrentNamespace(namespace);
}
@Deprecated
public XMLMapperBuilder(Reader reader, Configuration configuration, String resource, Map<String, XNode> sqlFragments) {
this(new XPathParser(reader, true, configuration.getVariables(), new XMLMapperEntityResolver()),
configuration, resource, sqlFragments);
}
public XMLMapperBuilder(InputStream inputStream, Configuration configuration, String resource, Map<String, XNode> sqlFragments, String namespace) {
this(inputStream, configuration, resource, sqlFragments);
//给builderAssistant设置命名空间
this.builderAssistant.setCurrentNamespace(namespace);
}
public XMLMapperBuilder(InputStream inputStream, Configuration configuration, String resource, Map<String, XNode> sqlFragments) {
this(new XPathParser(inputStream, true, configuration.getVariables(), new XMLMapperEntityResolver()),
configuration, resource, sqlFragments);
}
//保存全局的配置,并创建一个BuilderAssistant实例,便于后续使用
private XMLMapperBuilder(XPathParser parser, Configuration configuration, String resource, Map<String, XNode> sqlFragments) {
super(configuration);
//构造一个builderAssistant实例,方便后面解析
this.builderAssistant = new MapperBuilderAssistant(configuration, resource