MyBatis로 마스터 (오) SQLSESSION API 사용에 대한 항목에서

MyBatis로 마스터 (오) SQLSESSION API 사용에 대한 항목에서

 다이애나 프로필

   거의 모든 외부 API 따라서, SQLSESSION 이해를 사용하는 방법을 배우게 SQLSESSION 유사한 MyBatis로 외부 인터페이스 층은 여전히 ​​필요 MyBatis로.

 해당 공식 문서

두 다이애나 구성 SQLSESSION 환경 <환경 />

   <환경 /> 두 가지 구성, 트랜잭션 관리 및 데이터 소스를 포함한다. 여기서, 거래의 실용적인 응용 프로그램은 일반적으로 일반적으로 데이터 소스 정교한 데이터베이스 연결 풀에 사용 Spring 컨테이너, 같은 드루이드가 등을 언급하는 경우에만 학습 구성 , HikariCP

    < 환경 기본 = "개발" > 
        < 환경 ID = "개발"  > 
            < 의 transactionManager의 유형 = "JDBC" /> 
            < 은 dataSource 타입 = "POOLED" > 
                < 속성 이름 = "드라이버" = "$ {드라이버}" /> 
                < 속성 이름 = "URL" = "$ {URL}" /> 
                < 속성 이름 = "사용자 이름" = "$ {사용자 이름}"/> 
                < 속성 이름= "비밀번호" = "$ {암호}" /> 
            </ 은 dataSource > 
        </ 환경 > 
    </ 환경 >

 

 

물은 SqlSessionFactory는와에 대응하는 구성을 사용하여 구성

        문자열 리소스 = "MyBatis로-config.xml에" ; 
        의 InputStream inputStream을 = Resources.getResourceAsStream (리소스);
         .sqlSessionFactory =  . SqlSessionFactoryBuilder를 () (inputStream을)를 구축;

 

 

네 다이애나 사용 SqlSessionFactory는 GET SQLSESSION

  SQLSESSION 예를 획득하기 전에 다음과 같은 세 가지 사항을 고려하십시오

    거래 : 내가 할 (자동 위탁) 세션에서 트랜잭션을 사용하거나 자동 제출 기능을 사용할 필요가? (일반적으로 데이터베이스 및 / 또는 JDBC 드라이버의 많은 더 트랜잭션을 의미) 
    연결을 : 나는 그것을 얻기 위해 데이터 소스에서의 MyBatis 설정에 의존해야합니까? 또는 자신의를 제공하기 위해 구성을 사용할 수 있습니까? 
    문을 실행 내가 MyBatis로 할 준비된 명령문 및 / 또는 일괄 업데이트 재사용 (삽입 포함 및 삭제)가 필요?

 

  4.1) 기본 방법

    @Test
     공공  무효 sqlSessionTest () {
         // OpenSession에 () 트랜잭션 열립니다 자동 제출하지 않습니다
         //이 데이터 소스 환경에서 현재 구성 연결 인스턴스 검색
         // 트랜잭션 격리 수준 JDBC 기본 구성 또는 데이터 소스를
         / / 때마다, 처리하는 새로운 문 준비된 명령문을 재사용하지 
        시도 (= SQLSESSION SQLSESSION 은이 .sqlSessionFactory.openSession ()) { 
            UserMapper 매퍼 = sqlSession.getMapper (UserMapper. 클래스 ) 
            사용자의 사용자 = mapper.selectUser (1. ) 
            sqlSession.commit (); 
            Assert.assertTrue (user.getUserId () == 1. ); 
        } 
    }

 

  4.2) 배치 실행 (지정)

    / * 
    자동 제출하지 않는 기본 트랜잭션으로 활성화 SQLSESSION OpenSession에 () // 
    SQLSESSION OpenSession에 (부울 자동 커밋을) // 사용자 정의 제출 여부를 설정 
    사용자 지정 연결을 사용하는 SQLSESSION OpenSession에 (연결 연결) // 필요, 당신은 매개 변수, 관심을 전달할 수 있습니다 MyBatis로는 연결 환경 설정, 사용중인 사용하기 때문에 연결 설정은 모두 자동 커밋의 같은 시간과 방법을 덮어 쓰지 않습니다 
    (TransactionIsolationLevel 레벨) SQLSESSION의 OpenSession에를 // 트랜잭션 격리 수준 
    SQLSESSION OpenSession에 (는 ExecutorType execType, TransactionIsolationLevel 레벨) 
    SQLSESSION OpenSession에 (는 ExecutorType execType) 
    SQLSESSION OpenSession에 (는 ExecutorType execType, 부울 자동 커밋) 
    SQLSESSION OpenSession에 (는 ExecutorType execType, 연결 연결) 
    구성 getConfiguration를 (); 
    
    ExecutorType.SIMPLE : 집행자의이 유형은 특별한 아무것도하지 않는다. 그것은 각 문을 실행하기 위해 새로운 준비된 문장을 생성합니다. 
    ExecutorType.REUSE은 : 실행 프로그램이 종류의 준비된 명령을 재사용한다.
    ExecutorType.BATCH :이 집행은 일괄 모든 업데이트 문은, 경우 필요한 경우 가독성 동작을 보장하기 위해 구별하기 위해, 그 (것)들의 사이에서 SELECT 실행됩니다. 
     * / 
    @Test 
    공개  공극 sqlSessionTest2 () { 
        SQLSESSION SQLSESSION = 널을 ,
         은 try {
             / * 
            배치 실행 
            DEBUG [주] - 준비 ==> : ,, (사용자 (USER_ID, _ 이름, 나이, 국가)의 값에 삽입 ??? ?) 
            DEBUG [주] - ==> 매개 변수 : 11 (정수), ttxxxxxx (문자열), 11 (정수), 널 
            DEBUG [주] - ==> 매개 변수 : 12 (정수), ttxxxxx12 (문자열), (12) (정수), 널 
             * / 
            SQLSESSION =sqlSessionFactory.openSession (ExecutorType.BATCH); 
            UserMapper userMapper = sqlSession.getMapper (UserMapper. 클래스 ); 
            
            
            사용자 사용자 = 사용자 (); 
            user.setUserId ( 11 ); 
            user.setAge ( 11 ); 
            user.setUserName ( "ttxxxxxx" ); 
            userMapper.insertUser (사용자); 
            
            
            user.setUserId ( 12 ); 
            user.setAge ( 12 ); 
            user.setUserName ( "ttxxxxx12" ); 
            userMapper.insertUser (사용자); 
            
            sqlSession.commit (); 
            
        } 캐치 (예외 전자) { 
            e.printStackTrace (); 
            만약 (! SQLSESSION = 널 (null) ) { 
                sqlSession.rollback (); 
            } 
        } 마지막으로 {
             경우 (SQLSESSION! = null이 ) { 
                sqlSession.close (); 
            } 
        } 
    }

 

  4.3) 명령문 해당 SQL을 수행하는 특정 방법에 대응  

  sqlSession.getMapper (UserMapper. 전에 원래 방법은 아래에 더 가깝다. 클래스 ) 맵퍼 예에 대응하지만, 동적 프록시를 사용하여 인수 지정된 메소드 stement에 대응하는 방법을 사용하는 것이다 생성 된 프록시 클래스는 대응하는 실행 SQL

    / * 
    문 법 SQLSESSION 실행은 
    문이 SQL 문에 대한 지정에 대응하는 맵퍼 클래스 이름 + 메소드 명에 대응하는, 주목 
    
    <T> T selectOne 메서드 (문 스트링, 오브젝트 파라미터) 간의 
    <E>리스트 <E가> selectList의 인 (문자열 문, 매개 변수 객체) 
    <T> 커서 <T> selectCursor 커서를 반환 // (문 문자열, 객체 파라미터), 검색 데이터를 연기 할 수있다 
    <K, V>지도 <K , V> selectMap (문자열 문, 개체 매개 변수 문자열 MapKey) 
    INT의 INSERT (문 문자열, 개체 매개 변수) 
    INT 업데이트 (문 문자열, 개체 매개 변수) 
    ) (삭제 문 문자열, 개체 매개 변수 값 int 
     * / 
    @Test 
    공공  무효 execSqlTest () {
         은 try (= SQLSESSION SQLSESSION 은이를.sqlSessionFactory.openSession ()) { 
            
            커서 <사용자> userCursor = sqlSession.selectCursor ( "com.ttx.example.mapper.UserMapper.selectUser", 1); // 문是类名+方法名
            
            반복자 <사용자> ITER = userCursor.iterator ();
            반면 (iter.hasNext ()) { 
                사용자 사용자 = iter.next (); 
                에서 System.out.println (user.getUserId () + ":"+ user.getUserName ()); 
            } 
        } 
    }

 

  4.4) @SqlProvider 자바의 SQL 코드로 작성

      UserSqlProvider.java

공공  정적 문자열 buildSelectUserById는 () {
         반환  {{) (SQL를 
            (선택 "*" ); 
            (FROM "사용자" ); 
            WHERE ( "USER_ID = # userId를 {}" ); 
            ORDER_BY ( "USER_ID" ); 
        }} toString ().; 
    }

 

  UserSqlProviderMapper.java

    @ResultMap ( "UserMap" ) 
    @SelectProvider (타입 = UserSqlProvider. 클래스 , 메소드 = "buildSelectUserById" ) 
    사용자 selectUserById (@Param ( "userId를") INT의 userId를);

 

  UserSqlProviderMapper.xml

<? XML의 버전 = "1.0"인코딩 = "UTF-8" ?> 
<! DOCTYPE 매퍼 
        PUBLIC "- // mybatis.org//DTD 매퍼 3.0 // EN" 
        "http://mybatis.org/dtd/mybatis을 mapper.dtd - 3 " > 
< 매퍼 네임 스페이스 ="com.ttx.example.mapper.UserSqlProviderMapper " > 
    
    <! - 된 resultMap, 매핑 결과 -> 
    < 된 resultMap ID ="userMap " 유형 ="com.ttx.example .entity.User " > 
        < 생성자 > </ 생성자 >   <! - 생략 할 수있는 구성 파라미터를 참조하는 데 사용 -> 
        <ID의 = "USER_ID" 속성= "사용자 ID" />   <! - 결과가 객체의 속성을 식별하는 요소 식별자로 표현한다 -> 
        < 결과 = "USER_NAME" 속성 = "사용자 이름" /> 
        < 결과 = "나이" 속성 = "나이" /> 
        < 결과 = "국제" 속성 = "국제" /> 
    </ 된 resultMap > 

</ 매퍼 >

 

  테스트 코드

    // 注解@SelectProvider 
    @Test
     공공  무효 sqlProviderTest () { 
        
        시도 (SQLSESSION SQLSESSION에게 = .sqlSessionFactory.openSession ()) { 
            UserSqlProviderMapper 매퍼 = sqlSession.getMapper (. UserSqlProviderMapper 클래스 ); 
            사용자는 사용자 = mapper.selectUserById (1 ); 
            
            Assert.assertTrue (user.getUserId () == 1 ); 
        } 
        
    }
    

 

  , 사용 후 SQLSESSION을 참고 할 필요가 연결을 닫습니다, 위의 코드는 시도를 () {}를 사용, 자동으로 종료됩니다

 

  소스 코드를 보려면 여기를 클릭하십시오

 

학습 자료 :

  공식 문서

 

추천

출처www.cnblogs.com/timfruit/p/11391887.html