Mybatis de análisis de código fuente (b): SqlSession

Mybatis proceso:

Aquí Insertar imagen Descripción

2. Obtener El SqlSession

  • Retire Exceutor (actuador) del archivo de configuración, llame openSessionFromDataSource ()
    Aquí Insertar imagen Descripción
  • Los nuevos tipos de actuadores por defecto: Simple
    Aquí Insertar imagen Descripción
  • Hay tres tipos de actuadores:
    Aquí Insertar imagen Descripción
  • nota:
    Aquí Insertar imagen Descripción
	executor = (Executor) interceptorChain.pluginAll(executor);

Ejecutor para interceptar mejorado patrones de diseño utilizados aquí era el patrón decorador

  • A continuación, regrese: DefaultSqlSession (configuratioin, Ejecutor, asuntos de política)
    la ejecución Ejecutor de CRUD configuratioinAquí Insertar imagen Descripción

Resumen: El proceso de obtener la SqlSession

  • En primer lugar openSession llamada SqlSessionFactory ()
    SqlSession session = sessionFactory.openSession();
    
  • Entonces openSession () llamada openSessionFromDataSource ()
     @Override
    public SqlSession openSession() {
      return openSessionFromDataSource(configuration.getDefaultExecutorType(), null, false);
    }
    
  • Volver objetos DefaultSqlSession , nota DefaultSqlSession incluyen: (la configuración, Ejecutor, asuntos)
    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);
      //创建一个新的执行器,类型为execType
      final Executor executor = configuration.newExecutor(tx, execType);
      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();
    }
    }
    
Publicado 47 artículos originales · ganado elogios 34 · vistas 8873

Supongo que te gusta

Origin blog.csdn.net/weixin_42893085/article/details/105181855
Recomendado
Clasificación