[꼼꼼한 개발자] 꼼코더
14. 코드로 배우는 스프링 웹 프로젝트 - [스프링과 DataBase 연동] - 스프링과 연동 처리 본문
14. 코드로 배우는 스프링 웹 프로젝트 - [스프링과 DataBase 연동] - 스프링과 연동 처리
꼼코더 2023. 1. 2. 19:34🍃 스프링과 연동 처리
SqlSessionFactory를 이용해서 코드를 작성해도
직접 Connection 얻고 JDBC 코딩이 가능은 하다. 하지만
우리는 좀 더 편하게 작업하기 위해 SQL 처리 설정을 분리하고
자동으로 처리 되는 방식을 이용해야 한다.
이를 위해 Mybatis의 Mapper라는 존재를 작성해야 한다.
Mapper는 쉽게 말해 SQL과 그에 대한 처리를 지정하는 역할이다.
Mybatis-Spring을 이용하면 Mapper를 XML과 인터페이스 + 어노테이션 형태로 작성할 수 있다.
🔌 Mapper 인터페이스
Mapper를 작성하는 작업은 XML도 이용할 수 있지만
이번 예제에서는 최소한의 코드를 작성하는 Mapper 인터페이스를 사용하겠다.
👨🏻💻 TimeMapper 예제 추가
mapper 패키지 생성 → TimeMapper 인터페이스 추가
TimeMapper 인터페이스에는 MyBatis의 어노테이션을 이용해서 SQL을 메서드에 추가한다.
⚙️ Mapper 설정
Mapper 작성 후 MyBatis가 동작시 Mapper를 인식할 수 있게 root-context.xml를 추가적으로 설정한다.
가장 간단한 방식인 <mybatis:scan>으로 진행하자.
👨🏻💻 root-context.xml 수정
root-context.xml 파일 → 하단 ‘Namespaces’ 항목 → mybatis-spring 선택 → 소스 추가
<mybatis-spring:scan> 태그의 base-package 속성은
지정된 패키지의 모든 Mybatis 관련 어노테이션을 찾아서 처리한다.
☕️ Java 설정을 이용하는 경우
클래스 선언부에 mybatis-spring에서 사용하는 @MapperScan을 이용해서 처리
👨🏻💻RootConfig 클래스 수정
📑 Mapper 테스트
Mybatis-Spring은 Mapper 인터페이스를 이용해서 실제 SQL 처리가 되는 클래스를 자동으로 생성한다.
개발자는 인터페이스와 SQL만으로 모든 JDBC 처리를 끝낼 수 있다.
👨🏻💻 TimeMapperTests 클래스 작성
💁🏻♂️ 결과
TimeMapperTests는 TimeMapper가 정상적으로 사용이 가능한지 알아보기 위한 테스트 코드
정상 동작시 스프링 내부에 TimeMapper타입으로 만들어진 스프링 객체(bean)가 존재한다는 뜻
timeMapper.getClass().getName()은 실제 동작하는 클래스의 이름을 확인해 준다.
실행 결과를 보면 개발시 인터페이스만 만들어주었는데
내부적으로 적당한 클래스가 만들어진 것을 확인할 수가 있다.
(이에 대한 자세한 이야기는 스프링 AOP에서..)
🧹 최종 정리
- Mybatis의 Mapper는 더 편하게 작업하기 위해 SQL 처리 설정을 분리하고 자동으로 처리 되는 방식이다.
- Mapper는 쉽게 말해 SQL과 그에 대한 처리를 지정하는 역할
- Mybatis-Spring을 이용하면 Mapper를 XML과 인터페이스 + 어노테이션 형태로 작성할 수 있다.
- MyBatis의 어노테이션을 이용해서 SQL을 메서드에 추가할 수 있다.(@SELECT 등)
- <mybatis-spring:scan> 태그의 base-package 속성은 지정된 패키지의 모든 Mybatis 관련 어노테이션을 찾아서 처리한다.
- JAVA로 mapper 처리시 mybatis-spring에서 사용하는 @MapperScan을 이용한다.
- Mybatis-Spring은 Mapper 인터페이스를 이용하여 실제 SQL 처리가 되는 클래스를 자동으로 생성한다. 그럼 개발자는 인터페이스와 SQL만으로 모든 JDBC 처리를 끝낼 수 있다.
위 내용은 코드로 배우는 스프링 웹 프로젝트 교재를 참고하여 작성되었습니다.