[疫情期间复习] mybatis源码分析系列(三) SqlSessionFactory之sql执行流程

上节分析我们已经拿到了sqlsessionFactory工厂
具体怎么执行sql呢 开始分析
通过测试案例 我们看到了 sqlsessionFactory.openSession()

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

看到这就一个小面试题
sql 执行器有几种 ?
分别是什么?
都是什么用途 ?

直接看源码找到答案

  public enum ExecutorType {
   
  //默认执行器 简单执行器 每执行一次update或select,就开启一个Statement对象,用完立刻关闭Statement对象
  SIMPLE, 
  //执行器会重用预处理语句
  REUSE, 
  //批量执行器 执行器不仅重用语句还会执行批量更新
  BATCH
}

看到这 sqlsession就拿到了
在这里插入图片描述
拿到sqlsession就开始执行getMapper分析
抽丝剥茧最后会找到MapperRegistry.class

 public <T> T getMapper(Class<T> type, SqlSession sqlSession) {
   
 	//knownMappers 中获取我们制定的类 knownMappers是时候初始化的呢 
 	//其实是在我们创建sqlSessionFactory的时候做的
    final MapperProxyFactory<T> mapperProxyFactory = (MapperProxyFactory<T>) knownMappers.get(type);
    if 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值