쿼리 파일 만들기(Query Mapping)

SIHA·2025년 3월 11일

쿼리 파일 만들기 (QueryMapper)

Query Mapper를 통해 SQL 쿼리를 관리한다. 별도의 쿼리 파일을 통해 SQL을 관리함으로써 코드의 가독성과 유지보수성을 높일 수 있다.

MyBatis

📌 RowMapper의 단점인 "반복되는 코드"를 줄이고 함께있는 프로그램 코드와 쿼리 코드를 분리하여 관리할 수 있게 한다

  • 반복적인 JDBC 프로그래밍을 단순화하고,
  • SQL 쿼리들을 XML 파일에 작성함으로 코드와 SQL을 분리하고자 하였다.

특징

  • JDBC로 처리하는 코드의 설정(Connection) 부분을 줄이고 실제 SQL문에 연결하음로서 빠른 개발을 가능하게 한다.
  • MyBatis 코드는 map 인터페이스(또는 클래스)와 SQL 쿼리와 ResultSet 매핑을 위한 xml 및 annotaion을 사용한다.
  • 다른 방식에 비해 객체 자제보다 쿼리에 집중할 수 있다.

한계점

  • SQL을 직접 작성해야 함(DB 기능에 종속적)
  • 테이블마다 비슷한 CRUD 반복, DB 타입 및 테이블에 종속적

동작

SqlSession; MyBatis에서 데이터베이스에 접근하는 실제 인터페이스

  • SQL을 실행하고, 데이터베이스에서 데이터를 가져오거나 수정할 수 있음.
  • SqlSession을 사용하려면 먼저 SqlSessionFactory를 통해 생성해야 함.
  • 트랜잭션을 관리할 수 있으며, 사용 후 반드시 닫아야 함(session.close()).

SqlSessionFactory; SqlSession을 생성하는 역할을 하는 팩토리 객체

  • 애플리케이션이 실행될 때 한 번만 생성되며, 이를 통해 여러 개의 SqlSession을 만들 수 있음.
  • MyBatis의 설정 파일(mybatis-config.xml)을 읽어, 데이터베이스 연결 정보를 포함한 SqlSession을 생성하는 역할을 함

Processing to run once (응용프로그램 시작시 한 번만 수행)

(1) 응용 프로그램이 SqlSessionFactoryBuilder를 위해 SqlSessionFactory를 빌드하도록 요청
(2) SqlSessionFactoryBuilder는 SqlSessionFactory를 생성하기 위한 Mybatis 구성 파일을 읽음
(3) SqlSessionFactoryBuilder는 Mybatis 구성 파일의 정의에 따라 SqlSessionFactory를 생성

Processing to run per requests (클라이언트 각 요청에 대해 수행)

(4) 클라이언트가 응용 프로그램에 대한 프로세스를 요청
(5) 응용 프로그램은 SqlSessionFactoryBuilder를 사용하여 빌드된 SqlSessionFactory에서 SqlSession을 가져옴
(6) SqlSessionFactory는 SqlSession을 생성하고 이를 애플리케이션에 반환
(7) 응용 프로그램이 SqlSession에서 매퍼 인터페이스의 구현 개체를 가져옴
(8) 응용 프로그램이 매퍼 인터페이스 메서드를 호출
(9) 매퍼 인터페이스의 구현 개체가 SqlSession 메서드를 호출하고 SQL 실행을 요청
(10) SqlSession은 매핑 파일에서 실행할 SQL을 가져와 SQL을 실행

SqlSession Factory Builder (1), (2), (3)

MyBatis 설정 파일을 읽어와서, 설정정보 기반으로 SqlSession Factory 를 생성하는 빌더 객체

MyBatis Config File (2)

매핑해줄 객체가 들어있는 패키지 경로와 Mapping File 목록을 지정해주는 설정 파일

<!-- /resources/mybatis-config.xml -->
<!DOCTYPE configuration
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <typeAliases>
        <package name="com.thesun4sky.querymapper.domain"/>
    </typeAliases>
    <mappers>
        <mapper resource="mapper/UserMapper.xml"/>
    </mappers>
</configuration>

SqlSession Factory (3), (5), (6)

설정에 맞게 SqlSession 을 생성하여 들고있는 객체

SqlSession (6), (7), (9), (10)

Mapping File 에서 쿼리를 조회해서 쿼리를 수행하고 응답을 받아올 수 있는 세션 객체

Mapper Interface (8), (9)

DB 에서 조회하는 객체와 Java 프로그램의 객체간에 인터페이스를 정의하는 객체

방법1) DAO 클래스 정의

  • SqlSession을 직접적으로 사용하는 방법,
  • SqlSession 멤버 변수로 사용하며 쿼리 파일 요청
profile
뭐라도 해보자

0개의 댓글