캐시 및 보조 캐시 MyBatis로의 개념은 문서의 전술 한 설명을 참조하여 이해 될 수있다. 전술 한 연결 : HTTPS : //www.cnblogs.com/hopeofthevillage/p/11427438.html, 보조 캐시 위는 XML 방식을 달성하기 위해 사용되며, 본 논문 차례로 MyBatis로 주석 기반의 보조 캐시를 사용하는 것이 추가하는 것입니다 방법.
1. 2 차 캐쉬 프로필 MyBatis로를 열고
<? XML 버전 = "1.0"인코딩 = "UTF-8"?> <! 구성 DOCTYPE PUBLIC "- // mybatis.org//DTD 구성 3.0 // EN"을 "http://mybatis.org/dtd/mybatis config.dtd - 3 "> <구성> <설정> <- 글로벌 게으른 로딩을 사용 ->! <이름 = 설정"/> "참으로"= 값 "lazyLoadingEnabled <- & LT;! & ndash를 닫기 즉시로드 실제로 어떤 구성, 디폴트는 없다 및 거짓 ndash를한다 -> > - <- <설정 이름 = "aggressiveLazyLoading"값 = "FALSE"/>! <- 오픈 SQL이 관련 정보의 구현 인쇄 MyBatis로 -! -> <설정 이름 = "logImpl"값 = "STDOUT_LOGGING"/> <! - -이 구성을 수동으로 추가 메모리를 강화하거나, 기본적으로 활성화되어> </ "참으로"설정 이름 = "cacheEnabled"값 => </ 설정> <typeAliases> <typeAlias 유형 = "com.example.domain.User"별명 = "사용자"/> < 패키지 이름 = "com.example.domain"/> </ typeAliases> <환경의 기본 = "테스트"> <환경 ID = "테스트"> <! -配置事务-> <의 transactionManager 유형 = "JDBC"> </의 transactionManager> <! -配置连接池-> <은 dataSource 타입 = "POOLED"> <속성 이름 = " 드라이버 "값 ="com.mysql.jdbc.Driver "/> <속성 이름 ="URL "값 ="JDBC : mysql을 :// 로컬 호스트 : 3306 / TEST1 "/> <속성 이름 ="사용자 이름 "값 ="루트 "/> <속성 명 = "비밀번호"값 = "123456"/> </은 dataSource> </ 환경> </ 환경> <맵퍼> < 패키지 이름 = "com.example.dao"/> </ 매퍼> </ 구성>
캐시 열고 <이름 = "cacheEnabled"설정 값을 = "진정한"/>를 추가, 로그의 MyBatis 쿼리를 보려면 <설정 이름 = "logImpl"값 = "STDOUT_LOGGING을"/> 구성 로그를 엽니 다.
2. 클래스의 필드, 그리고 다오
공용 클래스 사용자가 구현 직렬화 { 개인 정수 사용자 ID; 개인 문자열 사용자 이름 : 개인 날짜 userBirthday; 개인 문자열 userSex; 개인 문자열 userAddress; 개인 목록 <계정> 계정; 和方法...... 설정 얻을省略 } 수입 com.example.domain.User을; 수입 org.apache.ibatis.annotations *. ; 수입 org.apache.ibatis.mapping.FetchType; 수입 은 java.util.List; @CacheNamespace (차단 = 참 ) 공용 인터페이스 UserDao { / ** *查找所有用户 * @return * / @Select ( "* 사용자의 선택" ) @Results (ID = "userMap", 값 = {@Result (ID = 사실 , 열 = "ID를" 재산 = "userId를" ), @Result (열 = "사용자 이름", 재산 = '사용자 이름 " ), @Result (열 ="생일 ", 재산 ="userBirthday " ), @Result (열 ="섹스 ", 재산 = "userSex" ) @Result (열 = "주소"속성 = "userAddress " ) @Result (열= "ID", 재산 = "계정"많은 = @Many (= "com.example.dao.AccountDao.findAccountByUid", fetchType = 선택 ) FetchType.LAZY) }) 목록 <사용자> findall은 (); / ** *保存用户 * 파라미터 : 사용자 * / @Insert ( "사용자 삽입 (사용자 이름, 생일, 성별, 주소) 값 (# {사용자 이름}, # {생일}, # {성}, # {주소}) " ) 무효 saveUser (사용자 사용자); / ** *更新用户 * 파라미터 : 사용자 * / @Update ( "업데이트 사용자 설정 사용자 이름 = # {사용자 이름}, 생일 = # {생일}, 성별 = # {성}, 주소 = # {주소} 여기서 ID = # {신분증}"무효화 updateUser (사용자 이용자) / ** * 사용자 삭제 *의 @param ID * / @Delete ( "WHERE ID = 사용자 ID 번호 {}에서 삭제" ) 보이드 deleteUser (ID 정수) / ** * 질의하는 사용자 ID * @param의 ID * @return * / @Select ( "SELECT * 사용자 ID로부터 ID = # {}" ) @ResultMap (값 = { "S userMap" }) 사용자 findById 메소드 (ID 정수) / ** * 유저 쿼리 사용자 이름 * @param의 이름 * @return * / // @Select는 ( "사용자 SELECT * FROM 경우 사용자 이름 # {이름}처럼") @Select는 ( "* 사용자의 경우 사용자 이름과 같은 선택 '% $ {값} %를'" ) 목록 <사용자> findByUserName (문자열 이름); / ** *查询用户数量 * @return * / @Select를 ( "사용자의 선택 수 (*)" ) 의 INT findTotalUser (); }
3. 열기를 보조 캐시에 해당하는 DAO 클래스 위의 코멘트를 추가
@CacheNamespace (차단 = TRUE)
4. 테스트
공공 클래스 UserCacheTest { 민간 에서의 InputStream; 개인 SqlSessionFactory는 SqlSessionFactory는; @Before 공개 공극 초기화 ()는 슬로우 예외 { 에서 = Resources.getResourceAsStream ( "SqlMapConfig.xml" ); SqlSessionFactory는 = 새로운 SqlSessionFactoryBuilder를 () (에서) 구축 할 수 있습니다.; } @After 공개 공극 32 파괴 ()는 슬로우 예외 { )를 in.close (; } @Test 공공 무효 testFindById () { //第一查询 SQLSESSION sqlSession1 = sqlSessionFactory.openSession (); UserDao userDao1 = sqlSession1.getMapper (UserDao. 클래스 ); 사용자 USER1 = userDao1.findById (41 ); 에서 System.out.println (USER1); // 关闭一级缓存 sqlSession1.close (); // 第二次查询 SQLSESSION sqlSession2 = sqlSessionFactory.openSession (); UserDao userDao2 = sqlSession2.getMapper (UserDao. 클래스 ); 사용자 USER2 = userDao2.findById (41 ); 에서 System.out.println (USER2); sqlSession1.close (); 에서 System.out.println (USER1 == USER2); } }
(1) 두 개의 캐시를 설정하지
(2) 보조 캐시에서