우리는 or-mapping 도구로 MyBatis (3.0.5)를 사용하고 있습니다.롤백 ORMapper 쿼리
나는 우리의 [responses]
데이터베이스 테이블 (우리는 PostgreSQL 사용)에 매핑 된 Response
개체를 MyBatis를 통해 만들었습니다. 다음과 같이
사실, 우리가 사용하는 ormapping 구조는 다음과 같습니다
- ResponseMapper.xml -이 인 PSQL 쿼리가 ResponseMapper.java ** 클래스와 그 정의와 매핑 된 XML 파일 방법
- ReponseMapper.java - 사용되는 인터페이스 - (위) XML 파일에 정의 된 질의
- ResponseDAO.java MyBatis로 실행에 의해 사용되는 인터페이스 DI 용도 (스프링 사용)
- ResponseDAOImpl.java - 실제로
ResponseMapper
메서드를 호출하는ResponseDAO
의 구체적인 구현입니다. 이 작품을 설정@Autowired private ResponseDAO response; public void doStuff() { int action = getAction(); response.setAction(action); response.insert(); }
: 우리는 PostgreSQL을에 새
[responses]
레코드를 삽입하기 위해,
그래서 우리의 응용 프로그램에이 클래스의 인스턴스를 주입하기 위해 스프링을 사용하여, 코드는 호출 구성 요소에서 다음과 같습니다 아름답게 우리를 위해. 그러나 지금은 ResponseDAOImpl
클래스에 대한 JUnit 테스트 세트를 작성하려고합니다. PostgreSQL 데이터베이스에 대한 쿼리를 올바르게 실행하고 있는지 확인하고 싶습니다.
내가 알 수있는 한, 전체 데이터베이스를 "조롱하는"방법은 없습니다. 그래서 필자가 선택한 유일한 방법은 테스트 메소드가 쿼리를 실행하고 성공 여부를 확인한 다음 관계없이 롤백하는 것입니다.
MyBatis는 이러한 종류의 롤백 기능을 지원하지 않습니다. 나는 Old Nabble의 mybatis-user
메일 링리스트에서 this을 게시했지만 포스터는 Guice를 사용했으며 Guice를 통해 트랜잭션을 롤백하는 방법에 관한 것 같았습니다. MyBatis로 하지 지원 트랜잭션/롤백 (가 무엇입니까?!?!) 않으면 PostgreSQL의 - JDBC 드라이버가이를 지원하는 경우 내 유일한 repireve이 될 것 같은
, 그것은 보인다. 그런 다음 테스트 방법을 구성하여 ResponseDAO.insert()
메서드를 실행 한 다음 수동으로 드라이버 (MyBatis)를 통해 직접 트랜잭션을 롤백하려고 시도 할 수 있다고 생각합니다.
이 분야에 대한 경험이 있습니까? 코드 샘플? 팁? 모범 사례? 미리 감사드립니다!
Andy, Remis B의 대답과 후속 의견을 참조 할 수 있습니까? 그 해결책이 효과가 없을까요? 내 테스트 메소드가 SqlSessionFactoryBean에서 처음 SqlSession을 가져오고 setAutoCommit (false), Savepoint를 획득하고 쿼리를 실행 한 다음 Savepoint로 롤백하면 어떻게 될까요? Spring이 여전히이 동작을 무시합니까? – IAmYourFaja
매퍼를 주입하고 있습니까? 그렇다면 스프링이 매퍼 호출을 위해 새로운 SqlSession을 열 것이라고 생각합니다. 저는 Guice에 대해 더 잘 알고 있습니다. 그러나 docs [1]은 매퍼가 자신의 SQL 세션을 실행한다고 생각합니다. http://code.google.com/p/mybatis/downloads/detail?name=mybatis-spring-1.0.2-reference.pdf – Andy