1. Mybatis 캐시 소개
대부분의 지속성 층 프레임 워크와 마찬가지로 Mybatis는 L1 및 L2 캐시를 지원합니다.
1. 레벨 1 캐시 :
PerpetualCache를 기반으로 한 해시 맵 로컬 캐시에는 세션 스토리지 범위가 있습니다. 세션이 플러시되거나 닫히면 세션의 모든 캐시가 지워집니다.
2. 레벨 2 캐시 :
두 번째 레벨 캐시는 첫 번째 레벨 캐시와 동일하며 기본값은 PerpetualCache 및 Hashmap 스토리지입니다. 차이점은 스토리지 범위가 Mapper (네임 스페이스)이며 Ehcache와 같은 스토리지 소스를 사용자 정의 할 수 있다는 것입니다.
3. 캐시 데이터 업데이트 메커니즘의 경우 특정 범위 (1 레벨 캐시 세션/두 번째 레벨 캐시 네임 스페이스)가 수행되면이 범위에 따라 Select의 모든 캐시는 기본적으로 지워집니다.
1.1. mybatis 레벨 1 캐시 테스트
packing me.gacl.test; import me.gacl.domain.user; import me.gacl.util.mybatisutil; import org.apache.session.section.sqlsession; import org.junit.test;/*** @author gacl*테스트 1- 레벨 캐시*/공공 클래스 클래스 (Session Level CACHE) (CACHE : CACHE : CACHE : CACHE) : 기본)*/@testpublic void testCache () {sqlsession session = myBatisutil.getSqlSession (); String Statement = "me.gacl.mapping.usermapper.getUser"; user user = session.selectone (state,); system.out.println (user);/** Session (session)에 의해 사용됩니다. ); system.out.println (user); session.close ();/*. 같은 세션이어야합니다. 세션 객체가 닫힌 경우 ()를 사용하는 경우 */session = mybatisutil.getSqlSession (); user = session.selectone (state,); System.out.println (user);/ *. 쿼리 조건은 동일합니다 */user = session.selectone (state,); System.out.println (사용자);/ *입니다. CACHE를 청소하기 위해 SESSION.CLEARCACHE ()가 실행되지 않았습니다.*/// Session.ClearCache (); user = session.selectone (Statement,); System.out.println (사용자);/*. 추가/삭제 작업이 실행되지 않았습니다 (이 작업은 캐시를 정리할 것입니다)*/session.update ( "me.gacl.mapping.usermapper.upDateUser", 새 사용자 (, "사용자",)); user = session.selectone (station,); System.out.println (user);}}. 1.2. Mybatis 레벨 2 캐시 테스트
1. 보조 캐시를 켜고 usermpper.xml 파일에 다음 구성을 추가합니다.
<Mapper 네임 스페이스 = "me.gacl.mapping.usermapper"> <!-레벨 2 캐시-> <cache/>을 켜십시오
2. 보조 캐시를 테스트하십시오
package me.gacl.test; import me.gacl.domain.user; import me.gacl.util.mybatisutil; import org.apache.ibatis.ssession.sqlsession; import org.apache.ibatis.session.sqlsession actory; import org.junit.test;/*** @author gacl*test level 2 cashl 2 cashl 2 cade*/*** @ testtwolevelCache {/** 테스트 레벨 2 캐시* 두 개의 다른 sqlsession 객체를 사용하여 동일한 쿼리 조건으로 쿼리를 실행하십시오. SQL 문은 두 번째 쿼리 중에 전송되지 않지만 캐시*/@testpublic void testCache () {String state = "me.gacl.mapping.usermapper.getUser"; factory.opensession (); sqlsession session = factory.opensession (); // 2 차 캐시를 사용할 때 사용자 클래스는 Serializable 인터페이스 ===> 사용자 구현을 구현해야합니다. SerializableUser user = session.selectone (station,); commit (); System.out.println ( "user ="+user); // 쿼리 조건이 동일하더라도 두 개의 다른 sqlsession 객체가 사용되기 때문에 첫 번째 레벨 캐시가 활성화되지 않습니다. user = session.selectone (state,); // session.commit (); system.out.println ( "user ="+user);}} 1.3. 2 차 캐시에 대한 보충 지침
1. 매핑 명령문 파일의 모든 선택 문은 캐시됩니다.
2. 문에서 모든 삽입, 업데이트 및 삭제 된 문장 파일에서 캐시가 새로 고침됩니다.
3. 캐시는 가장 최근에 사용 된 LRU (최근에 가장 적은 최소 사용) 알고리즘을 사용하여 재조정됩니다.
4. 지정된 시간 간격에 따라 캐시가 새로 고침됩니다.
5. 캐시는 1024 개 객체를 저장합니다
캐시 태그의 공통 속성 :
<캐시 evicict = "fifo"<!-재활용 전략은 첫 번째, flushinterval = "60000"<!-자동 새로 고침 시간 60s-> size = "512"<!-최대 512 참조 개체-> readonly = "true"/> <!-read-only-->
나는 당신에게 몇 가지 지식을 줄 것이다 :
Hibernate와 마찬가지로 Mybatis에는 캐시 메커니즘도 있습니다
레벨 1 캐시는 PerpetualCache의 해시 맵 로컬 캐시를 기반으로하며 (MyBatis와 함께 제공) 스코프는 세션이므로 세션이 커밋되거나 닫으면 캐시가 지워집니다.
두 번째 레벨 캐시는 기본적으로 PerpetualCache를 기반으로하지만 Ehcache와 같은 스토리지 소스를 만드는 데 사용할 수 있습니다.
첫 번째 레벨 캐시는 SQL 문을 캐시하고 두 번째 레벨 캐시는 결과 객체를 캐시합니다. 다음 예를 참조하십시오 (Mybatis의 로그 레벨은 디버그로 설정 됨)