Mybatis初始化

2018-07-02  本文已影响0人  圣村的希望

Mybatis初始化流程就是组装Configuration对象的过程,在这个过程中主要就是初始化环境变量和初始化Mapper.xml的映射。大致流程如下:

  1. SqlSessionFactoryBuilder.build(Reader reader):根据mybatis-config.xml配置文件简历SqlSessionFactory的时候会去触发生成XMLConfigBuilder对象解析配置并生成SqlSessionFactory。

    public class SqlSessionFactoryBuilder {
    public SqlSessionFactory build(Reader reader, String environment, Properties properties) {
    //生成配置解析对象
    XMLConfigBuilder parser = new XMLConfigBuilder(reader, environment, properties);
    //根据配置,解析配置生成SqlSessionFactory对象
    return build(parser.parse());
    }

     //创建SqlSessionFactory对象
     public SqlSessionFactory build(Configuration config) {
     return new DefaultSqlSessionFactory(config);
    

    }
    }

  2. XMLConfigBuilder.parse():开始了解析config配置文件并且初始化。

    public Configuration parse() {
    if (parsed) {
    throw new BuilderException("Each XMLConfigBuilder can only be used once.");
    }
    parsed = true;
    //解析config配置文件
    parseConfiguration(parser.evalNode("/configuration"));
    return configuration;
    }

    //解析config配置文件
    private void parseConfiguration(XNode root) {
    try {
    //解析properties文件里面的参数,譬如数据库地址和用户密码这些
    propertiesElement(root.evalNode("properties"));
    //解析mybatis环境参数的配置
    Properties settings = settingsAsProperties(root.evalNode("settings"));
    loadCustomVfs(settings);
    //解析类型别名的配置
    typeAliasesElement(root.evalNode("typeAliases"));
    //解析插件的配置
    pluginElement(root.evalNode("plugins"));
    objectFactoryElement(root.evalNode("objectFactory"));
    objectWrapperFactoryElement(root.evalNode("objectWrapperFactory"));
    reflectorFactoryElement(root.evalNode("reflectorFactory"));
    settingsElement(settings);
    //解析环境的配置,譬如多数据库名称
    environmentsElement(root.evalNode("environments"));
    databaseIdProviderElement(root.evalNode("databaseIdProvider"));
    //解析类型处理器的配置
    typeHandlerElement(root.evalNode("typeHandlers"));
    //mapper.xml文件的解析
    mapperElement(root.evalNode("mappers"));
    } catch (Exception e) {
    throw new BuilderException("Error parsing SQL Mapper Configuration. Cause: " + e, e);
    }
    }

下面挑几个关键的配置解析进行讲解:

上一篇下一篇

猜你喜欢

热点阅读