2016-08-15 14 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(); 
    } 
} 
関連する問題