Maison  >  Article  >  Java  >  Apprentissage du code source MyBatis Création de SqlSession

Apprentissage du code source MyBatis Création de SqlSession

PHP中文网
PHP中文网original
2017-06-22 11:44:351162parcourir

MyBatis encapsule le code JDBC pour faire fonctionner la base de données et exécute les instructions SQL via SqlSession. Voyons d'abord comment MyBatis crée SqlSession.
Lorsque MyBatis n'est pas hébergé sur Spring, les informations de configuration de la base de données sont configurées dans le fichier Configuration.xml. Le code de test est le suivant

1 Reader reader =  Resources.getResourceAsReader("Configuration.xml");

Mybatis Créez une méthode SqlSessionFactoryBuilder.build(Reader reader). Le paramètre de la méthode build est l'objet lecteur à l'instant, qui contient toutes les informations du fichier de configuration. La méthode build a de nombreuses méthodes surchargées

<.>

public SqlSessionFactory build(Reader reader, String environment, Properties properties) {
    try {
        //委托XMLConfigBuilder来解析xml文件,并构建
      XMLConfigBuilder parser = new XMLConfigBuilder(reader, environment, properties);
      return build(parser.parse());
    } catch (Exception e) {
      throw ExceptionFactory.wrapException("Error building SqlSession.", e);
    } finally {
      ErrorContext.instance().reset();
      try {
        reader.close();
      } catch (IOException e) {
  }
public SqlSessionFactory build(Configuration config) {
    return new DefaultSqlSessionFactory(config);
  }

Renvoie enfin un objet DefaultSqlSessionFactory et renvoie un objet SqlSession via openSession() de DefaultSqlSessionFactory

public SqlSession openSession() {
    return openSessionFromDataSource(configuration.getDefaultExecutorType(), null, false);
  }
private SqlSession openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit) {
    Transaction tx = null;
    try {
      final Environment environment = configuration.getEnvironment();
      final TransactionFactory transactionFactory = getTransactionFactoryFromEnvironment(environment);
      //通过事务工厂来产生一个事务
      tx = transactionFactory.newTransaction(environment.getDataSource(), level, autoCommit);
      //生成一个执行器(事务包含在执行器里)
      final Executor executor = configuration.newExecutor(tx, execType);
      //然后产生一个DefaultSqlSession
      return new DefaultSqlSession(configuration, executor, autoCommit);
    } catch (Exception e) {
      //如果打开事务出错,则关闭它
      closeTransaction(tx); // may have fetched a connection so lets call close()
      throw ExceptionFactory.wrapException("Error opening session.  Cause: " + e, e);
    } finally {
      //最后清空错误上下文
      ErrorContext.instance().reset();
    }
  }

comme vous pouvez le voir Enfin, une DefaultSqlSession est renvoyée, qui est l'objet SqlSession SelectOne(…) selectList(…)

selectMap(…) update(…) et d'autres méthodes dans DefaultSqlSession sont les méthodes qui exécutent réellement SQL.

L'exécution spécifique est effectuée par l'objet exécuteur

.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

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