MyBatis란?
Java Persistence framework의 SQL Mapper 방식 중 하나로, XML 서술자나 annotation을 사용해 저장 프로시저나 SQL문으로 객체들을 연결시킴
객체 지향 언어인 자바의 관계형 데이터베이스 프로그래밍을 좀 더 쉽게 할 수 있게 도와 주는 개발 프레임 워크로서 JDBC를 통해 데이터베이스에 엑세스하는 작업을 캡슐화하고 일반 SQL 쿼리, 저장 프로 시저 및 고급 매핑을 지원하며 모든 JDBC 코드 및 매개 변수의 중복작업을 제거
MyBatis의 장점
손쉽게 자바 코드와 SQL 문을 분리해줄 수 있을뿐만 아니라 MyBatis 에서 제공하는 여러가지 추가적인 기능을 이용해 데이터베이스를 좀 더 유연하게 사용할 수 있다.
MyBatis를 사용하면 JDBC 프로그래밍 없이 DB와 연동할 수 있다. 개발자가 JDBC API를 직접 호출하지 않고 MyBatis가 대신 호출하는 방식이다.
MyBatis의 핵심은 개발과 유지보수가 쉽도록 소스 코드에 내장돼있는 SQL을 별도의 파일로 분리하는 것이다.
또한 단순하고 반복적인 JDBC 코드를 캡슐화하여 데이터베이스 프로그래밍을 간결하게 만든다.
MyBatis Mapper 파일의 namespace엔 Mapper 인터페이스의 경로를 적어주며 id 가 Mapper 인터페이스의 메소드 이름과 매핑된다.
MyBatis 설정
@Configuration :이 자바 클래스가 설정관련 파일이라고 설정
@MapperScan : mapper.xml 파일들이 바라볼 기본 패키지 위치를 지정
모든 MyBatis 애플리케이션은 SqlSessionFactory 인스턴스를 사용합니다. 이후 빈을 생성하여 sessionFactory에 Mapper의 위치를 지정해 줍니다.
MyBatis 를 이용할 때 SQL 문을 사용하는 방식
1. XML만을 이용해서 SQL 문을 설정, DAO 에서는 XML 을 찾아서 실행하는 코드를 작성하는 방식
장점 : SQL 문은 별도의 XML 로 작성되기 때문에 SQL 문의 수정이나 유지보수에 적합
단점 : 개발 시 코드의 양이 많아지고, 복잡성이 증가
2. annotation과 interface만을 이용해서 SQL 문을 설정
장점 : 별도의 DAO 없이도 개발이 가능하기 때문에 생산성이 크게 증가
단점 : SQL 문을 애노테이션으로 작성하므로, 매번 수정이 일어나는 경우 다시 컴파일
3. interface와 XML 로 작성된 SQL 문의 활용
장점 : 간단한 SQL 문은 annotation으로, 복잡한 SQL 문은 XML 로 처리하므로, 상황에 따라서 유연하게 처리
단점 : 개발자에 따라 개발 방식의 차이가 있을 수 있기 때문에, 유지보수가 중요한 프로젝트의 경우 부적합
* 국내의 대부분 프로젝트는 XML 만을 이용해서 SQL 문을 작성하고, 별도의 DAO 를 만드는 방식을 선호한다고 함.
최대장점은 SQL 문을 온전히 분리해서 처리하기 때문에, 향후 SQL 문의 변경이 일어날 때, 대처가 수월하다는 점
MyBatis를 XML을 사용하여 작성하는 경우의 코딩순서
1. 테이블 생성 및 개발 준비
2. 테이블 생성 및 기타 데이터베이스 관련 설정
3. 도메인 객체의 설계 및 클래스 작성 (~VO.java 파일)
- getter , setter , toString 생성
4. DAO 인터페이스의 작성
5. 실행해야 하는 기능을 인터페이스로 정의
6. XML Mapper 의 생성과 SQL 문 작성
- src/main/resources/mapper 하위에 작성
- MyBatis에서 SQL문을 저장하는 존재를 Mapper라고 표현
7. XML 작성 및 SQL 작성
8. MyBatis 에서 작성된 XML Mapper 를 인식하도록 설정
root-context.xml 파일을 열어서 property name mapperLocations 를 추가함
ex) 작성된 mappers 폴더 내에 어떤 폴더이건 관계없이 파일의 이름이 'Mapper.xml' 로 끝나면 자동으로 인식하도록 설정
<property name="mapperLocations" value="classpath:mappers/**/*Mapper.xml"></property>
9. DAO 구현
MyBatis 에서 DAO 를 이용하는 경우는 SqlSessionTemplate 이라는 것을 이용해서 DAO 를 구현하므SqlSessionTemplate 을 설정하는 작업부터 함
root-context.xml 를 열어서 sqlSession bean 을 추가함
<bean id="sqlSession" class="org.mybatis.spring.SqlSessionTemplate" destroy-method="clearCache">
<constructor-arg name="sqlSessionFactory" ref="sqlSessionFactory"></constructor-arg>
</bean>
10. DAO 인터페이스를 구현한 클래스 작성
11. 스프링상에 DAO 등록 및 테스트
Reference