MyBatis
- 자바 Object와 SQL을 맵핑하는 SQL Mapper이다.
- Object - SQL 사이의 parameter mapping, result mapping 작업을 자동으로 해준다.
- SQL을 별도의 파일(xml)로 분리해서 관리한다.
- 반복되는 JDBC 코드가 제거된다. MyBatis도 JDBC를 기반으로 동작한다.
- RDB에 종속적인 단점이 있지만 복잡한 쿼리도 쉽게 적용할 수 있기에 ORM Framework와 같이 사용되는 추세이다.
JDBC 동작 방식
- DataSource 객체(구현체) 준비
- DB Connection (DataSource로부터 커넥션을 가져옴)
- SQL 작성, parameter mapping
- 실행
- R.S
- Data Get (result Mapping)
- Close
JDBC 코드를 작성하면 빨간색으로 칠해진 부분은 변하지 않지만 반복적으로 등장한다. 이러한 중복 코드 문제를 해결하기 위해 MyBaits가 등장했으며 MyBaits가 빨간색 과정을 자동으로 해줌으로써 중복 코드가 제거 된다. 개발자는 DataSource 객체를 만들기 위한 라이브러리(드라이버, 커넥션 풀)를 통해 DataSource 객체를 만들고 SQL문과 맵핑 정보가 들어가는 Mapping 파일(.xml)만 작성하면 된다.
MyBatis 3
MyBatis 3의 주요 컴포넌트는 아래와 같다.
- MyBatis 설정 파일 (sqlMapConfig.xml) : DB 정보, 객체의 ailas, Mapping 파일 경로 등, 고정된 환경 정보 설정
- SqlSessionFactoryBuilder : MyBatis 설정 파일을 기반으로 SqlSessionFactory 생성
- SqlSessionFactory : SqlSession 생성, 스프링에선 SqlSessionFactoryBean이 SqlSessionFactory 생성
- SqlSession : DML 및 트랜잭션 명령어(commit, rollback)을 수행하는 인터페이스, 스프링에선 해당 인터페이스를 구현한 SqlSessionTemplate 빈 객체 사용
- mapping 파일 (mapping.xml) : SQL 문과 ORM Mapping을 정의
아래는 sqlSession의 일부 메서드이다.
- List<T> SqlSession.selectList( )
- T SqlSession.selectOne( )
- int SqlSession.insert( )
- int SqlSession.update( )
- int SqlSession.delete( )
Spring와 MyBatis
스프링에서 MyBatis를 사용하려면 SqlSessionFactoryBean, SqlSessionTemplate 빈 객체 등록이 필요하며, 아래와 같이 동작한다.
SqlSession을 직접 사용할경우 아래와 같이 사용한다.
- mybatis, mybatis-spring 의존성 추가
- sqlSessionFactoryBean, sqlSessionTemplate 빈 등록
- dao 클래스에서 sqlSession 객체 사용
하지만 MyBatis 3부터는 SqlSession을 직접 사용하지 않고 Mapper Interface를 사용한다. Mapper Interface는 MyBatis 3부터 등장했으며 mapping file에 정의된 SQL을 mapper Interface로 수행한다. (내부적으로는 sqlSession이 수행한다.)
- mybatis, mybatis-spring 의존성 추가
- sqlSessionFactoryBean, Mapper 인터페이스 빈 등록
- Mapper 인터페이스 작성 (XXXMapper.java)
'Spring > Spring Legacy' 카테고리의 다른 글
스프링 MVC 설정 파일, 동작 순서 (0) | 2023.10.26 |
---|