본문 바로가기
코딩 공부/web & Java

[MyBatis] MyBatis

by 현장 2022. 12. 14.

MyBatis

객체 지향 언어인 자바의 관계형 데이터베이스 프로그래밍을 좀 더 쉽게 할 수 있게 도와 주는 개발 (ORM, Object Relationship Mapping) 퍼시스턴스 프레임워크로서 JDBC를 통해 데이터베이스에 엑세스하는 작업을 캡슐화하고 일반 SQL 쿼리, 저장 프로 시저 및 고급 매핑을 지원하며 모든 JDBC 코드 및 매개 변수의 중복작업을 제거 합니다. Mybatis에서는 프로그램에 있는 SQL쿼리들을 한 구성파일에 구성하여 프로그램 코드와 SQL을 분리할 수 있는 장점을 가지고 있습니다.

퍼시스턴스(Persistence, 영속성)란?
프로그램이 종료되더라도 사라지지 않는 데이터의 특성을 말한다. RDBMS 혹은 파일 시스템 등 별도 데이터베이스에 영구적으로 저장하여 데이터가 영속성을 가지는 것을 말한다.
ORM(Object Relationship Mapping)이란?
객체와 RDBMS를 자동으로 매핑해주는 것을 말한다. (객체 ↔ 관계형 데이터베이스)
객체 지향 프로그래밍은 객체를 사용하고 관계형 데이터베이스는 테이블을 사용하기 때문에 상호간 필드가 불일치가 존재한다. MyBatis와 같은 ORM을 통해 객체와 관계형데이터베이스를 연동해 SQL문을 생성하여 문제점을 해결한다. ORM에는 JPA, Hibernate, JDBC 가 있다. Hibernate는 최근 Spring boot에 채택되어 사용되고 있다.

MyBatis 특징

1. SQL문과 코드를 분리한다.
→ 자바 코드에 복잡하게 얽혀있는 SQL문을 XML파일에 별도로 분리하여 코드의 간결함과 편리함을 향상시켰다.

 

2. JDBC 기능 제공한다.
MyBatis는 JDBC(Java Database Connectivity)가 지원하는 거의 모든 기능들을 지원한다. JDBC로 처리했던 코드와 파라미터 등을 매핑하여 편리함을 향상시켰다.

 

3. 다양한 언어를 지원한다.
 Java 뿐만 아니라 Ruby, C# 등 다양한 언어를 지원한다.

Mybatis 아키텍처

DB vender에서 제공하는 JDBC Driver가 있다. JDBC만을 사용하는 어플리캐이션은 Application Modules에서 JDBC Interfaces를 바로 호출하지만 JDBC Api를 감싸서 개발자가 조금더 편리하게 접근할 수 있도록 도와주는 것이 Mybatis이다. 서비스에서 DAO를 호출하고 DAO에서 Mybatis를 사용하게된다.

Mybatis를 사용하는 데이터 액세스 계층

Mybatis는 Data Access Layer에서 사용하는 프레임워크이다. Controller에서 Service를 호출하고 Service가 DAO계층에 있는 메소드를 호출하면 DAO에서 Mybatis를 호출한다.

MyBatis 주요 컴포넌트

SqlSession Factory Builder, SqlSession Factory, SqlSession이 있으며 MyBatis Config File을 XML파일로 작성해두고 보라색 부분들만 개발자가 작성하면된다.

Application에서 SqlSession Factory Builder를 호출하고 SqlSession Factory Builder가 Config File을 읽고 Factory를 생성해준다. 개발자가 DB에 insert하거나 Read하는 메서드를 호출하면 SqlSession Factory가 SqlSession를 생성하고 개발자가 작성한 Application코드에 반환해준다. SqlSession은 개발자가 작성한 SQL문을 호출해주는 기능을 해준다고 생각하면된다.

 

1. SqlSessionFactoryBuilder
 - SqlSessionFactory를 생성하는 클래스이다.

 

2. SqlSessionFactory (interface)
 - SqlSession 객체를 실행하는 팩토리 클래스(인터페이스)이다.

 

3. SqlSessionFactoryBean
 - config 파일을 바탕으로 SqlSessionFactory를 생성하는 클래스이다.

 

4.  SqlSession 
 - mapper.xml에 등록된 SQL문을 실행하고 트랜잭션을 관리하는 클래스(인터페이스)이다.
 - Spring 프로젝트의 DAO에 직접 접근하여 쿼리를 수행한다.
 - Thread-not-safe하여 싱글쓰레드환경에 적합하고, 쓰레드를 매번 생성해야 한다.

 

5. Mapping파일(user.xml) 

- SQL문과 OR Mapping을 설정한다.

 

6. MyBatis 설정파일(SqlMapConfig.xml)

 - 데이터베이스의 접속 주소 정보나 Mapping 파일의 경로 등의 고정된 환경정보를 설정한다.

Mybatis-Spring의 주요 컴포넌트

  • MyBatis 설정파일(SqlMapConfig.xml) : VO 객체의 정보를 설정한다.
  • SqlSessionFactory : MyBatis 설정파일을 바탕으로 SqlSessionFactory를 생성한다, Spring Bean으로 등록해야 한다.
  • SqlSessionTemplate : 핵심적인 역할을 하는 클래스로서 SQL 실행이나 트랜잭션 관리를 실행한다. SqlSession 인터페이스를 구현하며, Thread-safe 하다. Spring Bean으로 등록해야 한다.
  • Mapping 파일 (user.xml) : SQL문과 OR Mapping을 설정한다.
  • Spring Bean 설정 파일 (mybatisBeans.xml) : SqlSessionFactoryBean을 Bean 등록할 때 DataSource 정보와 MyBatis Config 파일정보, Mapping 파일의 정보를 함께 설정한다. SqlSessionTemplate을 Bean으로 등록한다.

'코딩 공부 > web & Java' 카테고리의 다른 글

[Java] String, StringBuffer, StringBuilder  (0) 2023.02.06
[Spring] Dispatcher-Servlet  (0) 2022.12.17
[Spring] Spring  (0) 2022.11.28
[Java] Maven  (0) 2022.11.28
[Web] Component  (0) 2022.11.18