본문 바로가기
카테고리 없음

MYBATIS 개념

by cook_code 2023. 5. 18.
반응형

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을 가져와 실행

 

참고 블로그

 

[MyBatis] MyBatis란? 개념 및 데이터구조

MyBatis란? 객체 지향 언어인 자바의 관계형 데이터베이스 프로그래밍을 좀 더 쉽게 할 수 있게 도와 주는 개발 프레임 워크로서 JDBC를 통해 데이터베이스에 엑세스하는 작업을 캡슐화하고 일반 SQ

khj93.tistory.com

 

반응형