[Mybatis] SqlSession 간에 쿼리 결과를 공유 예제
SqlSession
간에 쿼리 결과를 공유하기 위해서는 Java의 ThreadLocal
을 활용하여 데이터를 스레드 로컬 영역에 저장하고 공유할 수 있습니다. 이를 통해 동일한 스레드 내에서 SqlSession
을 공유하는 경우에도 쿼리 결과를 공유할 수 있습니다. 아래는 이를 실현하는 예제입니다.
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
public class SharedQueryResultExample {
private static ThreadLocal<SqlSession> threadLocalSqlSession = new ThreadLocal<>();
public static void main(String[] args) {
SqlSessionFactory sessionFactory = new SqlSessionFactoryBuilder()
.build(SharedQueryResultExample.class.getResourceAsStream("/mybatis-config.xml"));
// 첫 번째 SqlSession
SqlSession sqlSession1 = sessionFactory.openSession();
threadLocalSqlSession.set(sqlSession1);
int count1 = sqlSession1.selectOne("getBookCount");
// 두 번째 SqlSession (동일한 스레드)
SqlSession sqlSession2 = threadLocalSqlSession.get();
int count2 = sqlSession2.selectOne("getBookCount");
System.out.println("Count from first session: " + count1);
System.out.println("Count from second session: " + count2);
sqlSession1.close();
}
}`
이 예제에서는 SqlSession
을 ThreadLocal
을 사용하여 스레드 로컬에 저장하고, 공유하여 동일한 스레드 내에서 쿼리 결과를 공유합니다. 이렇게 하면 동일한 SqlSession
을 사용하더라도 결과를 공유할 수 있습니다. 하지만 이러한 패턴은 주의해서 사용해야 하며, 적절한 스레드 관리와 메모리 관리가 필요합니다.