[MyBatis]
- 마이바티스는 SQL과 자바객체를 매핑하는 사상에서 개발된 데이터베이스 접근용 프레임워크
- [MyBatis 특징]
- SQL의 체계적인 관리, 선언적 정의 ( 설정파일, 애너테이션 ) -> 비즈니스로직에서 SQL을 감출 수 있음
- 자바 객체와 SQL 입출력 값의 투명한 바인딩
- 동적 SQL 조합
- [SQL 지정방법]
- [매핑파일]
- SQL 외부에 파일로 정리 할 수 있음
- [애너테이션]
- SQL 지정이 간단하나, 애너테이션의 표현력과 유연성의 제약탓에 복잡한 SQL에 적합하지 않은 방법.
[MyBatis 주요 API]
- [MyBatis 주요컴포넌트]
- 설정파일 (Config)
- 마이바티스 동작설정을 지정
- Mapper Interface
- 매핑 파일이나 애너테이션에 정의한 SQL에 대응하는 자바 인터페이스
- Mapping XML
- SQL과 객체의 매핑 정의를 기술하는 XML파일, SQL을 애너테이션에 지정하는 경우는 사용하지 않음
- org.apache.ibatis.session.SqlSession
- SQL 발행이나 트랜잭션 제어용 API 제공 컴포넌트
- 스프링 프레임워크에서 사용하는 경우에는 마이바티스의 트랜잭션 제어 API는 사용하지 않음
- org.apache.ibatis.session.SqlSessionFactory
- SqlSession 생성하기 위한 컴포넌트
- org.apache.ibatis.session.SqlSessionFactoryBuilder
- 마이바티스 설정파일을 읽어들여 SqlSessionFactory를 생성하기 위한 컴포넌트
- [MyBatis-Spring 주요컴포넌트]
- org.mybatis.spring.SqlSessionFactoryBean
- SqlSessionFactory를 구축하고 스프링 DI 컨테이너에 객체를 저장
- org.mybatis.spring.SqlSessionTemplate
- 스프링 트랜잭션 관리하에 마이바티스 표준의 SqlSession을 취급하기 위한 컴포넌트 (스레드안전)
- org.mybatis.spring.mapper.MapperFactoryBean
- 스프링 트랜잭션 관리하에 SQL을 실행하는 Mapper객체를 빈으로 생성하기 위한 컴포넌트
[MyBatis 설정하기]
- DB 속성값 설정
# DB
spring.datasource.driver-class-name=com.mysql.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=
- 의존성모듈추가 (Spring Boot + MyBatis)
- SqlSessionFactory, SqlSessionTemplate 포함
<dependency>
<groupId>org.mybatis.spring.boot</groupId>
<artifactId>mybatis-spring-boot-starter</artifactId>
<version>1.1.1</version>
</dependency>
- 빈설정 (Spring Boot + MyBatis)
/**
* [MyBatis] SqlSessionFactory 설정
* */
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
/ DataSource 연동
SqlSessionFactoryBean sessionFactoryBean = new SqlSessionFactoryBean();
sessionFactoryBean.setDataSource(dataSource);
// Mapper SQL 연동
Resource[] res = new PathMatchingResourcePatternResolver().getResources("classpath:mappers/*Mapper.xml");
sessionFactoryBean.setMapperLocations(res);
return sessionFactoryBean.getObject();
}
[MyBatis 흐름]
- 생성흐름
- SqlSessionFactoryBean
- SqlSessionBuilder를 사용해서 SqlSessionBean으로 생성
- DI 컨테이너에 빈이 된 데이터 소스를 인젝션해서 조작 대상 데이터베이스를 지정
- SqlSessionBuilder & MyBatis 설정파일
- MyBatis 설정파일의 정의에 따라 SqlSessionFactory 생성
- 생성된 SqlSessionFactory는 DI 컨테이너에 의해 관리
- MapperFactoryBean
- SessionTemplate 생성 & SQL을 실행하는 Mapper 객체 생성
- 스프링의 트랜잭션 관리하에 마이바티스 표준의 SqlSession을 취급
- 실행흐름
- Client 요청
- Mapper 객체
- Mapper 객체는 호출된 메서드에 대응하는 SqlSession(구현클래스 SqlSessionTemplate)의 메서드를 호출
- SqlSessionTemplate
- SqlSessionFactory를 통해서 MyBatis 표준 SqlSession 취득 (SQL을 같은 트랜잭션에서 조작하는 경우 같은 SqlSession 공유)
- SqlSessionFactory를 통해서 취득한 SqlSession을 실행중인 트랜잭션에 할당함으로 같은 트랜잭션에서 같은 SqlSession이 사용되도록 제어(JDK동적프락시구조이용)
- 프락시화 된 SqlSession을 통해 MyBatis 표준 SqlSession 메서드를 호출해서 애플리케이션에서 호출된 Mapper 객체의 메서드에 대응하는 SQL 실행을 의뢰
[MyBatis + Spring 연게]
- 스프링 DI 컨테이너에 데이터소스 빈을 등록
- 스프링 DI 컨테이너에 트랜잭션 관리자의 빈을 등록
- 애너테이션 기반의 애너테이션 제어 활성화
- 스프링 DI 컨테이너에 SqlSessionFactory의 빈을 등록
- Mapper 인터페이스 스캔기능을 활성화
반응형
'Spring > MyBatis' 카테고리의 다른 글
학습 // Spring // MyBatis // Mapper (0) | 2018.11.13 |
---|---|
학습 // Spring // MyBatis // Transaction (0) | 2018.11.13 |
학습 // Spring // MyBatis // SqlSessionFactory (0) | 2018.11.13 |
학습 // Spring // MyBatis // SqlSession (0) | 2018.11.13 |