[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();
    }
}` 

이 예제에서는 SqlSessionThreadLocal을 사용하여 스레드 로컬에 저장하고, 공유하여 동일한 스레드 내에서 쿼리 결과를 공유합니다. 이렇게 하면 동일한 SqlSession을 사용하더라도 결과를 공유할 수 있습니다. 하지만 이러한 패턴은 주의해서 사용해야 하며, 적절한 스레드 관리와 메모리 관리가 필요합니다.