2015-09-18 1 views
4

Мой вопрос прост. Можно ли повторно использовать сеанс после совершения транзакции?Mybatis. Можно ли повторно использовать сеанс после фиксации?

try (SqlSession session = sqlSessionFactory.openSession()) { 
// following 3 lines pseudocode for "doing some work" 
    session.insert(...); 
    session.update(...); 
    session.delete(...); 
    session.commit(); 

    session.insert(); 
    session.commit(); 
} 

Или лучше закрыть сеанс после фиксации и открыть новый сеанс?

ответ

2

Я только начинаю с MyBatis, и у меня был аналогичный вопрос об управлении сеансом. Вот что я узнал до сих пор:

  1. Сессии следует держать открытыми до тех пор, пока это необходимо для совершения ваших транзакций, а затем закрыто.
  2. MyBatis обеспечивает локальное кэширование на уровне сеанса, что может быть полезно для производительности вашего приложения. Естественно, это зависит от дизайна вашего приложения, но, как правило, чем дольше вы держите свою сессию активной, тем лучше будет ваш кеш. (MyBatis обрабатывает кеш-промывку при фиксации и откатах.)

Для вашего простого примера хорошо держать сессию открытой для этих двух транзакций. Эффективное использование сеансов MyBatis во всем вашем слое DAO означает поиск баланса между этими двумя рекомендациями.

Потратьте время, чтобы перейти на официальной документации по управлению сеансами и кэширования: https://mybatis.github.io/mybatis-3/java-api.html#sqlSessions

+0

несколько коммитов на той же сессии, используя mybatis 3.2.8 не работает для меня с Oracle 12.1, хотя он, по всей видимости работать с Oracle 11.2. Он будет работать нормально для первых 1 или 2 коммитов, но затем я получу ошибку «java.sql.SQLException: Ошибка доступа к PooledConnection. Соединение недействительно» с последующими коммитами. – rimsky

Смежные вопросы