본문 바로가기

Programming/Framework

DAY 136. Mybatis 개념 & 동작 구조

 

 

Mybatis

 

 

 

▼ STS로 만든 Maven 프로젝트의 기본 구조

 

 

 

 

영속성 Framework

데이터의 저장, 조회, 변경, 삭제를 다루는 클래스 및 설정 파일들을 라이브러리화 하여 구현한 프레임워크

  • 영속성? : 데이터를 생성한 프로그램이 종료가 된 상태에서도 데이터가 유지되는 속성

 

 

Mybatis 개념 및 흐름

- CRUD를 편리하도록 xml로 구조화한 Mapper 설정 파일을 통해서 JDBC를 구현한 영속성 프레임 워크

- 기존 JDBC를 통해 구현한 부분의 파라미터 설정 (=위치 홀더), 결과 매핑(=SELECT 된 결과 값을 객체로 변환하기)를 XML 설정을 통해 쉽게 구현한다.

 

  1. 기존에 Dao 파일에 자바코드 ,쿼리문도 사용하는데, 데이터베이스에서 사용하기 너무 불편했다. 따로 쿼리문을 관리하는 파일을 운영하므로써 이런 불편함을 없앴다.
  2. 쿼리 수행 시 반복적으로 사용하는 구문(Prestatement, Resultset, while문으로 하나의 행을 객체 만들기 등) 들은 비즈니스 로직이랑 상관이 없다.
  3. 즉, 반복되는 코드를 줄이기 때문에 비즈니스 로직과 개발에 더욱 집중할 수 있다.
  4. 다양한 세팅 작업을 설정 파일에 넣는 것만으로 해결할 수 있다.

 

 

https://mybatis.org/mybatis-3/ko/

 

MyBatis – 마이바티스 3 | 소개

Copyright © 2009–2021MyBatis.org. .

mybatis.org

 

 

 

Mybatis 흐름

- 기존에는 JDBC Template을 통해 SQL 실행해서 Connection 객체 얻어오기, Prestatement 객체, ResultSet 객체 생성, Dao에 직접 쿼리문 작성하기 등 작업을했다면, 

- Dao 에서 Mybatis 설정 파일 (라이브러리)를 통해서 데이터를 얻어와서 데이터 베이스를 실행한다.

 

 


 

Mybatis의 동작 구조

◈ 한 줄 요약

- mybatis-config.xml를 읽어와서 build() 메소드 호출하면 Sesscion Factory 객체를 만든다. 이 객체의 openSession() 를 통해 sql Session 객체를 얻어오고 SQL을 실행한다. 그리고 결과값을 반환하고 이것을 통해 DB에 접근할 수 있다.

 

 

 

◈ 상세 설명

 

1. mybatis-config.xml : Mybatis에 대한 메인 설정 파일(환경 설정 파일)

▶ 어떤 데이터 베이스에 연결할 것인가, 어떤 쿼리문을 가지고 있을 것인가?

 

2. mapper.xml : 실제로 실행시킬 쿼리문을 가지고 있는 파일(실행할 sql 문을 정의해 놓는 설정 파일)

namespace 속성을 가지고 구분한다. mapper를 config.xml에 등록한다. 추가되는 쿼리문도 등록한다.

 

3. Session Factory Builder(Object) : build() 메소드 제공, 디자인 패턴을 통해서 Session Factory 객체를 만들어서 반환한다.

Session 객체를 만들기 위한 Session Factory 객체를 만들기 위한 객체. 앞서 작성한 config 파일을 읽어온다 → build() 메소드 호출 → Session Factory 객체 생성

 

4. Session Factory(Object) : openSession() 메소드를 제공, mybatis-config.xml을 참고해서 실제 데이터베이스에 연결하고 쿼리문 수행할 수 있는 SQL Session 객체반환한다.

Session 객체를 얻기 위한 객체. openSession() 메소드 호출 → Session 객체 생성

 

5. Session(Object) : a.k.a SQL Session. (like 기존의 Connection 객체). mapper.xml에 작성된 쿼리문을 통해 결과 값을 반환. selectOne, selectList, selectMap, insert, update, delete 메소드를 통해 데이터 베이스에 작업을 수행한다.

▶ 데이터 베이스와 연결 인증이 된 Connection 객체, Session을 통해 mapper.xml에 작성된 쿼리를 실행하여 결과 값을 반환한다.

 

 

즉, Session Factory Builder는 빌드 패턴을 통해서 Session 객체를 만든다.

 

먼저, build() 메소드에 mybatis-config.xml 파일을 넘겨주면, 설정 파일 내용을 참고하여 SQL Session 객체를 만들 수 있는 Session Factory 객체를 만들어서 반환해준다.

 

그리고 Session Factory 객체openSession() 메소드를 통해서 xml 내용을 참고해서 실제 데이터베이스에 연결하고 쿼리문을 수행할 수 있는 SQL Session 객체를 리턴해준다.

 

그 후, SQL Session객체에서 메소드들을 통해서 mapper.xml에 작성했던 쿼리문을 수행하게 되고, 그 결과를 리턴받게 되는 것이다.

 

 

 

(참고) ibatis || Mybatis

ibatis는 Mybatis가 Google 팀으로 이동하기 이전 버전이다. ibatis는 현재 서비스 중단된 상태이고, 유지 보수만을 위해 라이브러리만 제공한다.

주요 차이점은

  1. Java 요구 버전이 다르다.
  2. 패키지 구조가 다르다.
  3. Mybatis는 동적 쿼리를 지원한다.
  4. 사용 용어가 일부 변경되었다.
  5. Mybatis는 자바 어노테이션을 지원한다.

 

 

더보기

MyBatis는 개발자가 지정한 SQL, 저장프로시저 그리고 몇가지 고급 매핑을 지원하는 퍼시스턴스 프레임워크이다. MyBatis의 특징으로는 SQL문장을 기존 DAO로부터 독립시킨다는 것, DBMS의 자료형과 연결짓는 데이터 타입을 제공하는 것, 동적인 SQL을 제공하는 것, 트랜잭션에 관한 설정을 config xml 파일로 별도 관리하는 것, 다양한 프로그래밍언어를 지원하는 것 등이 있다.

먼저, SQL문장을 DAO로부터 Mapper xml 파일로 분리함으로써 java class 소스코드 구현이 간편해지며,

DBMS의 자료형과 연결짓는 데이터 타입을 제공함으로써 java 애플리케이션과 DBMS간 데이터 전송 시 무결성을 유지하고 별도의 파싱로직을 구현하지 않아도 된다. 또한 동적인 SQL 구문을 제공하여

전달인자가 매번 다를 수 있는 여러 상황에 대한 SQL 구문도 처리가 가능하며 config xml을 통해 DBMS 개발 환경에 대한 설정이 변경될 때 빠르게 대처할 수 있다. 마지막으로 여러 프로그래밍언어를 지원하

여 java 이외의 개발 상황에서도 쉽게 적응하여 데이터 전송 로직을 구현할 수 있다.