본문 바로가기

BE/Spring

[MyBatis] MyBatis 정의 및 주요 메서드

1. Mybatis란 

Mybatis란?
객체와 관계형데이터베이스를 매핑하는퍼시스턴스 프레임워크(ORM, Object Relationship Mapping)이다.

*퍼시스턴스(Persistence, 영속성)란?
프로그램이 종료되더라도 사라지지 않는 데이터의 특성을 말한다. RDBMS 혹은 파일 시스템 등 별도 데이터베이스에 영구적으로 저장하여 데이터가 영속성을 가지는 것을 말한다.

*ORM(Object Relationship Mapping)이란 ?
객체와 RDBMS를 자동으로 매핑해주는 것을 말한다. 객체 ↔ 관계형 데이터베이스
객체 지향 프로그래밍은 객체를 사용하고 관계형 데이터베이스는 테이블을 사용하기 때문에 상호간 필드가 불일치가 존재한다. MyBatis와 같은 ORM을 통해 객체와 관계형데이터베이스를 연동해 SQL문을 생성하여 문제점을 해결한다. ORM에는 JPA, Hibernate, JDBC 가 있다. Hibernate는 최근 Spring boot에 채택되어 사용되고 있다.

 

2. Mybatis 특징

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

 

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

 

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

 

3. MyBatis 주요 컴포넌트

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

 

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

 

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

 

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

SqlSession 메소드
1) selectOne
원형: <T> T selectOne(String statement, Object parameter);
select문이 실행된 하나의 객체를 리턴한다. Null또는 한개 이상을 리턴할 경우 에러가 발생한다.

2) selectList
원형: <E> List<E> selectList(String statement, Object parameter);
select 문이 실행되어 여러개의 객체가 담긴 리스트를 리턴한다.

3) selectMap
원형: <K,V> Map<K,V> selectMap(String statement, Object parameter, String mapKey);
결과 목록이 Map 으로 변환되어 리턴된다.

4) insert
원형: int insert(String statement, Object parameter);
insert문이 실행되어 결과 레코드가 반환된다.

5) update
원형: int update(String statement, Object parameter);
update문이 실행되어 결과 레코드가 반환된다.

6) delete
원형: int delete(String statement, Object parameter);
delete문이 실행되어 결과 레코드가 반환된다.

<T> T selectOne(String statement, Object parameter); <E> List<E> selectList(String statement, Object parameter); <K,V> Map<K,V> selectMap(String statement, Object parameter, String mapKey); int insert(String statement, Object parameter); int update(String statement, Object parameter); int delete(String statement, Object parameter);


5) SqlSessionTemplate
: SqlSession 인터페이스를 상속받아 구현된 클래스이며, 실제 SQL 및 트랜잭션을 실행한다.
: Thead-safe하여 멀티쓰레드환경에도 안전하다.

6) Spring bean XML
: 자바오브젝트와 SQL문을 매핑하기 위해 필요한 여러 파일의 정보를 설정한다.
*JDBC DataSource : Connection을 생성하주는 팩토리 클래스이다.
자바 코드 내 Connection con = dataSouce.getConnection() 으로 Connection을 생성한다.