Maison >Java >javaDidacticiel >Une introduction approfondie à la série Mybatis (2) --- Introduction à la configuration (code source mybatis)

Une introduction approfondie à la série Mybatis (2) --- Introduction à la configuration (code source mybatis)

黄舟
黄舟original
2017-03-02 10:34:221269parcourir

Dans l'article précédent, "Série Mybatis en termes simples (1) --- Premiers pas avec Mybatis", j'ai écrit une démo pour refléter brièvement le processus de Mybatis. Cette fois, nous présenterons brièvement le fichier de configuration de Mybatis :

Dans le dernier exemple, nous avons utilisé SqlSessionFactoryBuilder pour créer SqlSessionFactory. Ensuite, nous commencerons par SqlSessionFactoryBuilder. Voyons d'abord comment est le code source. implémenté :

Extrait de code source de SqlSessionFactoryBuilder :

 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 }


Grâce au code source, nous pouvons voir que SqlSessionFactoryBuilder utilise XMLConfigBuilder pour analyser le fichier de configuration mybatis que nous transmis, comme suit Ensuite, jetez un œil à la partie XMLConfigBuilder du code source :

 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 }


Grâce au code source ci-dessus, nous pouvons voir que dans la configuration fichier de mybatis :

1. Le nœud de configuration est le nœud racine.

2. Sous le nœud de configuration, nous pouvons configurer 10 sous-nœuds, à savoir : propriétés, typeAliases, plugins, objectFactory, objectWrapperFactory, paramètres, environnements, databaseIdProvider, typeHandlers, mappers.

Cet article ne présentera que ces contenus en premier. Les articles suivants analyseront et analyseront le code source des nœuds les plus importants parmi les 10 nœuds afin de voir lors de l'analyse de ces nœuds ce qui a été fait exactement. .

Ce qui précède est une introduction approfondie à la série Mybatis (2) --- Introduction à la configuration (code source mybatis Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php. cn) !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn