- Mybatis
- 의미 : Mybatis는 원래 Apache에서 Ibatis였으나 구글로 넘어가면서 바뀐 프레임워크
- 첫 번째 특징 : 한두 줄의 자바 코드로 DB 연동을 처리한다.
- 두 번째 특징 : SQL 명령어를 자바 코드에서 분리하여 XML 파일에 따로 관리한다.
- Mybatis는 XML 파일에 저장된 SQL 명령어를 대신 실행하고 실행 결과를 VO 같은 자바 객체에 자동으로 매핑까지 해줌
- 그래서 Mybatis 프레임워크를 데이터 맵퍼라고 부른다.
- Mybatis 프레임워크를 이용하여 DB 연동을 처리하면 대부분 한두 줄의 자바 코드만으로도 원하는 DB 연동 로직을 처리할 수 있게 된다.
- 또한 SQL 명령어에 대한 통합 관리를 위해 자바 소스에서 SQL 구문을 분리한다.
- Mybatis 구조
- SqlMapConfig.xml : Mybatis 메인 환경설정 파일
- Mybatis는 이 파일을 읽어들여 어떤 DBMS와 커넥션을 맺을지, 어떤 SQL Mapper XML 파일들이 등록되어 있는지 알 수 있음
- MyBatis는 SqlMap.xml 파일에 등록된 각 SQML 명령어들을 Map 구조로 저장하여 관리
- 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 객체를 획득할 수 있도록 공통으로 제공할 유틸리티 클래스를 만드는 것이다.
(4) SqlSession 객체