Record

목차

2차 캐시 설정

<configuration>
    <settings>
        <setting name="cacheEnabled" value="true"/>
    </settings>
</configuration>
<mapper namespace="com.example.mapper.OrderMapper">
    <!-- 캐시 설정 -->
    <cache/>

    <!-- select 쿼리 정의 -->
    <select id="selectOrders" resultType="com.example.model.Order">
        SELECT * FROM orders WHERE client_id = #{clientId}
    </select>
</mapper>
<mapper namespace="com.example.mapper.OrderMapper">
    <!-- 캐시 설정 예제 -->
    <cache 
        eviction="LRU"        <!-- 캐시 삭제 정책: LRU (Least Recently Used) -->
        flushInterval="60000" <!-- 캐시 플러시 간격: 60초 -->
        size="512"            <!-- 캐시 크기: 512개 객체 -->
        readOnly="true"       <!-- 읽기 전용 캐시 설정 -->
    />

    <!-- select 쿼리 정의 -->
    <select id="selectOrders" resultType="com.example.model.Order">
        SELECT * FROM orders WHERE client_id = #{clientId}
    </select>
</mapper>
package com.example.mapper;

import com.example.model.Order;
import org.apache.ibatis.annotations.Select;
import java.util.List;

public interface OrderMapper {

    @Select("SELECT * FROM orders WHERE client_id = #{clientId}")
    List<Order> selectOrders(int clientId);
}

캐시 비활성화

– 방벙 1

<mapper namespace="com.example.mapper.OrderMapper">
    <!-- select 쿼리 정의 -->
    <select id="selectOrders" resultType="com.example.model.Order" useCache="false">
        SELECT * FROM orders WHERE client_id = #{clientId}
    </select>
</mapper>

– 방벙 2

<mapper namespace="com.example.mapper.OrderMapper">
    <!-- <cache/> 요소를 추가하지 않음 -->

    <!-- select 쿼리 정의 -->
    <select id="selectOrders" resultType="com.example.model.Order">
        SELECT * FROM orders WHERE client_id = #{clientId}
    </select>
</mapper>

– 방법3 MyBatis 설정 파일에서 전역적으로 캐시를 비활성화

<configuration>
    <settings>
        <setting name="cacheEnabled" value="false"/>
    </settings>
</configuration>