열린 두 번째 레벨 캐시를 사용하여 MyBatis로 기반 주석

  캐시 및 보조 캐시 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) 보조 캐시에서


 

추천

출처www.cnblogs.com/hopeofthevillage/p/11444490.html