189 8069 5689

Mybatis源码分析[02.XMLConfigBuilder]-创新互联

// BaseBuilder属性

public abstract class BaseBuilder {
  //需要配置,类型别名注册,类型处理器注册3个东西
  protected final Configuration configuration;
  protected final TypeAliasRegistry typeAliasRegistry;
  protected final TypeHandlerRegistry typeHandlerRegistry;
}

public class XMLConfigBuilder extends BaseBuilder{},可见XMLConfigBuilder继承自BaseBuilder

成都创新互联公司从2013年开始,是专业互联网技术服务公司,拥有项目成都做网站、网站建设、外贸营销网站建设网站策划,项目实施与项目整合能力。我们以让每一个梦想脱颖而出为使命,1280元伍家岗做网站,已为上家服务,为伍家岗各地企业和个人服务,联系电话:18982081108
// XMLConfigBuilder属性
public class XMLConfigBuilder extends BaseBuilder {

  //是否已解析
  private boolean parsed;
  // XPath解析器
  private XPathParser parser;

  // 当前环境
  private String environment;
}

SqlSessionFactoryBuilder调用XMLConfigBuilder的parse()函数

//   
//   
//   
//   
//   
//   
//   
//   
//   
//   
//   
//   
//   
//  
//   
//   
//   
//  

  //解析配置
  public Configuration parse() {
    //如果已经解析过了,报错
    if (parsed) {
      throw new BuilderException("Each XMLConfigBuilder can only be used once.");
    }
    parsed = true;

    //根节点是configuration
    parseConfiguration(parser.evalNode("/configuration"));
    return configuration;
  }

通过源码可以看到parse()函数实际上是调用的parseConfiguration()函数,内部实现如下:

private void parseConfiguration(XNode root) {
  try {
    //分步骤解析
    //issue #117 read properties first
    //1.properties
    propertiesElement(root.evalNode("properties"));
    //2.类型别名
    typeAliasesElement(root.evalNode("typeAliases"));
    //3.插件
    pluginElement(root.evalNode("plugins"));
    //4.对象工厂
    objectFactoryElement(root.evalNode("objectFactory"));
    //5.对象包装工厂
    objectWrapperFactoryElement(root.evalNode("objectWrapperFactory"));
    //6.设置
    settingsElement(root.evalNode("settings"));
    // read it after objectFactory and objectWrapperFactory issue #631
    //7.环境
    environmentsElement(root.evalNode("environments"));
    //8.databaseIdProvider
    databaseIdProviderElement(root.evalNode("databaseIdProvider"));
    //9.类型处理器
    typeHandlerElement(root.evalNode("typeHandlers"));
    //10.映射器
    mapperElement(root.evalNode("mappers"));
  } catch (Exception e) {
    throw new BuilderException("Error parsing SQL Mapper Configuration. Cause: " + e, e);
  }
}

以上函数为mybatis对于配置文件的关键节点进行解析处理.

  • propertiesElement(XNode context)
//
//    
//    
//
  • typeAliasesElement(XNode context)
//
//  
//  
//  
//  
//  
//  
//
  • pluginElement(XNode context)
  //MyBatis 允许你在某一点拦截已映射语句执行的调用。默认情况下,MyBatis 允许使用插件来拦截方法调用
//
//  
//    
//  
//
  • objectFactoryElement(XNode context)
//
//  
//
  • objectWrapperFactoryElement(XNode context)
  • settingsElement(XNode context)
//
//  
//  
//  
//  
//  
//  
//  
//  
//  
//  
//  
//  
//  
//
  • environmentsElement(XNode context)
//  
//    
//      
//        
//      
//      
//        
//        
//        
//        
//      
//    
//  
  • databaseIdProviderElement(XNode context)
//  
//    
//            
//    
//  
  • typeHandlerElement(XNode context)
//  
//    
//  
  • mapperElement(XNode context)
//  1.使用类路径
//  
//    
//    
//    
//  
//
//  2.使用绝对url路径
//  
//    
//    
//    
//  
//
//  3.使用java类名
//  
//    
//    
//    
//  
//
//  4.自动扫描包下所有映射器
//  
//    
//  

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


当前文章:Mybatis源码分析[02.XMLConfigBuilder]-创新互联
文章链接:http://cdxtjz.com/article/hcpps.html

其他资讯