오늘의 키워드
- MyBatis
- SqlSessionFactoryBuilder
- SqlSessionFactory
- SqlSession
- Mapper Interface
- Mapping File
- JDBC 프로그래밍 단순화
- SQL 쿼리 분리 관리
오늘의 내용
- MyBatis : JDBC의 반복되는 코드를 줄이고 SQL 쿼리와 프로그램 코드를 분리해 관리하는 프레임 워크이다
- JDBC 프로그래밍을 단순화한다
- SQL 쿼리를 XML 파일에 작성해 코드와 SQL을 분리한다
- 설정 부분을 줄이고 SQL문과의 연결을 통해 빠른 개발이 가능하다
- 코드는 map 인터페이스와 SQL 쿼리 및 ResultSet 매핑을 위한 XML, annotation을 사용한다
- DB 기능에 종속적이며 SQL을 직접 작성해야 한다
- 실행 순서
- 응용 프로그램이 SqlSessionFactoryBuilder를 통해 SqlSessionFactory를 빌드하도록 요청한다
- SqlSessionFactoryBuilder는 MyBatis 구성 파일을 읽어 SqlSessionFactory를 생성한다
- SqlSessionFactoryBuilder는 구성 파일의 정의에 따라 SqlSessionFactory를 생성한다.
- 클라이언트가 응용 프로그램에 대한 프로세스를 요청한다
- 응용 프로그램은 SqlSessionFactoryBuilder를 사용하여 빌드된 SqlSessionFactory에서 SqlSession을 가져온다
- SqlSessionFactory는 SqlSession을 생성하고 이를 애플리케이션에 반환한다
- 응용 프로그램이 SqlSession에서 매퍼 인터페이스의 구현 개체를 가져온다
- 응용 프로그램이 매퍼 인터페이스 메서드를 호출한다
- 매퍼 인터페이스의 구현 개체가 SqlSession 메서드를 호출하고 SQL 실행을 요청한다
- SqlSession은 매핑 파일에서 실행할 SQL을 가져와 SQL을 실행한다
- 주요 구성 요소
- SqlSession Factory Builder: MyBatis 설정 파일을 읽어와서 설정 정보 기반으로 SqlSessionFactory를 생성하는 빌더 객체
- MyBatis Config File: 매핑할 객체가 들어있는 패키지 경로와 Mapping File 목록을 지정하는 파일 (mybatis-config. xml)
- SqlSession Factory: 설정에 맞게 SqlSession을 생성하여 들고 있는 객체
- SqlSession: Mapping File에서 쿼리를 조회해서 쿼리를 수행하고 응답을 받아올 수 있는 세션 객체
- Mapper Interface: DB에서 조회하는 객체와 Java 프로그램의 객체 간에 인터페이스를 정의하는 객체
- Mapping File: Sqlsession이 실행하는 쿼리가 담긴 파일 (UserMapper.xml)
- 장단점
- 장점:
- 쿼리 실행 전에 매개변수와 쿼리 결과 값의 변형을 정의할 수 있다
- Namespace를 자유롭게 둘 수 있다
- .xml 파일의 쿼리문 id와 mapper 메서드명을 일치시킬 필요가 없다
- 단점:
- SqlSession 객체를 주입받아야 하며, 쿼리문 실행 시 항상 호출해야 한다
- 쿼리문 호출 시 SqlSession에 .xml 파일의 namespace와 쿼리문 id를 매개 변수로 넘겨야 한다
- 장점:
오늘의 회고
프로젝트 마감 기한이 몇시간 남지 않아 마지막 스퍼트 중인데 QueryDSL을 테스트하는 과정에서 계속 null이 들어가는 오류가 발생해 해결 중인데 몇 시간째 해결을 못 해 번아웃이 와서 프로젝트를 잘 마무리할 수 있을지......
'TIL' 카테고리의 다른 글
TIL내일배움캠프 13주차 JPA심화 JPA 테이블 매핑 (1) | 2024.07.08 |
---|---|
TIL내일배움캠프 12주차 JPA심화 JPA Repository (0) | 2024.07.05 |
TIL내일배움캠프 12주차 JPA심화 JDBC (0) | 2024.07.03 |
TIL내일배움캠프 12주차 JPA심화 DB Driver (0) | 2024.07.01 |
TIL내일배움캠프 11주차 JPA심화 트랜잭션 (0) | 2024.06.28 |