sqlsession是由SqlSessionFactory(SqlSessionFactory一旦被创建就在应用的运行期间一直存在)创建,在跟spring结合以前sqlsession实际是由SqlSessionManager创建管理。
sqlSession实际是每个线程都会创建一个,生命周期依附于其调用线程。
Executor:sqlSession执行sql的执行器。
Connection对象是和数据库建立的通信连接对象,执行sql的底层逻辑就要通过Connection对象实现。
SqlSession是通过各种Executor获取connection并执行sql
public <E> List<E> doQuery(MappedStatement ms, Object parameterObject, RowBounds rowBounds, ResultHandler resultHandler, BoundSql boundSql)
throws SQLException {
Statement stmt = null;
try {
flushStatements();
Configuration configuration = ms.getConfiguration();
StatementHandler handler = configuration.newStatementHandler(wrapper, ms, parameterObject, rowBounds, resultHandler, boundSql);
Connection connection = getConnection(ms.getStatementLog());
stmt = handler.prepare(connection, transaction.getTimeout());
handler.parameterize(stmt);
return handler.<E>query(stmt, resultHandler);
} finally {
closeStatement(stmt);
}
}
sqlsession在各个线程中创建,根据策略选择Executor,Executor在连接池中获取Connection,最后由Connection作为底层执行sql。