Maison > Java > javaDidacticiel > le corps du texte

Apprentissage du code source MyBatis Création de SqlSession

PHP中文网
Libérer: 2017-06-22 11:44:35
original
1202 Les gens l'ont consulté

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");
Copier après la connexion

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);
  }
Copier après la connexion

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();
    }
  }
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal