객체 지향 언어인 자바의 관계형 데이터베이스 프로그래밍을 좀더 쉽게 할 수 있게 도와주는 개발 프레임워크로써 JDBC를 통해 데이터베이스에 엑세스하는 작업을 캡슐화하고 일반 SQL 쿼리, 저장 프로 시저 및 고급 매핑을 지원하며 모든 JDBC 코드 및 매개 변수의 중복작업을 제거 한다. MyBatis에서는 프로그램에 있는 SQL쿼리들을 한 구성파일에 구성하여 프로그램 코드와 SQL을 분리할 수 있는 장점을 가지고 있다.
복잡한 쿼리나 다이나믹한 쿼리에 강하다 - 반대로 비슷한 쿼리는 남발하게 되는 단점이 있다.
프로그램 코드와 SQL 쿼리의 분리로 코드의 간결성 및 유지보수성 향상 resultType, resultClass등 VO를 사용하지 않고 조회 결과를 사용자 정의 DTO, MAP 등으로 맵핑하여 사용 할 수 있다. 빠른 개발이 가능하여 생산성이 향상된다.
DB vender에서 제공하는 JDBC Driver가 있다.
JDBC만을 사용하는 어플리케이션은 Application Modules에서 JDBC Interfaces를 바로 호출하지만 JDBC Api를 감싸서 개발자가 조금 더 편리하게 접근할 수 있도록 도와주는 것이 MyBatis이다.
서비스에서 DAO를 호출하고 DAO에서 Mybatis를 사용하게 된다.
MyBatis는 Data Access Layer에서 사용하는 프레임워크이다.
Controller에서 Service를 호출하고 Service가 DAO 계층에 있는 메소드를 호출하면 DAO에서 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문을 호출해주는 기능을 해준다고 생각하면 된다.
MyBatis 설정파일(SqlMapConfig.xml) : 데이터베이스의 접속 주소 정보나 Mapping 파일의 경로 등의 고정된 환경정보를 설정한다.
SqlSessionFactoryBuilder : MyBatis 설정 파일을 바탕으로 SqlSessionFactory를 생성한다.
SqlSessionFactory : SqlSession을 생성한다.
SqlSession : 핵심적인 역할을 하는 클래스로서 트랜잭션 관리를 실행한다. SqlSession 오브젝트는 Thread-Safe 하지 않으므로 thread마다 필요에 따라 생성한다.
Mapping 파일(user.xml) : SQL문과 OR Mapping을 설정한다.
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으로 등록한다.
참고 글