✔MyBatis
1. MyBatis
◾개요
- Java Object와 SQL문 사이의 자동 Mapping 기능을 지원하는 ORM Framework
- SQL을 별도의 파일로 분리해서 관리.
- Object-SQL 사이의 parameter mapping 작업을 자동으로 해줌.
- SQL을 그대로 이용하며 도메인 객체나 VO 객체를 중심으로 개발 가능.
◾특징
- 쉬운 접근성과 코드의 간결함
- 간단한 persistence framework
- JDBC 모든 기능을 MyBatis가 대부분 제공
- JDBC 코드를 걷어내어 깔끔한 소스 코드 유지.
- 수동적인 parameter 설정과 Query 결과에 대한 mapping 구문 제거
- SQL문과 프로그래밍 코드의 분리
- SQL 변경이 있을 때마다 자바 코드를 수정하거나 컴파일 하지 않아도 됨.
- 다양한 프로그래밍 언어로 구현 가능
- JAVA, C#, .NET, Ruby, ...
2. MyBatis-Spring
◾Mybatis와 MyBatis-Spring의 주요 Component
- Mybatis와 Mybatis-Spring을 사용한 DB Access Architecture
◾Mybatis를 사용하는 Data Access Layer
◾MyBatis3의 주요 Component
◾MyBatis3의 주요 Component 역할
- MyBatis 설정 파일(sqlMapConfig.xml) : 데이터베이스의 접속 주소 정보나 객체의 alias, Mapping 파일 경로 등의 고정된 환경 정보 설정.
- SqlSessionFactoryBuilder : MyBatis 설정 파일을 바탕으로 SqlSessionFactory 생성.
- SqlSessionFactory : SqlSession 생성.
- SqlSession : SQL 실행이나 Transaction 관리 실행. thread마다 필요에 따라 생성.
- mapping 파일(mapper.xml) : SQL문과 ORMapping 설정
◾MyBatis-Spring의 주요 Component
◾MyBatis-Spring의 주요 Component 역할
- MyBatis 설정 파일(sqlMapConfig.xml) : Dto 객체의 정보 설정(Alias)
- SqlSessionFactoryBean : MyBatis 설정 파일을 바탕으로 SqlSessionFactory 생성. Spring Bean으로 등록하여야 함
- SqlSessionTemplate : SQL 실행이나 Transaction 관리 실행. Thread-safe하며 Spring Bean 등록 필요.
- mapping 파일(mapper.xml) : SQL문과 ORMapping 설정
- Spring Bean설정파일(beans.xml) : SqlSessionFactoryBean을 Bean에 등록할 때 DataSource 정보와 MyBatis Config 파일 정보, Mapping 파일 정보 함께 설정. SqlSessionTemplate를 Bean으로 등록.
3. Mapper Interface
◾Mapper Interface
- mapping 파일에 기재된 SQL을 호출하기 위한 Interface
- SQL을 호출하는 프로그램을 Type Safe하게 기술하기 위해 MyBatis 3.X부터 등장
- Mapping 파일에 있는 SQL을 java interface를 통해 호출할 수 있도록 해줌.
- 기존의 DAO 클래스를 대신하여 DAO 클래스가 사라짐. (DAO 인터페이스만 기술하여 이를 활용)
public interface mapper{
Dto search(String id);
}
<mapper namespace="package.mapper">
<select id="search" parameterType="String" resultType="Dto">
SQL
</select>
</mapper>
4. MyBatis-Spring 연동
◾개요
- 스프링의 경우 컨테이너에 MyBatis 관련 빈을 등록하여 사용.
- 트랜잭션을 @Transactional로 처리.
- Spring 연동 라이브러리 필요
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-spring</artifactId>
<version>2.0.3</version>
</dependency>
◾DataSource 설정
- 스프링 환경 설정 파일(application-context.xml)에 데이터소스 설정.
- DataSource : 데이터베이스 연결 정보를 가진 객체
- 스프링과 연동하면 데이터베이스 설정과 트랜잭션 처리는 스프링에서 관리.
◾트랜잭션 관리자 설정
- transactionManager 아이디를 가진 빈은 트랜잭션을 관리하는 객체.
tx:annotation-driven
을 통해 어노테이션으로 선언하도록 설정 가능.
@Transactional
어노테이션으로 트랜잭션 처리.
◾SqlSessionFactoryBean 설정
- 스프링에서 SqlSessionFactory 객체를 생성하기 위해 SqlSessionFactoryBean을 빈으로 등록해야함.
- 사용할 DataSource와 MyBatis 설정 파일 정보 필요
◾mapper 빈 등록
- 스캐너를 통해 자동으로 Mapper 인터페이스를 등로갛거나 직접 등록.
- mapperScannerConfigurer을 설정하면, Mapper 인터페이스를 자동으로 검색하여 빈으로 등록.
- basePackage로 패키지를 설정하면, 해당 패키지 하위의 모든 Mapper 인터페이스 자동으로 등록.
- MapperFactoryBean 클래스는 Mapper 인터페이스를 직접 등록할 때 사용.
◾MyBatis Configuration
- DB 접속 정보 및 Mapper 관련 설정을 스프링 빈으로 등록하여 관리.
- 일부 정보만 MyBatis 환경 설정에서 관리. (typeAlias, tpyeHandler 등)
◾데이터 접근 객체 구현
Repository
: 데이터 접근 객체를 빈으로 등록하기 위해 사용하는 어노테이션.
Autowired
: 사용하려는 데이터 접근 객체와 의존 관계 설정