java - Mybais 会话session是否公用
ringa_lee
ringa_lee 2017-04-17 17:58:32
0
3
631

问题:使用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_lee
ringa_lee

ringa_lee

모든 응답(3)
迷茫
  1. mybatisSqlSessionManager 클래스를 통해 관리되는 경우 각 스레드는 공통 SessionSession

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

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

洪涛

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

大家讲道理

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

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿