Heim  >  Artikel  >  Java  >  Eine ausführliche Erklärung der Mybatis-Reihe (2) --- Einführung in die Konfiguration (Mybatis-Quellcode)

Eine ausführliche Erklärung der Mybatis-Reihe (2) --- Einführung in die Konfiguration (Mybatis-Quellcode)

黄舟
黄舟Original
2017-03-02 10:34:221195Durchsuche

Im vorherigen Artikel „Mybatis-Serie in einfachen Worten (1) – Erste Schritte mit Mybatis“ habe ich eine Demo geschrieben, um den Prozess von Mybatis kurz darzustellen. Dieses Mal stellen wir kurz die Konfigurationsdatei von Mybatis vor:

Im letzten Beispiel haben wir SqlSessionFactoryBuilder verwendet, um SqlSessionFactory zu erstellen. Schauen wir uns zunächst den Quellcode an implementiert:

SqlSessionFactoryBuilder-Quellcode-Snippet:

 1 public class SqlSessionFactoryBuilder { 
 2  
 3   //Reader读取mybatis配置文件,传入构造方法 
 4   //除了Reader外,其实还有对应的inputStream作为参数的构造方法, 
 5   //这也体现了mybatis配置的灵活性 
 6   public SqlSessionFactory build(Reader reader) { 
 7     return build(reader, null, null); 
 8   } 
 9 
 10   public SqlSessionFactory build(Reader reader, String environment) {
 11     return build(reader, environment, null);
 12   }
 13   
 14   //mybatis配置文件 + properties, 此时mybatis配置文件中可以不配置properties,也能使用${}形式
 15   public SqlSessionFactory build(Reader reader, Properties properties) {
 16     return build(reader, null, properties);
 17   }
 18  
 19   //通过XMLConfigBuilder解析mybatis配置,然后创建SqlSessionFactory对象
 20   public SqlSessionFactory build(Reader reader, String environment, Properties properties) {
 21     try {
 22       XMLConfigBuilder parser = new XMLConfigBuilder(reader, environment, properties);
 23       //下面看看这个方法的源码
 24       return build(parser.parse());
 25     } catch (Exception e) {
 26       throw ExceptionFactory.wrapException("Error building SqlSession.", e);
 27     } finally {
 28       ErrorContext.instance().reset();
 29       try {
 30         reader.close();
 31       } catch (IOException e) {
 32         // Intentionally ignore. Prefer previous error.
 33       }
 34     }
 35   }
 36 
 37   public SqlSessionFactory build(Configuration config) {
 38     return new DefaultSqlSessionFactory(config);
 39   }
 40 
 41 }


Durch den Quellcode können wir sehen, dass SqlSessionFactoryBuilder XMLConfigBuilder verwendet, um die von uns erstellte Mybatis-Konfigurationsdatei zu analysieren wie folgt übergeben Schauen Sie sich als Nächstes den XMLConfigBuilder-Teil des Quellcodes an:

 1 /** 
 2  * mybatis 配置文件解析 
 3  */ 
 4 public class XMLConfigBuilder extends BaseBuilder { 
 5   public XMLConfigBuilder(InputStream inputStream, String environment, Properties props) { 
 6     this(new XPathParser(inputStream, true, props, new XMLMapperEntityResolver()), environment, props); 
 7   } 
 8  
 9   private XMLConfigBuilder(XPathParser parser, String environment, Properties props) {
 10     super(new Configuration());
 11     ErrorContext.instance().resource("SQL Mapper Configuration");
 12     this.configuration.setVariables(props);
 13     this.parsed = false;
 14     this.environment = environment;
 15     this.parser = parser;
 16   }
 17   
 18   //外部调用此方法对mybatis配置文件进行解析
 19   public Configuration parse() {
 20     if (parsed) {
 21       throw new BuilderException("Each XMLConfigBuilder can only be used once.");
 22     }
 23     parsed = true;
 24     //从根节点configuration
 25     parseConfiguration(parser.evalNode("/configuration"));
 26     return configuration;
 27   }
 28 
 29   //此方法就是解析configuration节点下的子节点
 30   //由此也可看出,我们在configuration下面能配置的节点为以下10个节点
 31   private void parseConfiguration(XNode root) {
 32     try {
 33       propertiesElement(root.evalNode("properties")); //issue #117 read properties first
 34       typeAliasesElement(root.evalNode("typeAliases"));
 35       pluginElement(root.evalNode("plugins"));
 36       objectFactoryElement(root.evalNode("objectFactory"));
 37       objectWrapperFactoryElement(root.evalNode("objectWrapperFactory"));
 38       settingsElement(root.evalNode("settings"));
 39       environmentsElement(root.evalNode("environments")); // read it after objectFactory and objectWrapperFactory issue #631
 40       databaseIdProviderElement(root.evalNode("databaseIdProvider"));
 41       typeHandlerElement(root.evalNode("typeHandlers"));
 42       mapperElement(root.evalNode("mappers"));
 43     } catch (Exception e) {
 44       throw new BuilderException("Error parsing SQL Mapper Configuration. Cause: " + e, e);
 45     }
 46   }
 47 }


Durch den obigen Quellcode können wir das in der Konfiguration sehen Datei von mybatis:

1. Der Konfigurationsknoten ist der Wurzelknoten.

2. Unter dem Konfigurationsknoten können wir 10 Unterknoten konfigurieren, nämlich: Eigenschaften, TypeAliases, Plugins, ObjectFactory, ObjectWrapperFactory, Einstellungen, Umgebungen, DatabaseIdProvider, TypeHandlers, Mapper.

In diesem Artikel werden diese Inhalte zunächst nur vorgestellt. In den folgenden Artikeln wird der Quellcode der wichtigeren Knoten unter den 10 Knoten analysiert und analysiert, um beim Parsen dieser Knoten zu sehen, was genau getan wurde .

Das Obige ist eine ausführliche Einführung in die Mybatis-Reihe (2) --- Konfigurationseinführung (Mybatis-Quellcode). Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php). cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn