>Java >java지도 시간 >SqlSession 생성을 학습하는 MyBatis 소스 코드

SqlSession 생성을 학습하는 MyBatis 소스 코드

PHP中文网
PHP中文网원래의
2017-06-22 11:44:351220검색

MyBatis는 JDBC 코드를 캡슐화하여 데이터베이스를 운영하고 SqlSession을 통해 SQL 문을 실행합니다. 그럼 먼저 MyBatis가 SqlSession을 생성하는 방법을 살펴보겠습니다.
MyBatis가 Spring에 호스팅되지 않은 경우 데이터베이스 구성 정보는 현재 구성 파일의 모든 정보를 포함하는 판독기 개체입니다.

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

마지막으로 DefaultSqlSessionFactory 객체가 반환되고, DefaultSqlSessionFactory의 openSession()을 통해 SqlSession 객체가 반환됩니다.

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);
  }

마지막에 SqlSession 객체인 DefaultSqlSession이 반환되는 것을 볼 수 있습니다. selectList(…)

selectMap(…) update(…) 및 DefaultSqlSession의 다른 메소드는 실제로 SQL을 실행하는 메소드입니다.

특정 실행은 Executor Object에서 수행하여

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();
    }
  }

위 내용은 SqlSession 생성을 학습하는 MyBatis 소스 코드의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.