mybatis源码学习------mapper配置的解析

本文详细介绍了mybatis的XMLMapperBuilder如何解析mapper配置,包括缓存引用配置和缓存配置的解析。解析过程中,XMLMapperBuilder通过CacheRefResolver处理,并利用MapperBuilderAssistant构建缓存。解析完成后,会绑定mapper接口并处理Pending集合,确保所有配置正确无遗漏。
摘要由CSDN通过智能技术生成

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
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值