Skip to main content

SqlSessionUtils

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