에서 결합의 MyBatis 소스는 SQLSESSION 작성 프로세스 및 디자인 패턴의 사용에 대해 이야기하기

  1. 이 코드의 라인, SQLSESSION 작성 프로세스 및 디자인 패턴의 사용에 대해 이야기에서 결합의 MyBatis 소스에 따르면 :

    1 UserMapper userMapper = sqlSession.getMapper (UserMapper. 클래스 );
    1. 데이터 소스, 트랜잭션 및 데이터베이스 파일 자원의 영향을 포함하는 구성 객체 생성 된 구성 파일이 행동 특성 설정을 매퍼 읽어;

    2. SqlSessionFactory는 (생성 SqlSessionFactoryBuilder를 구성 객체를 판독함으로써 빌더 모드 );

      1  공공 SqlSessionFactory는 빌드 (리더 리더, 문자열 환경 속성 속성) {
       2    SqlSessionFactory는 VAR5;
      3    시도는 {
       4      XMLConfigBuilder 파서 = 새로운 XMLConfigBuilder (리더 환경 특성);
      5      VAR5가 = .build을 (parser.parse ());
      6    } 캐치 (예외 var14) {
       7      던져 ExceptionFactory.wrapException ( "오류 건물 SQLSESSION." , var14);
      8    } 마지막 {
       9      ErrorContext.instance () (리셋).;
      (10)  
      (11)      시도{
       12        reader.close ();
      13      } 캐치 (IOException이 된 var13) {
       14      }
       15  
      16    }
       17  
      18    복귀 VAR5;
      19 }
      1  개인  공극 bindMapperForNamespace () {
       2          스트링 네임 스페이스 = .builderAssistant.getCurrentNamespace ();
      3          의 경우 (네임 스페이스 =! 널 (null) ) {
       4              급 boundType = 널 (null) ;
      5  
      6              시도 {
       7                  boundType = Resources.classForName (공간);
      8              } 캐치 (의 ClassNotFoundException var4) {
       9              }
       (10)  
      (11)              의 경우 (boundType! = null의 &&! .configuration.hasMapper (boundType)) {
       12                   .configuration.addLoadedResource ( "네임 스페이스 :"+ 공간);
      13                  .configuration.addMapper (boundType);
      14              }
       15          }
       16  
      17   }
      1  공공 SqlSessionFactory는 빌드 (구성 설정) {
             반환  새로운 DefaultSqlSessionFactory (구성);
      3   }
    3. () 메소드 XMLConfigBuilder 클래스 bindMapperForNamespace하여 빌드 () 메소드를 호출 할 때, 매퍼의 HashMap MapperRegistry 클래스 속성 = Mapper.class 키, 값 = 매퍼 현재 공장 만드는 인터페이스 레지스터;

    4. SQLSESSION 인스턴스 객체 (SqlSessionFactory는에 의해 생성 된 공장 모드 );

    5. SQLSESSION GET getMapper () 프록시 객체 (방법 통해 프록시 모드 JDK가 다이나믹 프록시를 사용), 프록시는 대상체 매퍼 객체를 생성하고,

    6. MapperProxyFactory 공장으로 동적 프록시 프록시 클래스 MapperProxy (generate를 팩토리 모드 ) () ()를 호출 포장 방법에의 InvocationHandler 인터페이스를 달성하기 위해, 비 객체 클래스의 메소드 MapperMethod 포장 강화, 최종적 실행을 실행 한 SQL CRUD 방법이 완료된다.

      공공 객체를 호출 (객체 프록시 방법, 방법, 개체 []에 args)이 
            발생 Throwable의 {
            은 try {
                // 방법은 다음 직접 보강없이 실행 Object 클래스의 방법 인 경우;
                // 우리가 수행하는 경우가 toString 것을 수단 () 방법은 개선 할 필요가 없습니다. 
               IF (. 개체 클래스 .equals (method.getDeclaringClass ())) {
                    반환 Method.invoke를 ( 다음은이 , 인수);
               }
               경우 ( .isDefaultMethod (법)) {
                    반환  .invokeDefaultMethod를 (프록시 방법에 args);
               }
           } 캐치 (Throwable를 VAR5) {
                던져 ExceptionUtil.unwrapThrowable (VAR5를);
           }
           // 않는 캐시 
           MapperMethod = mapperMethod 이 본 .cachedMapperMethod (방법);
            // CRUD 연산 수행 
           복귀 mapperMethod.execute ( 이 본 .sqlSession, 인수)를;
       }

추천

출처www.cnblogs.com/weizaibug/p/12460925.html