Skip to content

SqlSessionUtils

java
public static SqlSession getSqlSession(SqlSessionFactory sessionFactory,
                                       ExecutorType executorType,
                                       PersistenceExceptionTranslator exceptionTranslator) {
    // 尝试从 Spring 当前线程的事务中获取一个已存在的 SqlSessionHolder
    SqlSessionHolder holder = (SqlSessionHolder) TransactionSynchronizationManager.getResource(sessionFactory);

    if (holder != null && holder.isSynchronizedWithTransaction()) {
        return holder.getSqlSession();
    }

    // 否则,新建 SqlSession
    SqlSession session = sessionFactory.openSession(executorType);

    if (TransactionSynchronizationManager.isSynchronizationActive()) {
        // 注册同步(即事务同步)
        SqlSessionHolder newHolder = new SqlSessionHolder(session);
        TransactionSynchronizationManager.bindResource(sessionFactory, newHolder);
    }

    return session;
}