본문 바로가기
DB & SQL

[MyBatis] MyBatis란?

by 무사뎀벨레 2024. 3. 14.

 

 

 

MyBatis 로고 : https://mybatis.org/images/mybatis-logo.png

 

 

 

 

 

 

 

MyBatis란?



MyBatis는 객체 지향 언어인 자바의 관계형 데이터베이스 프로그래밍을 좀 더 쉽게 할 수 있게 도와주는 개발 프레임 워크로서 

JDBC를 통해 데이터베이스에 액세스 하는 작업을 캡슐화하고 일반 SQL 쿼리, 저장 프로 시저 및 고급 매핑을 지원하며 모든 JDBC 코드 및 매개 변수의 중복작업을 제거합니다. 

 

즉, Spring Framework에서 제공하는 JDBC 라이브러리를 보다 쉽게 작업할 수 있도록 만든 라이브러리를 말하며

Mapper의 역할을 확장하여 쿼리문 작성을 모두 Mapper에서 할 수 있도록 지원하는 Spring Framework의 대표적 JDBC 라이브러리입니다.


Mybatis에서는 프로그램에 있는 SQL쿼리들을 한 구성파일에 구성하여 프로그램 코드와 SQL을 분리할 수 있는 장점을 가지고 있습니다.

 

 

 

 

 


MyBatis 특징


MyBatis의 사용 목적은 데이터베이스 쿼리와 프로그래밍 언어 코드를 분리하여 유지보수성생산성을 높이는 것입니다.

프로그램 코드와 SQL 쿼리의 분리코드의 간결성유지보수성을 향상시킨다는 특징을 가지고 있습니다.

 

resultType, resultClass등 Vo를 사용하지 않고 조회결과를 사용자 정의 DTO, MAP 등으로 맵핑하여 사용할 수 있습니다.

그렇기 때문에 MyBatis 를 사용하여 빠른 개발이 가능해 생산성이 향상됩니다.

 

하지만, 복잡한 쿼리나 다이나믹한 쿼리에 강하지만 반대로 비슷한 쿼리를 남발하게 되는 단점이 있습니다.

 

 

유연성

SQL 쿼리를 직접 작성할 수 있으므로 매우 유연하고, MyBatis는 동적 쿼리를 작성할 수 있습니다.

동적 쿼리란, 실행 시점에 조건에 따라 SQL 쿼리를 동적으로 생성하는 것을 말합니다.
이는 데이터베이스의 검색 조건이나 결괏값 등이 동적으로 변화할 때 유용하게 사용됩니다.

 

MyBatis에서는 동적 쿼리를 사용하기 위해 다음과 같은 태그를 사용할 수 있습니다.

<if>, <choose>, <when>, <otherwise>, <foreach>

 

 

아래는 MyBatis에서 동적쿼리를 사용하는 예시입니다.

<select id="getMemberList" resultType="Member">
  SELECT * FROM members
  <where>
    <if test="mem_id != null">
      AND memberId = #{mem_id}
    </if>
    <if test="mem_email != null">
      AND memberEmail = #{mem_email}
    </if>
  </where>
</select>

 

위 코드의 <if test="mem_id != null"> 부분은 

mem_id의 값이 null이 아니라면, AND memberId = #{mem_id} 코드에서 mem_id을 사용해서 쿼리를 동적으로 생성하는 것을 보여줍니다.

 

간결성

MyBatis는 SQL 쿼리와 프로그래밍 언어 코드를 분리하기 때문에 코드가 간결해져 유지보수에 용이합니다.

 

성능

MyBatis는 캐시 기능을 제공하여 데이터베이스 연산 속도를 높일 수 있습니다.

 

다양한 데이터베이스 지원

MyBatis는 다양한 데이터베이스에 대한 지원을 제공합니다.

 

 

 

 

 

 

 

 

MyBatis의 구성 요소


 

MyBatis configuration file

MyBatis3의 작업 설정을 설명하는 XML 파일입니다.
데이터베이스의 연결 대상, 매핑 파일의 경로, MyBatis3의 작업 설정 등과 같은 세부 사항을 설명하는 파일입니다. 

Spring과 통합하여 사용할 때 데이터베이스의 연결 대상과 매핑 파일 경로 설정을 구성 파일에 지정할 필요가 없습니다. 

그러나 MyBatis3의 기본 작업을 변경하거나 확장할 때 설정이 수행됩니다.

 

org.apache.ibatis.session.SqlSessionFactoryBuilder 

MyBatis3 구성 파일을 읽고 생성하는 SqlSessionFactory 구성 요소입니다. 이 구성 요소는 스프링과 통합되어 사용할 때 애플리케이션 클래스에서 직접 처리하지 않습니다.

 

org.apache.ibatis.session.SqlSessionFactory  

SqlSession을 생성하는 구성 요소입니다. 이 구성 요소는 스프링과 통합되어 사용할 때 애플리케이션 클래스에서 직접 처리하지 않습니다.

 

org.apache.ibatis.session.SqlSession

SQL 실행 및 트랜잭션 제어를 위한 API를 제공하는 구성 요소입니다. MyBatis3를 사용하여 데이터베이스에 액세스 할 때 가장 중요한 역할을 하는 구성 요소입니다. 이 구성 요소를 스프링과 통합하여 사용할 경우 애플리케이션 클래스에서 직접 처리하지 않습니다.

 

Mapper interface  

typeafe에서 매핑 파일에 정의된 SQL을 호출하는 인터페이스입니다. MyBatis3는 매퍼 인터페이스에 대한 구현 클래스를 자동으로 생성하므로 개발자는 인터페이스만 생성하면 됩니다.

 

Mapping file

SQL 및 O/R 매핑 설정을 설명하는 XML 파일입니다.

 

 

 

 

 

 

 

 

 

 

MyBatis 주요 구성 요소의 데이터베이스 접근 과정


https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&fname=https%3A%2F%2Ft1.daumcdn.net%2Fcfile%2Ftistory%2F998B674B5BBB668C20

 

 

 

(1)~(3)응용 프로그램 시작 시 수행되는 프로세스를 나타내며
, (4)~(10)은 클라이언트의 각 요청에 대해 수행되는 프로세스를 나타냅니다.


(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을 실행

 

 

 

 

 

반응형

댓글