MyBatis 공부 겸 내용을 정리중입니다.
혹시 틀린 내용이 있다면 피드백 주시면 감사합니다.
✅ 목차
0. Persistence Framework
1. MyBatis란 ?
2. Mybatis 동작 원리
3. Mybatis를 통한 CRUD
4. 동적 쿼리
Persistence Framework
Mybatis는 Persistence Framework 기술 중 하나인데, Mybatis에 대해 들어가기 전 Persistence Framework이 무엇인지 간단히 알아보자
✅ Persistence
- Persistence란 영속성 이란 뜻으로 프로그램이 종료되어도 데이터 상태가 유지되는 것을 말한다.
- 프로그램에서 데이터를 저장할때는 이 영속성을 지켜야한다. (재기동하면 날라가 버리니..)
- 자바에서 Persistence를 부여할수 있는 데이터 저장 기술로는 JDBC, Spring JDBC, Persistence Framework(SQL Mapper, ORM)가 있다.
✅ Persistence Framework 종류
- SQL Mapper
- SQL 쿼리를 통해 직접 DB에 접근하여 데이터를 다룬다.
- 예) Mybatis
- ORM
- 객체를 통해 간접적으로 DB를 다룬다.
- 아직 ORM은 공부하지않아서 추후 업데이트 하려고한다.
- 예) JPA, Hibernate
Mybatis란 ?
✅ Myabtis란 ?
- 자바에서 데이터를 다루는 기술 중 하나로, JDBC 작업을 간편하게 도와주는 DB 프로그래밍 프레임 워크이다. (Persistence Framework)
✅ Mybatis와 기존 JDBC 차이점
- JDBC API란
- 자바에서 제공하는 API로 데이터베이스에 접근하여 쿼리를 수행할수 있게 해주는 로우레벨의 데이터를 다루는 기술
- 1개의 클래스마다 DB 연결 및 해제, SQL 쿼리, Java 코드가 모두 존재해서 재사용성이 떨어진다는 단점이 존재한다.
- RDB의 데이터 양이 많아지고 관계 복잡해지면서 다수의 메소드를 호출하거나 그에 따른 관리가 어려워진다는 문제가 있다.
- 이에따라 쿼리가 자바 소스 코드와 완전히 분리되고 재사용성이 좋은 Mybatis를 많이 사용하게 되었다.
✅ Mybatis 특징
- JDBC로 처리하는 파라미터 설정 및 결과 매핑 기능을 대신해준다.
- SQL문이 코드의 완전한 분리되어서 가독성이 좋다.
- 기존 JDBC는 DAO파일에 자바 코드와 SQL문이 담겨져 있었다면, MyBatis에서는 XML 파일 에 SQL 코드를 작성하고 필요할때마다 가져와 사용한다.
- 서비스 로직에서 특정 메소드가 필요할때마다 가져다 사용할수 있기 때문에 재사용성이 좋다.
- 쿼리문을 자바 메소드처럼 구성해서 유지보수성을 높일 수 있다. (동적쿼리를 잘 활용하자)
- SQL의 입력 파라미터와 수행 결과를 객체(Map, DTO)로 자동 Mapping 해준다.
Mybatis 동작 예시 및 원리
✅ 간단한 동작 예시
- 라이브러리 추가 (Dependency)
- Mybatis와 사용하고자하는 DB 클라이언트 (Mysql, Oracle, MariaDB 등)
- Config 파일에 접속정보(DataSource) 설정
- 매퍼 인터페이스를 생성한다.
- 위의 인터페이스 경로로 namespace를 가지는 xml 파일 생성
- xml 파일에 CRUD 쿼리를 작성한다.
- 매퍼 인터페이스에 5번에 작성한 메소드를 매핑시킨다. (인터페이스 메소드명과 쿼리 ID는 동일하게 맞춰야함)
- 서비스 로직에서 매퍼 인터페이스를 주입 받아서 특정 쿼리 메소드를 사용한다.
✅ 내부 동작 원리
내부 동작 원리는 Spring 프레임워크가 기동 될때와 클라이언트가 특정 동작을 요청할때로 나뉜다.
- 프로그램 시작 시 수행되는 프로세스
- SqlSessionFactoryBuilder가 설정파일을 읽어와서 SqlSession을 생성하기위한 SqlSessionFactory를 생성한다.
- 이렇게 생성된 SqlSessionFactory는 Spring DI 컨테이너에 저장된다.
- 클라이언트 요청 시 수행
- 특정 쿼리 수행요청이 들어옴
- SqlSessionFactory가 SqlSession을 생성하고 애플리케이션에 반환한다.
- 애플리케이션이 매퍼 인터페이스 객체를 가져온다. (@Autowired)
- 매퍼 인터페이스 객체가 SqlSession 메소드를 통해 XML 파일에 있는 SQL을 실행한다.