>  Q&A  >  본문

java - Mybais 会话session是否公用

问题:使用mybatis时,一个sqlsessionfactory.opensession的方法,能否同时兼容多个dao的操作
例如,我在pojo a 的dao,aDAO的插入操作中,实例化了一个session,
SqlSession session = sqlSessionFactory.openSession();
ADAO aDAO = session.getMapper(ADAO.class);
此时由于我要同时对pojo b进行一些操作,那么我可不重新实例化新的session,而是直接使用之前实例的session a
BDAO bDAO = session.getMapper(BDAO.class)

如果可以这么操作的话,请问有什么限制(因为如果是删除,增加,更新的操作的话,是需要提交会话的,而查询不需要)

ringa_leeringa_lee2727일 전592

모든 응답(3)나는 대답할 것이다

  • 迷茫

    迷茫2017-04-17 18:00:32

    1. mybatisSqlSessionManager 클래스를 통해 관리되는 경우 각 스레드는 공통 SessionSession

      을 갖게 됩니다.
    2. 이 통합 플러그인에서 트랜잭션을 활성화하지 않는 쿼리/업데이트 문은 mybatis-spring에 해당합니다. 트랜잭션이 활성화된 경우 이 트랜잭션의 쿼리/업데이트는 모두 <를 공유합니다. 🎜> SessionSession

    3. 은 스레드로부터 안전하지 않으므로 mybatisExecutorSession은 최대 하나의 스레드에서만 재사용할 수 있습니다.

      회신하다
      0
  • PHP中文网

    PHP中文网2017-04-17 18:00:32

    물론 세션은 여러 DAO(추가/삭제/수정/확인 포함)를 작동할 수 있습니다. 물론 이러한 DAO 작업은 세션이 제출/롤백될 때 트랜잭션의 특성을 충족해야 합니다. 즉, 모든 수정이 성공하거나, 아니면 모두 실패합니다. 유일한 제한 사항은 동일한 세션에 있기 때문에 이러한 DAO는 동일한 데이터베이스에 액세스해야 한다는 것입니다.

    회신하다
    0
  • 大家讲道理

    大家讲道理2017-04-17 18:00:32

    예, 위에서 언급한 경우를 제외하고 이러한 dao는 동일한 데이터베이스에 액세스합니다. 세션은 스레드로부터 안전하지 않습니다.

    회신하다
    0
  • 취소회신하다