[Mybatis] 1차 캐시 설정 방법

MyBatis는 1차 캐시를 사용하여 동일한 쿼리에 대한 결과를 메모리에 저장하여 성능을 향상시킵니다. 1차 캐시는 SqlSession 객체의 범위 내에서 유지되며, 동일한 SqlSession 내에서 실행되는 쿼리 결과를 캐시합니다. 아래에 MyBatis에서 1차 캐시를 설정하는 방법을 제공하겠습니다.

  1. 기본적인 1차 캐시 사용:

MyBatis에서는 기본적으로 1차 캐시가 활성화되어 있습니다. 동일한 SqlSession에서 실행되는 쿼리 결과는 자동으로 캐시됩니다.

SqlSessionFactory sqlSessionFactory = ...; // SqlSessionFactory 생성

SqlSession sqlSession = sqlSessionFactory.openSession();

// 동일한 쿼리를 여러 번 실행해도 첫 번째 실행 결과가 캐시됨
User user1 = sqlSession.selectOne("selectUserById", 1);
User user2 = sqlSession.selectOne("selectUserById", 1);

sqlSession.close();` 
  1. 수동으로 1차 캐시 지우기:

동일한 SqlSession 내에서 결과가 변경되거나 삭제되어야 하는 경우, 수동으로 1차 캐시를 지우는 방법도 있습니다.

SqlSessionFactory sqlSessionFactory = ...; // SqlSessionFactory 생성

SqlSession sqlSession = sqlSessionFactory.openSession();

User user1 = sqlSession.selectOne("selectUserById", 1);

// 1차 캐시에서 특정 결과를 지움
sqlSession.clearCache();

User user2 = sqlSession.selectOne("selectUserById", 1);

sqlSession.close();` 
  1. 매퍼 레벨에서 1차 캐시 비활성화:

특정 매퍼에서 1차 캐시를 비활성화하려면 매퍼 XML 파일에서 다음과 같이 설정할 수 있습니다.

<mapper namespace="your.package.UserMapper">
    <cache>false</cache> <!-- 1차 캐시 비활성화 -->
    <!-- 나머지 매퍼 설정 -->
</mapper>` 

위의 방법들로 1차 캐시를 설정하거나 관리할 수 있습니다. 1차 캐시는 동일한 SqlSession 범위 내에서 쿼리 결과를 캐시하므로, 주의해서 사용하셔야 합니다.