mybatis_helloworld(2)_源码(三)

2014-11-24 08:22:29 · 作者: · 浏览: 3
figuration类:基本就是封装一系列的数据;看一下成员变量
[java]
protected Environment environment;
protected boolean lazyLoadingEnabled;
protected boolean aggressiveLazyLoading;
protected boolean multipleResultSetsEnabled;
protected boolean useGeneratedKeys;
protected boolean useColumnLabel;
protected boolean cacheEnabled;
protected Integer defaultStatementTimeout;
protected ExecutorType defaultExecutorType;
protected AutoMappingBehavior autoMappingBehavior;
protected Properties variables;
protected ObjectFactory objectFactory;
protected ObjectWrapperFactory objectWrapperFactory;
protected MapperRegistry mapperRegistry;
protected final InterceptorChain interceptorChain;
protected final TypeHandlerRegistry typeHandlerRegistry;
protected final TypeAliasRegistry typeAliasRegistry;
protected final Map mappedStatements;
protected final Map caches;
protected final Map resultMaps;
protected final Map parameterMaps;
protected final Map keyGenerators;
protected final Set loadedResources;
protected final Map sqlFragments;
protected final Collection incompleteStatements;
protected final Collection incompleteCacheRefs;
protected final Map cacheRefMap;
e)DefaultSqlSessionFactory类:SqlSessionFactory接口实现类,并持有一个Configuration对象;我们实现获取SqlSeesion对象应用的此类的方法。
3. 回过头来,再看看SqlSession session = sessionFactory.openSession();这行代码的实现
[java]
public SqlSession openSession()
{
return openSessionFromDataSource(configuration.getDefaultExecutorType(), null, false);
}
private SqlSession openSessionFromDataSource(ExecutorType execType, TransactionIsolationLevel level, boolean autoCommit)
{
Connection connection = null;
try
{
DefaultSqlSession defaultsqlsession;
try
{
Environment environment = configuration.getEnvironment();
//获取javax.sql.DataSource
DataSource dataSource = getDataSourceFromEnvironment(environment);
TransactionFactory transactionFactory = getTransactionFactoryFromEnvironment(environment);
//获取java.sql.Connection
connection = dataSource.getConnection();
if(level != null)
connection.setTransactionIsolation(level.getLevel());
connection = wrapConnection(connection);
//一系列的封装,把Connection包装成了DefaultSqlSession(SqlSession的实现类)
org.apache.ibatis.transaction.Transaction tx = transactionFactory.newTransaction(connection, autoCommit);
org.apache.ibatis.executor.Executor executor = configuration.newExecutor(tx, execType);
defaultsqlsession = new DefaultSqlSession(configuration, executor, autoCommit);
}
catch(Exception e)
{
closeConnection(connection);
throw ExceptionFactory.wrapException((new StringBuilder()).append("Error opening session. Cause: ").append(e).toString(), e);
}
return defaultsqlsession;
}
finally
{
ErrorContext.instance().reset();