200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > Mybatis源码分析(三)---SqlSession获取

Mybatis源码分析(三)---SqlSession获取

时间:2024-06-25 22:31:12

相关推荐

Mybatis源码分析(三)---SqlSession获取

Mybatis源码分析SqlSession获取

一. SqlSession获取①. DefaultSqlSessionFactory类中的openSession()方法②. DefaultSqlSessionFactory类中的openSessionFromDataSource()方法③. DefaultSqlSession() 构造方法 二. SqlSession获取获取流程图

一. SqlSession获取

获取SqlSession源码入口

①. DefaultSqlSessionFactory类中的openSession()方法

@Overridepublic SqlSession openSession() {// 使用默认的执行器类型(默认是SIMPLE),默认隔离级别,非自动提交 委托给openSessionFromDataSource方法return openSessionFromDataSource(configuration.getDefaultExecutorType(), null, false);}

②. DefaultSqlSessionFactory类中的openSessionFromDataSource()方法

private SqlSession openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit) {Transaction tx = null;try {final Environment environment = configuration.getEnvironment();// 获取事务管理器, 支持从数据源或者直接获取final TransactionFactory transactionFactory = getTransactionFactoryFromEnvironment(environment);// 从数据源创建一个事务, 同样,数据源必须配置, mybatis内置了JNDI、POOLED、UNPOOLED三种类型的数据源,// 其中POOLED对应的实现为org.apache.ibatis.datasource.pooled.PooledDataSource,它是mybatis自带实现的一个同步、// 线程安全的数据库连接池 一般在生产中,我们会使用dbcp或者druid连接池tx = transactionFactory.newTransaction(environment.getDataSource(), level, autoCommit);//创建执行器final Executor executor = configuration.newExecutor(tx, execType);//返回默认的SqlSession对象return new DefaultSqlSession(configuration, executor, autoCommit);} catch (Exception e) {closeTransaction(tx);throw ExceptionFactory.wrapException("Error opening session. Cause: " + e, e);} finally {ErrorContext.instance().reset();}}

③. DefaultSqlSession() 构造方法

public DefaultSqlSession(Configuration configuration, Executor executor, boolean autoCommit) {this.configuration = configuration;this.executor = executor;this.dirty = false;this.autoCommit = autoCommit;}

二. SqlSession获取获取流程图

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。