2016-08-15 1 views
0

Я использую MyBatis для создания таблицы Oracle с именем User. Если таблица существует, она просто отобразит сообщение 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

Я нашел способ добиться этого.

Добавьте следующий текст в mybatis файл картографа

<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(); 
} 

Затем вы можете использовать его как этот

public void createTableIfNotExists) { 
    boolean b = checkTableExists(); 
    if(!b) { 
     checkStatusLogMapper.createTable(); 
    } 
}