2016-08-15 2 views
0

MyBatis를 사용하여 User이라는 Oracle 테이블을 생성하고 있습니다. 테이블이 존재하면 메시지는 Table User already exists으로 표시되고 다시 만들지 않습니다. 현재이 메서드를 사용하고 있습니다.mybatis와 Oracle을 사용하여 테이블이 존재하는지 확인하십시오.

public void createTable() { 
    try { 
     userMapper.createTable(); 
    } catch (BadSqlGrammarException e) { 
     log.error("Table User already exists"); 
    } 
} 

일종의 작품입니다. 그러나 여러 방법으로 트리거 할 수 있기 때문에 이것이 신뢰할 수있는 방법이라고 생각하지 않습니다. BadSqlGrammarException.

예외를 잡는 것 외에도 테이블이 있는지 여부를 먼저 확인했지만 프로 시저를 호출하지 않고도이를 달성 할 수있는 방법을 찾을 수 없습니다.

Mybatis와 Oracle을 사용하여 테이블이 존재하는지 확인하는 우아하고 정확한 방법이 있습니까?

답변

1

이 방법을 발견했습니다.

<select id="checkTableExists" resultType="int"> 
<![CDATA[ 
    SELECT COUNT(*) FROM user_tables WHERE table_name = 'CHECKSTATUS_LOG' 
]]> 
</select> 

가 (물론, createTable 방법과 함께) 매퍼 클래스에 선언

public interface CheckStatusLogMapper { 
    void createTable(); 
    int checkTableExists(); 
} 

그런 다음이

처럼 사용할 수 있습니다 MyBatis로 매퍼 파일에 다음 텍스트를 추가
public void createTableIfNotExists) { 
    boolean b = checkTableExists(); 
    if(!b) { 
     checkStatusLogMapper.createTable(); 
    } 
}