샘플 코드

중요 전체 웹 애플리케이션 서버에서 Spring을 사용하는 방법을 알고 싶다면 JPetstore 6 demo 를 참조하십시오.

MyBatis-Spring repository 에서 샘플 코드를 확인할 수 있다.

모든 샘플은 JUnit5 에서 실행할 수 있다.

샘플 코드는 트랜잭션 서비스가 data access layer 에서 도메인 개체를 가져 오는 일반적인 디자인을 보여준다.

다음 FooService.java 는 서비스처럼 작동한다.

@Transactional
public class FooService {

  private final UserMapper userMapper;

  public FooService(UserMapper userMapper) {
    this.userMapper = userMapper;
  }

  public User doSomeBusinessStuff(String userId) {
    return this.userMapper.getUser(userId);
  }

}

이것은 트랜잭션 빈이다. 따라서 어떤 메서드든 실행이 되면 트랜잭션이 시작되고 예외가 발생하지 않았을 때 커밋된다. 트랜잭션은 @Transactional annotation 을 통해 설정할 수 있다. 이것은 필수가 아니다. Spring이 제공하는 다른 방법을 사용하여 트랜잭션을 구분할 수 있다.

이 서비스는 MyBatis로 이루어진 DAO layer 를 호출한다. 이 layer는 런타임시 MyBatis에 의해 작성되고 Spring에 의해 서비스에 주입되는 동적 프록시와 함께 사용되는 UserMapper.java 인터페이스로 구성된다.

public interface UserMapper {

  User getUser(String userId);

}

단순함을 위해서 DAO가 인터페이스와 그 구현체로 만들어진 DAO 시나리오를 위해 UserMapper.java 인터페이스를 사용했지만, 이 경우 대신 UserDao.java라는 인터페이스를 사용하는 것이 더 적절하다.

매퍼 인터페이스를 찾고 Spring에 등록하고 서비스 빈에 주입하는 여러 가지 방법을 살펴본다.

시나리오

샘플 테스트 설명
SampleMapperTest.java UserMapper 구현체를 동적으로 빌드 할 MapperFactoryBean에 기반한 기본 구성을 보여준다.
SampleScannerTest.java MapperScannerConfigurer 를 사용하여 어떻게 프로젝트의 모든 매퍼들을 자동으로 검색되도록 하는 방법을 보여준다.
SampleSqlSessionTest.java Spring에서 관리하는 SqlSession을 사용하여 DAO를 코딩하고 자체적인 구현체인 UserDaoImpl.java 를 제공하는 방법을 보여준다.
SampleEnableTest.java 스프링의 @Configuration@MapperScann annotation을 함께 사용하여 매퍼를 자동으로 검색하는 방법을 보여준다.
SampleNamespaceTest.java 커스텀 MyBatis XML 네임스페이스를 사용하는 방법을 보여준다.
SampleJavaConfigTest.java 스프링의 @Configuration을 사용하여 MyBatis 빈들을 수동적으로 생성하는 방법을 보여준다.
SampleJobJavaConfigTest.java Java Configuration을 이용하여 Spring Batch에서 어떻게 ItemReaderItemWriter를 사용하는지 보여준다.
SampleJobXmlConfigTest.java XML Configuration을 이용하여 Spring Batch에서 어떻게 ItemReaderItemWriter를 사용하는지 보여준다.

MyBatis-Spring이 실제로 어떻게 다르게 작동하는지 보려면 applicationContext.xml 파일을 살펴보십시오.