MyBatis란?
MyBatis는 객체 지향 언어인 Java의 관계형 데이터베이스 프로그래밍을 좀더 쉽게 도와주는 퍼시스턴스 프레임워크(Persistence Framework, 데이터를 다루는 클래스 및 설정파일 집합)이다. MyBatis는 JDBC를 통해 RDBMS에 엑세스하는 작업을 캡슐화하고 기존 JDBC의 중복작업을 간소화해준다. 또한 XML파일의 형태인 mapper를 통해 프로그램 코드로 부터 SQL 쿼리를 분리되는 환경을 제공하고 Java 객체와 매핑하는 작업을 도와준다. 추가적으로 다음과 같은 특징이 있다.
- 기존 JDBC보다 사용하기 편리
- 다른 ORM(Object Relational Mapping)프레임워크에 비해 추가적인 학습의 부담이 적음
- 복잡한 쿼리 또는 다이나믹한 쿼리를 지원
- 프로그램 코드와 SQL 쿼리의 분리로 인한 간결성 및 유지보수성 향상
- 빠른 개발과 생산성의 향상
MyBatis의 DB Access Architecture
기존 JDBC 프로그래밍의 경우 Repository에서 곧바로 JDBC API쪽으로 접근하여 DB를 연결하였지만, 위의 그림에 나와있듯이 Mybatis을 사용할 경우 Repository와 JDBC API사이에 MyBatis가 위치함으로써 편리한 Access를 제공한다.
MyBatis의 주요 컴포넌트
이름 | 설명 |
MyBatis 설정파일(mybatis-config.xml) | DB의 접속 정보 또는 Mapping 파일의 경로, alias 등등을 설정하는 XML파일 |
SqlSessionFactoryBuilder | MyBatis 설정파일을 읽고 SqlSessionFactory를 생성 |
SqlSessionFactory | SqlSession을 생성 |
SqlSession | 가장 핵심적인 역할을 하는 SQL의 실행이나 트랙잭션 관리를 수행 Thread-safe 하지 않으므로 thread 마다 필요에 따라 생성 |
Mapping 파일(mapper.xml) | SQL과 객체 매핑설정을 하는 XML 파일 |
MyBatis의 DB Access 순서
애플리케이션 실행시 시작되는 프로세스는 다음과 같다.
(1) 애플리케이션이 SqlSessionFactoryBuilder를 위해 SqlSessionFactory를 빌드하도록 요청
(2) SqlSessionFactoryBuilder는 SqlSessionFactory를 생성하기 위해 MyBatis 설정 파일을 읽음
(3) SqlSessionFactoryBuilder는 MyBatis 설정 파일의 정의에 따라 SqlSessionFactory를 생성
클라이언트의 요청에 따라 수행되는 프로세스는 다음과 같다.
(4) 클라이언트의 애플리케이션에 대한 요청
(5) 애플리케이션은 SqlSessionFactoryBuilder를 사용하여 빌드된 SqlSessioFactory에서 SqlSession을 가져옴
(6) SqlSessionFactory는 SqlSession 생성하고 이를 애플리케이션에 반환
(7) 애플리케이션이 SqlSession에서 Mapper Interface 구현 개체를 가져옴
(8) 애플리케이션에서 Mapper Interface의 메소드를 호출
(9) Mapper Interfcae의 구현 개체가 SqlSession메소드를 호출하고 SQL 실행 요청
(10) SqlSession은 Mapping File에서 실행할 SQL을 찾아서 실행
출처
mybatis.org/mybatis-3/ko/index.html
khj93.tistory.com/entry/MyBatis-MyBatis%EB%9E%80-%EA%B0%9C%EB%85%90-%EB%B0%8F-%ED%95%B5%EC%8B%AC-%EC%A0%95%EB%A6%AC
www.youtube.com/watch?v=9b5P4YiyqOY&feature=youtu.be
'Java&Web' 카테고리의 다른 글
[MyBatis] Springboot에 MyBatis-Spring 설정하기(2) (0) | 2021.01.04 |
---|---|
[MyBatis] Springboot에 MyBatis-Spring 설정하기(1) (0) | 2020.12.31 |
[Logging] slf4j(Simple Logging Facade For Java)란 (0) | 2020.12.30 |
[Maven] Maven Profile을 이용한 Springboot 배포서버 별 환경 구성하기 (0) | 2020.12.29 |
[Logging] Springboot에 Log4j2 설정하기 (0) | 2020.12.29 |