MYBATIS 개념
자바 오브젝트와 SQL 사이의 자동 매핑 기능을 지원하는 ORM(Object Relational Mapping) 프레임워크
MYBATIS 장점
- SQL을 그대로 이용하면서 JDBC 코드 작성의 불편함을 제거하고 도메인 객체나 VO 객체를 중심으로 개발 가능하다.
- 쉬운 접근성과 코드의 간결함 (JDBC의 모든 기능을 MYBATIS가 대부분 제공한다.)
- SQL문과 프로그래밍 코드의 분리 (SQL 변경 시 자바 코드 수정 혹은 컴파일이 필요하지 않다. )
- 다양한 프로그래밍 언어로 구현이 가능하다.
MYBATIS - DB ACESS PEOCESS
> 프로그램 시작 시 수행되는 프로세스
1. 응용 프로그램이 SqlsessionFactoryBuilder를 위해 SqlSessionFactory를 빌드하도록 요청
2. SqlsessionFactoryBuilder는 SqlSessionFactory를 생성하기 위한 MyBatis 구성 파일을 읽음
3. SqlsessionFactoryBuilder는 MyBatis 구성 파일의 정의에 따라 SqlSessionFactory를 생성
> 클라이언트 요청에 따라 수행되는 프로세스
4. 클라이언트가 응용 프로그램에 대한 프로세스를 요청
5. 응용 프로그램은 SqlsessionFactoryBuilder를 사용하여 빌드된 SqlSessionFactory에서 SqlSession을 가져옴
6. SqlSessionFactory는 SqlSession을 생성하고 이를 애플리케이션에 반환
7. 응용 프로그램이 SqlSession에서 매처 인터페이스의 구현 개체를 가져옴
8. 응용 프로그램이 매퍼 인터페이스 메서드를 호출
9. 매퍼 인터페이스의 구현 개체가 SqlSession 메서드를 호출하고 SQL 실행 요청
10. SqlSession은 매핑 파일에서 실행할 SQL을 가져와 SQL을 실행
Mybatis-Spring의 주요 컴포넌트
구성 요소 / 파일 | 설명 |
org.mybatis.spring.SqlSessionFactoryBean | MyBatis 구성 파일 없이 SqlSessionFactory를 빌드할 수 있다. |
org.mybatis.spring.mapper.MapperFactoryBean | 싱글톤 구성요소에 DI를 적용할 수 있다. - 스레드 세이프 |
org.mybatis.spring.SqlSessionTemplate | SqlSession 인터페이스를 구현하는 Singleton 버전의 SqlSession 구성 요소 - 스레드 세이프 |
이름 | 설명 |
MyBatis 설정 파일 mybatis-config 또는 SqlMapConfig.xml | DB접속정보, Mapping 파일 경로, alias 등을 설정하는 XML 파일, vo 객체의 정보를 저장 |
SqlSessionFactoryBuilder | MyBatis 설정파일을 읽고 SqlSessionFactory를 생성 Spring Bean으로 등록해야 한다. |
SqlSessionFactory | SqlSession을 생성 |
SqlSession | 가장 핵심적인 역할을 SQL의 실행이나 트랜잭션 관리를 수행 Thread-Safe 하지 않으므로 thread 마다 필요에 따라 생성 |
SqlSessionTemplate | SQL 실행이나 트랜잭션 관리를 실행한다. SqlSession 인터페이스를 구현 Spring Bean으로 등록해야 한다. |
Mapping File (mapper.xml) | SQL과 객체 매핑 설정을 하는 XML 파일 |
Spring Bean 설정 파일 (mybatisBeans.xml) | SqlSessionFactoryBean을 Bean 등록할 때 DataSource 정보와 MyBatis Config 파일정보, Mapping 파일의 정보를 함께 설정한다. SqlSessionTemplate을 Bean으로 등록 |
MYBATIS-SPRING 컴포넌트 구조
* 컴포넌트 : 재사용 가능한 웹의 구성요소
> 프로그램 시작 시 수행되는 프로세스
1. 응용 프로그램이 SqlsessionFactoryBuilder를 위해 SqlSessionFactory를 빌드하도록 요청
2. SqlsessionFactoryBuilder는 SqlSessionFactory를 생성하기 위한 MyBatis 구성 파일을 읽음
3. SqlsessionFactoryBuilder는 MyBatis 구성 파일의 정의에 따라 SqlSessionFactory를 생성,
생성된 SqlSessionFactory는 Spring DI 컨테이너에 의해 저장
4. MapperFactoryBean은 안전한 SqlSession(SqlSessionTemplate) 및 스레드 안전 매퍼 개체(Mapper 인터페이스의 프록
시 객체)를 생성, 생성되는 매퍼 객체는 스프링 DI 컨테이너에 의해 저장되며 서비스 클래스 등에 DI가 적용됨.
매퍼 개체는 안전한 SqlSessionTemplate을 사용하여 thread-safe 구현을 제공
> 클라이언트의 요청에 대해 수행되는 프로세스
5. 클라이언트가 응용 프로그램에 대한 프로세스를 요청
6. 애플리케이션(서비스)은 DI 컨테이너에서 주입한 매퍼 개체(매퍼 인터페이스를 구현하는 프록시 개체)의 방법을 호출
7. 매퍼 객체는 호출된 메소드에 해당하는 SqlSessionTemplate 메서드를 호출
8. SqlSessionTemplate은 프록시 사용 및 안전한 SqlSession 메서드를 호출
9. 프록시 사용 및 스레드 안전 SqlSession은 트랜잭션에 할당된 MyBatis3 표준 SqlSession을 사용
10. SqlSessionFactory는 MyBatis3 표준 SqlSession을 반환, 반환된 MyBatis3 표준 SqlSession이 트랜잭션에 할당되기
때문에 동일한 트랜잭션 내에 있는 경우 새 SqlSession을 생성하지 않고 동일한 SqlSession을 사용,
on 메서드를 호출하고 SQL 실행을 요청
11. MyBatis3 표준 SqlSession은 매핑 파일에서 실행할 SQL을 가져와 실행
참고 블로그