JPA - 쿼리 파일 만들기

2024. 9. 27. 15:36·Java & Spring/Spring

□ 쿼리 파일 만들기(QuaryMapper)

- MyBatis

RowMapper가 가지고있는 단점인 "반복되는 코드"를 줄이고 "함께있는 프로그램 코드와 쿼리 코드를 분리하여 관리"하고 싶은 니즈를 반영하여 탄생

  • 반복적인 JDBC 프로그래밍을 단순화
  • SQL 쿼리들을 XML파일에 작성하여 코드와 SQL을 분리
  • JDBC로 처리하는 코드의 설정(Connetcion)부분을 줄이고 실제 SQL문에 연결함으로서 빠른 개발이 가능하게 한다(SQL Mapper 특징)
  • MyBatis 코드는 map 인터페이스와 SQL 쿼리와 ResultSet 매핑을 위한 xml 및 annotation을 사용한다.
  • 객체 자체보다 쿼리에 집중할 수 있다.

  1. SqlSesstion Factory Builder (1), (2), (3)
    • MyBatis 설정 파일을 읽어와서 설정정보 기반으로 SqlSesstion Factory를 생성하는 빌더 객체
  2. 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>
  3. SqlSession Factory (3), (5), (6)
    • 설정에 맞게 SqlSession을 생성하여 돌고있는 객체
  4. SqlSesstion (6), (7), (9), (10)
    • Mapping File 에서 쿼리를 조회해서 쿼리를 수행하고 응답으 받아올 수 있는 세션 객체
  5. Mapper Interfate (8), (9)
    • DB에서 조회하는 개체외 Java 프로그램의 객체간에 인터페이스를 정의하는 객체
      • 방법1. Dao클래스 정의(SqlSession를 직접적으로 사용, 멤버변수로 사용하여 쿼리파일 수행 요청)
        // UserDao.java
        import org.apache.ibatis.session.SqlSession;
        import org.springframework.stereotype.Component;
        
        import com.thesun4sky.querymapper.domain.User;
        
        @Component
        public class UserDao {
        
          // SqlSession 멤버 변수로 사용하며 쿼리파일 수행 요청
          private final SqlSession sqlSession;
        
          public UserDao(SqlSession sqlSession) {
            this.sqlSession = sqlSession;
          }
        
          public User selectUserById(long id) {
            return this.sqlSession.selectOne("selectUserById", id);
          }
        
        }
        장점
        - 쿼리문 실행 전에 넣어줄 매개변수와 쿼리 결과값의 변형을 정의할 수 있다.
        - Namespace를 내 마음대로 둘 수 있다.
        - .xml파일의 쿼리문 id와 mapper 메소드명을 일치시킬 필요가 있다.
        단점
        - SqlSession 객체를 주입받아야 하며, 쿼리문 실행 시 항상 호출해야 한다.
        - 쿼리문 호출 시 SqlSession에 .xml파일의 namespace와 쿼리문 id를 매개변수로 넘겨야한다.
      • 방법2 Mapper Interfate정의(SqlSession를 간접적으로 사용, 애노테이션을 사용하여 자동호출)
        // UserMapper.java
        @Mapper
        public interface UserMapper {
        
          User selectUserById(@Param("id") Long id);
        
        }
         장점
        - 메소드의 냅부 구현이 불필요하다
        - SqlSession 객체 주입이 불필요하다.
        - .xml파일의 쿼리문 id와 mapper 메소드 명이 일치한다.
        단점
        - .xml의 Namespace가 실제 Mapper.java 위치를 가르켜야 한다.
        - 메소드 내부 정의가 불가능하다.
  6. Mapping File(10)
    • SqlSession가 실행하는 쿼리가 담긴 파일
    • 정의된 인터페이스에 기반해서 수행할 쿼리를 담아두고 쿼리 수행 결과를 어떤 인터페이스 매핑할지 정의해놓은 파일
      <!-- UserMapper.xml -->
      <!DOCTYPE mapper
              PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
              "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
      <mapper namespace="com.thesun4sky.querymapper.mapper.UserMapper">
          <select id="selectUserById" resultType="User">
              select id, name from users where id = #{id}
          </select>
      </mapper>


 

 

 

'Java & Spring > Spring' 카테고리의 다른 글

JPA - Querydsl 사용법 및 실습  (0) 2024.10.04
JPA - JPQL사용해보기  (2) 2024.10.02
JPA - 데이터베이스와 SQL  (4) 2024.09.26
테스트코드 작성에 사용되는 메서드 및 애노테이션(1)  (0) 2024.09.23
47일차 - Controller 테스트  (0) 2024.09.11
'Java & Spring/Spring' 카테고리의 다른 글
  • JPA - Querydsl 사용법 및 실습
  • JPA - JPQL사용해보기
  • JPA - 데이터베이스와 SQL
  • 테스트코드 작성에 사용되는 메서드 및 애노테이션(1)
DJ.Kang
DJ.Kang
백엔드 개발 기록 블로그
  • DJ.Kang
    DJ Hello World
    DJ.Kang
  • 전체
    오늘
    어제
    • 분류 전체보기
      • 이론공부
        • 자격증
        • 개념
      • 시스템설계
      • Java & Spring
        • TIL
        • 트러블슈팅
        • 고도화
        • 알고리즘
        • 코딩테스트
        • Java
        • Spring
        • Thymeleaf
      • 프로젝트
        • coin-trading
        • 트러블슈팅
      • Docker
      • DB
      • AWS
      • CI-CD
      • 웹
      • git & github
      • 구인공고분석
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    Java this
    java two-pointer
    java 제어자
    java 에라토스테네스의 체
    java 세수의합
    java 메서드
    개발로드맵
    java arrays.copyofrnage()
    java enhance switch
    java
    java기초
    데이터 타입
    데이터 크기
    Java 생성자
    java super
    java 멤버
    프로그래머스 java 기초트레이닝
    프로그래머스 java 기초 트레이닝
    java 유클리드 호제법
    자료구조
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
DJ.Kang
JPA - 쿼리 파일 만들기
상단으로

티스토리툴바