[Mybatis] 캐시 유형 선택 예제

MyBatis에서는 크게 두 가지 유형의 캐시를 사용할 수 있습니다: 1차 캐시(Local Cache)와 2차 캐시(Second Level Cache)입니다. 아래 예제에서는 각 유형의 캐시를 어떻게 설정하고 사용하는지에 대한 예시를 제공합니다.

  1. 1차 캐시(Local Cache):

1차 캐시는 SqlSession 내에서 쿼리 결과를 캐싱하는 기능입니다. 한 SqlSession 내에서 같은 쿼리를 여러 번 실행해도 데이터베이스에는 단 한 번만 요청이 전달됩니다. 다음 예제에서는 1차 캐시를 사용하는 방법을 보여줍니다.

try (SqlSession sqlSession = sessionFactory.openSession()) {
    // 첫 번째 쿼리 실행
    Book firstBook = sqlSession.selectOne("getBookById", 1);
    System.out.println("First Query Result: " + firstBook);

    // 두 번째 쿼리 실행 (1차 캐시 활용)
    Book secondBook = sqlSession.selectOne("getBookById", 1);
    System.out.println("Second Query Result: " + secondBook);
}` 
  1. 2차 캐시(Second Level Cache):

2차 캐시는 여러 SqlSession 사이에서 쿼리 결과를 공유하는 기능입니다. 이는 여러 SqlSession 간에 동일한 쿼리를 실행하면 캐시된 결과를 사용하여 성능을 향상시킵니다. 다음 예제에서는 2차 캐시를 사용하는 방법을 보여줍니다.

매퍼 XML 파일:

BookMapper.xml:

<select id="getBookById" resultType="Book" useCache="true">
  SELECT * FROM books WHERE id = #{id}
</select>` 

MyBatis 설정 파일:

mybatis-config.xml:

<configuration>
  <!-- ... -->

  <!-- 2차 캐시 활성화 설정 -->
  <settings>
    <setting name="cacheEnabled" value="true"/>
  </settings>
  
  <!-- ... -->

  <!-- 2차 캐시 설정 -->
  <typeAliases>
    <typeAlias alias="Book" type="your.package.Book"/>
  </typeAliases>
  <cache type="org.apache.ibatis.cache.impl.PerpetualCache" />
</configuration>` 

위의 예제에서 useCache="true" 속성을 사용하여 쿼리에 2차 캐시를 활용하도록 설정하고, cache 요소를 사용하여 2차 캐시를 설정하였습니다.

이러한 예제를 참고하여 1차 캐시와 2차 캐시를 사용하여 쿼리 결과를 효과적으로 캐싱하고 성능을 개선할 수 있습니다.