SqlSessionFactory와 SqlSession은 MyBatis 프레임워크에서 데이터베이스와의 상호 작용을 관리하는 데 사용되는 중요한 인터페이스입니다. 이 두 인터페이스 간의 관계를 이해하려면 MyBatis의 데이터베이스 세션 라이프사이클을 살펴보아야 합니다.
-
- SqlSessionFactory는 MyBatis의 핵심 인터페이스 중 하나로, 데이터베이스 세션을 생성하는 역할을 합니다. 데이터베이스 연결 설정, 매핑 정보, 트랜잭션 설정 등을 포함한 MyBatis 설정을 로드하고 이를 기반으로 SqlSession 객체를 생성합니다. SqlSessionFactory 예시 코드
javaCopy code
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader);
SqlSession은 실제로 데이터베이스와의 상호 작용을 담당하는 인터페이스입니다. SqlSessionFactory를 통해 생성되며, 데이터베이스 트랜잭션을 시작하고 SQL 쿼리를 실행하는 등의 작업을 수행합니다.
javaCopy code
SqlSession sqlSession = sqlSessionFactory.openSession(); try { // SQL 실행 // ... sqlSession.commit(); // 트랜잭션 커밋 } finally { sqlSession.close(); // 세션 닫기 }
SqlSession:
-
- SqlSessionFactory는 애플리케이션 수준에서 한 번 생성되어야 하며, 전역적으로 공유되어야 합니다. 반면에 SqlSession은 각각의 데이터베이스 작업에 대해 생성되어 사용된 후에 닫혀야 합니다. SqlSession을 생성하면 실제로 데이터베이스 연결이 생성되며, 사용 후에는 반드시 닫아야 합니다.
- 생명 주기 관계 예시코드
javaCopy code
SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(reader); SqlSession sqlSession = sqlSessionFactory.openSession(); try { // SQL 실행 // ... } finally { sqlSession.close(); // 세션 닫기 }
이렇게 SqlSessionFactory는 애플리케이션 라이프사이클 동안 유지되고, SqlSession은 각각의 데이터베이스 작업에서 생성되어 사용된 후에 닫히는 것이 일반적인 MyBatis의 사용 패턴입니다. 이는 데이터베이스 연결 및 트랜잭션 관리를 효과적으로 처리할 수 있도록 합니다.