Mybatis는 자바 오브젝트와 SQL사이의 자동 매핑 기능을 지원하는 ORM(Object relational Mapping)프레임워크이다.
SQL을 별도의 파일로 분리해서 관리하게 해준다.
Hibernate나 JAP(Java Persistence Api)처럼 새로운 DB프로그래밍 패러다임을 익혀야하는 부담 없이 SQL을 그대로 이용하면서 JDBC코드 작성의 불편함도 제거해주고 도메인 객체나 VO객체를 중심으로 개발이 가능하다는 장점이 있다.
쉬운 접근성과 코드의 간결함
JDBC의 모든 기능을 Mybatis가 대부분 제공한다.
복잡한 JDBC코드를 걷어내며 깔끔한 소스코드를 유지할 수 있다.
수동적인 파라미터 설정과 쿼리 결과에 대한 맵핑 구문을 제거할 수 있다.
SQL문과 프로그래밍 코드의 분리
SQL에 변경이 있을 때마다 자바 코드를 수정하거나 컴파일하지 않아도 된다.
다양한 프로그래밍 언어로 구현가능
Java, C#, .NET, Ruby
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 : 핵심적인 역할을 하는 클래스로서 SQL 실행이다 트랙잭션 관리를 실행한다. 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으로 등록한다.