Mybatis 설정 파일 - SQL Mapper

이승현·2022년 9월 21일
0
  1. Mybatis
  • 의미 : Mybatis는 원래 Apache에서 Ibatis였으나 구글로 넘어가면서 바뀐 프레임워크
  • 첫 번째 특징 : 한두 줄의 자바 코드로 DB 연동을 처리한다.
  • 두 번째 특징 : SQL 명령어를 자바 코드에서 분리하여 XML 파일에 따로 관리한다.
  • Mybatis는 XML 파일에 저장된 SQL 명령어를 대신 실행하고 실행 결과를 VO 같은 자바 객체에 자동으로 매핑까지 해줌
  • 그래서 Mybatis 프레임워크를 데이터 맵퍼라고 부른다.
  • Mybatis 프레임워크를 이용하여 DB 연동을 처리하면 대부분 한두 줄의 자바 코드만으로도 원하는 DB 연동 로직을 처리할 수 있게 된다.
  • 또한 SQL 명령어에 대한 통합 관리를 위해 자바 소스에서 SQL 구문을 분리한다.
  1. Mybatis 구조
  • SqlMapConfig.xml : Mybatis 메인 환경설정 파일
  • Mybatis는 이 파일을 읽어들여 어떤 DBMS와 커넥션을 맺을지, 어떤 SQL Mapper XML 파일들이 등록되어 있는지 알 수 있음
  • MyBatis는 SqlMap.xml 파일에 등록된 각 SQML 명령어들을 Map 구조로 저장하여 관리
  1. Mapper XML 파일 구조
  • Mybatis 프레임워크에서 가장 중요한 파일은 SQL 명령어들이 저장되는 SQL Mapper XML (=Mapper) 파일임
  • Mapper는 를 루트 엘리먼트로 가지며 DTD 선언부와 SQL Mapping부로 나뉜 구조를 갖음

XML

  • 존재 자체가 서로 다른 주체간의 정보를 전달하는게 목표
  • 그렇기 때문에 작성자와 그것을 읽는자 간 서로 이해할 수 있도록 작성 방법이 정의되어있어야함
    --> 그것을 정해놓은 스펙문서를 DTD라고 함

DTD (Document Type Definition)

  • 이 문서는 여기서 정해놓은 규칙에 따라 마크업한다라는 의미
  • XML파일의 가장 윗 부분에 명시하여 해당 XML문서가 어떤 스펙으로 작성되어 있는지를 알림

CDATA Section 사용

  • sql 구문 내에서 쓰는 태그로 <>를 구분하기 위해 사용
  • 단순한 문자 데이터인 Character DATA로 작성되어 XML parser가 해석하지 않도록 함

3. MyBatis JAVA API

(1) SqlSessionFactoryBuilder 클래스

  • Mybatis Mapper 설정이 끝나고 Mybatis Framework에서 제공하는 API를 통해 DAO 클래스를 구현해야함

  • Mybatis로 DAO 클래스의 CRUD 메소드를 구현하려면 Mybatis에서 제공하는 SqlSession 객체를 사용해야함

  • 그런데 SqlSession 객체는 SqlSessionFactory로부터 얻어야 하므로 가장 먼저 해야할 작업은 SqlSessionFactory 객체를 생성하는 일

  • SqlSessionFactory 객체를 생성하려면 Sql SessionFactoryBuilder 의 Build() 메소드를 이용하는데, build() 메소드는 MyBatis 설정파일( sql-map-config.xml)을 로딩하여 SqlSessionFactory 객체를 생성

  • 그리고 sql-map-config.xml 파일을 로딩하려면 입력 스트림인 Reader 객체가 필요하다
    Reader 객체는 Resources 클래스의 getResourceAsReader() 메소드를 사용하여 얻어낼수 있다,

  • 첫번째 줄 : Mybatis 메인 설정 파일인 sql-map-confi.xml 파일로부터 설정 정보를 읽어들이는 입력 스트림 생성

  • 두번째 줄 : 입력 스트림을 통해 sql-map-confi.xml 파일을 읽어 SqlSessionFactory 객체를 생성

(2) SqlSessionFactory 클래스

  • SqlSessionFactory는 이름에서 알수 있듯이 SqlSession 객체에 대한 공장 역할을 수행한다.

  • SqlSessionFactory 객체는 openSession()이라는 메소드를 제공하며, 이 메소드를 이용해서 SqlSession 객체를 얻을 수 있다.

(3) 유틸리티 클래스 작성

  • Mybatis를 사용하여 DB 연동을 간단하게 처리하려면 최종적으로 Mybatis가 제공하는 SqlSession 객체를 사용해야한다.

  • 따라서 모든 DAO 클래스에서 좀더 쉽게 SqlSession 객체를 획득할 수 있도록 공통으로 제공할 유틸리티 클래스를 만드는 것이다.

    • 나중에 스프링과 Mybatis를 연동할 때는 프레임워크에서 제공하는 클래스를 사용하면 된다

(4) SqlSession 객체

  • SqlSession 객체는 Mapper XML에 등록된 SQL을 실행하기 위한 다양한 API를 제공한다.
  • session을 한 번 생성하면 매핑구문을 실행하거나 커밋 또는 롤백을 하기 위해 세션을 사용할 수 있음
  • SqlSession은 스프링 트랜잭션 설정에 따라 자동으로 커밋 혹은 롤백을 수행하고 닫혀지는, thread-safe함

0개의 댓글