mybatis 공부 : 설정과 실행

Chooooo·2023년 11월 3일
0

인턴생활

목록 보기
8/19

MyBatisItemRepository

@Repository
@RequiredArgsConstructor
public class MyBatisItemRepository implements ItemRepository {
 private final ItemMapper itemMapper;
 @Override
 public Item save(Item item) {
 itemMapper.save(item);
 return item;
 }
 @Override
 public void update(Long itemId, ItemUpdateDto updateParam) {
 itemMapper.update(itemId, updateParam);
 }
 @Override
 public Optional<Item> findById(Long id) {
 return itemMapper.findById(id);
 }
 @Override
 public List<Item> findAll(ItemSearchCond cond) {
 return itemMapper.findAll(cond);
 }
}
  • ItemRepository 를 구현해서 MyBatisItemRepository 를 만들자.
  • MyBatisItemRepository 는 단순히 ItemMapper 에 기능을 위임한다.

MyBatis 분석

생각해보면 지금까지 진행한 내용 중에 이상한 부분이 있다.

  • ItemMapper 매퍼 인터페이스의 구현체가 없는데 어떻게 동작하는 것일까?

ItemMapper 인터페이스

@Mapper
public interface ItemMapper {
 void save(Item item);
 void update(@Param("id") Long id, @Param("updateParam") ItemUpdateDto 
updateParam);
 List<Item> findAll(ItemSearchCond itemSearch);
 Optional<Item> findById(Long id);
}

  1. 애플리케이션 로딩 시점에 MyBatis 스프링 연동 모듈은 @Mapper 가 붙어있는 인터페이스를 조사한다.
  2. 해당 인터페이스가 발견되면 동적 프록시 기술을 사용해서 ItemMapper 인터페이스의 구현체를
    만든다.
  3. 생성된 구현체를 스프링 빈으로 등록한다.

매퍼 구현체

마이바티스 스프링 연동 모듈이 만들어주는 ItemMapper 의 구현체 덕분에 인터페이스 만으로 편리하게 XML의 데이터를 찾아서 호출할 수 있다.
원래 마이바티스를 사용하려면 더 번잡한 코드를 거쳐야 하는데, 이런 부분을 인터페이스 하나로 매우 깔끔하고 편리하게 사용할 수 있다.
매퍼 구현체는 예외 변환까지 처리해준다. MyBatis에서 발생한 예외를 스프링 예외 추상화인
DataAccessException 에 맞게 변환해서 반환해준다. JdbcTemplate이 제공하는 예외 변환 기능을 여기서도 제공한다고 이해하면 된다.

정리

매퍼 구현체 덕분에 마이바티스를 스프링에 편리하게 통합해서 사용할 수 있다.
매퍼 구현체를 사용하면 스프링 예외 추상화도 함께 적용된다.
마이바티스 스프링 연동 모듈이 많은 부분을 자동으로 설정해주는데, 데이터베이스 커넥션, 트랜잭션과 관련된 기능도 마이바티스와 함께 연동하고, 동기화해준다.

profile
back-end, 지속 성장 가능한 개발자를 향하여

0개의 댓글