목차)

  1. Mybatis Framework이란?
  2. Mybatis의 구성요소
  3. MyBatis3 주요 구성 요소가 Database Access하는 순서
  4. MyBatis-Spring 컴포넌트 구조

1. Mybatis Framework이란?

Mybatis Framework : Java 관계형 DB 프로그래밍을 도와주는 프레임워크이다.

 

특징은 아래와 같다:

1)     RDB(Relational Database) 프로그래밍을 쉽게 해주는 Java Persistence Framework.

2)    JDBC(Java Database Connectivity) 편하게 사용할 있음

3)     SQL문과 자바 객체 간의 자동 Mapping 기능 제공

4)     간단한 코드로 DB연동이 가능하다.

5)     JDBC 통해 데이터베이스에 엑세스 하는 작업을 캡슐화한다

6)     SQL문을 자바코드에서 완전히 분리하여 별도의 파일로 분리해서 관리하게 한다. (ex. board-mapper.xml)

7)     Spring 연동하여 자동화 처리가 가능하다

8)     유지보수성 향상(동적 SQL 사용): SQL문을 분리했기 때문에 유지보수성이 뛰어나다. (sql 문을 그대로 이용할 있다

 

원래는 DAO DB 직접 소통하여 데이터를 가져오고 하였다면 이제는 작업을 나눠서 MyBatis DAO DB 사이의 중간다리 역할을 한다.

 

2. [MyBatis의 구성]


1. MyBatis 경설정 파일(SqlSessionConfig.xml) MyBatis가 JDBC 코드를 실행하는데 필요한 전반에 걸친 세팅을 한다
- TypAlias 설정 : 사용할 모델 클래스에 대한 별칭 설정. <typeAlias>
-  DB 연동을 위한 설정 : DataBase에 어떻게 접속할 것인지에 대한 설정. <enviroment>
- Mapper 설정 파일 등록 : 매핑 설정이 어디있는지. <mapper>

2. Mapper 설정 파일(member.xml, company.xml) : Sql문과 관련된 설정을 하는 파일로서 MyBatis 설정파일(SqlSessionConfig.xml)에 등록을 하여야 한다.
- 주요 구성 요소
         1) SQL문 등록 태그
               - SQL문 태그의 구성 요소 : Parameter, Result, ,SQL문 등록
               - SQL 태그 : insert, delete, update, select
               - 공통 SQL문 설정 태그 : <sql>
          2) select 결과 처리 설정
               - <resultMap>

구성 요소 / 구성 파일 

 설명

 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 파일입니다.

3. MyBatis3 주요 구성 요소가 Database Access하는 순서

(1)~(3) 응용 프로그램 시작시 수행되는 프로세스입니다

1

 응용 프로그램이 SqlSessionFactoryBuilder 위해 SqlSessionFactory 빌드하도록 요청합니다.

2

 SqlSessionFactoryBuilder SqlSessionFactory 생성하기 위한 MyBatis 구성 파일을 읽습니다.

3

 SqlSessionFactoryBuilder MyBatis 구성 파일의 정의에 따라 SqlSessionFactory 생성합니다.

(4)~(10) 클라이언트의 요청에 대해 수행되는 프로세스입니다.

 4 

 클라이언트가 응용 프로그램에 대한 프로세스를 요청합니다.

 5 

 응용 프로그램은 SqlSessionFactoryBuilder 사용하여 빌드된 SqlSessionFactory에서 SqlSession 가져옵니다.

6

 SqlSessionFactory SqlSession 생성하고 이를 애플리케이션에 반환합니다.

7

 응용 프로그램이 SqlSession에서 매퍼 인터페이스의 구현 개체를 가져옵니다.

8

 응용 프로그램이 매퍼 인터페이스 메서드를 호출합니다.

9

 매퍼 인터페이스의 구현 개체가 SqlSession 메서드를 호출하고 SQL 실행을 요청합니다.

10

 SqlSession 매핑 파일에서 실행할 SQL 가져와 SQL 실행합니다.

4. MyBatis-Spring 컴포넌트 구조

구성 요소 / 구성 파일 

 설명

 org.mybatis.spring.SqlSessionFactoryBean

 SqlSessionFactory 작성하고 Spring DI 컨테이너에 개체를 저장하는 구성 요소.

표준 MyBatis3에서 SqlSessionFactory MyBatis 구성 파일에 정의된 정보를 기반으로 합니다. 그러나 SqlSessionFactoryBean 사용하면 MyBatis 구성 파일이 없어도 SqlSessionFactory 빌드할 있습니다

 org.mybatis.spring.mapper.MapperFactoryBean

 Singleton Mapper 개체를 만들고 Spring DI 컨테이너에 개체를 저장하는 구성 요소.

MyBatis3 표준 메커니즘에 의해 생성된 매퍼 객체는 스레드가 안전하지 않습니다. 따라서 스레드에 대한 인스턴스를 할당해야 했습니다. MyBatis-Spring 구성 요소에 의해 생성된 매퍼 개체는 안전한 매퍼 개체를 생성할 있습니다. 따라서 서비스 싱글톤 구성요소에 DI 적용할 있습니다.

 org.mybatis.spring.SqlSessionTemplate

 SqlSession 인터페이스를 구현하는 Singleton 버전의 SqlSession 구성 요소.

MyBatis3 표준 메커니즘에 의해 생성된 SqlSession 개체가 스레드에 안전하지 않습니다. 따라서 스레드에 대한 인스턴스를 할당해야 했습니다. MyBatis-Spring 구성 요소에서 생성된 SqlSession 개체는 안전한 스레드 SqlSession 개체를 생성할 있습니다. 따라서 서비스 싱글톤 구성요소에 DI 적용할 있습니다.

 

(1)~(4) 응용 프로그램 시작시 수행되는 프로세스입니다

 1 

 SqlSessionFactoryBean SqlSessionFactoryBuilder 위해 SqlSessionFactory 빌드하도록 요청합니다.

 2 

 응용 프로그램은 SqlSessionFactoryBuilder 사용하여 빌드된 SqlSessionFactory에서 SqlSession 가져옵니다.

3

 SqlSessionFactoryBuilder MyBatis 구성 파일의 정의에 따라 SqlSessionFactory 생성합니다. 따라서 생성된 SqlSessionFactory Spring DI 컨테이너에 의해 저장됩니다.

4

 MapperFactoryBean 안전한 SqlSession(SqlSessionTemplate) 스레드 안전 매퍼 개체(Mapper 인터페이스의 프록시 객체) 생성합니  . 따라서 생성되는 매퍼 객체는 스프링 DI 컨테이너에 의해 저장되며 서비스 클래스 등에 DI 적용됩니다. 매퍼 개체는 안전한 SqlSession(SqlSessionTemplate) 사용하여 스레드 안전 구현을 제공합니다.

(5)~(11) 클라이언트의 요청에 대해 수행되는 프로세스입니다.

 5 

 클라이언트가 응용 프로그램에 대한 프로세스를 요청합니다.

 6 

 애플리케이션(서비스) DI 컨테이너에서 주입한 매퍼 개체(매퍼 인터페이스를 구현하는 프록시 개체) 방법을 호출합니다.

7

 매퍼 객체는 호출된 메소드에 해당하는 SqlSession (SqlSessionTemplate ) 메서드를 호출합니다.

8

 SqlSession (SqlSessionTemplate ) 프록시 사용 안전한 SqlSession 메서드를 호출합니다.

9

 프록시 사용 스레드 안전 SqlSession 트랜잭션에 할당된 MyBatis3 표준 SqlSession 사용합니다.

 트랜잭션에 할당된 SqlSession 존재하지 않는 경우 SqlSessionFactory 메서드를 호출하여 표준 MyBatis3 SqlSession 가져옵니다.

10

 SqlSessionFactory MyBatis3 표준 SqlSession 반환합니다.

 반환된 MyBatis3 표준 SqlSession 트랜잭션에 할당되기 때문에 동일한 트랜잭션 내에 있는 경우 SqlSession 생성하지 않고 동일한 SqlSession 사용합니다.on 메서드를 호출하고 SQL 실행을 요청합니다.

11

 MyBatis3 표준 SqlSession 매핑 파일에서 실행할 SQL 가져와 실행합니다.

 

+ Recent posts