Heim  >  Artikel  >  Java  >  MyBatis-Quellcode lernt SqlSession-Erstellung

MyBatis-Quellcode lernt SqlSession-Erstellung

PHP中文网
PHP中文网Original
2017-06-22 11:44:351160Durchsuche

MyBatis kapselt den JDBC-Code zum Betreiben der Datenbank und führt SQL-Anweisungen über SqlSession aus. Schauen wir uns also zunächst an, wie MyBatis SqlSession erstellt.
Wenn MyBatis nicht im Frühjahr gehostet wird, werden die Datenbankkonfigurationsinformationen in der Datei Configuration.xml konfiguriert. Der Testcode lautet wie folgt:

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

Mybatis Erstellen Sie eine SqlSessionFactoryBuilder.build(Reader-Reader)-Methode. Der Parameter der Build-Methode ist gerade das Reader-Objekt, das alle Informationen der Konfigurationsdatei enthält. Die Build-Methode verfügt über viele überladene Methoden 🎜>

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);
  }
Gibt schließlich ein DefaultSqlSessionFactory-Objekt zurück und gibt ein SqlSession-Objekt über openSession() von DefaultSqlSessionFactory zurück

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();
    }
  }
Wie Sie sehen können, wird schließlich eine DefaultSqlSession zurückgegeben, bei der es sich um das SelectOne(…) selectList(…)

selectMap(…) update(…) handelt, und andere Methoden in DefaultSqlSession sind die Methoden, die SQL tatsächlich ausführen.

Die spezifische Ausführung wird vom Executor-Objekt ausgeführt



Das obige ist der detaillierte Inhalt vonMyBatis-Quellcode lernt SqlSession-Erstellung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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