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
  • 전체
    오늘
    어제
    • 분류 전체보기 N
      • 이론공부 N
        • 자격증 N
        • 개념
      • 시스템설계
      • Java & Spring
        • TIL
        • 트러블슈팅
        • 고도화
        • 알고리즘
        • 코딩테스트
        • Java
        • Spring
        • Thymeleaf
      • 프로젝트
        • coin-trading
        • 트러블슈팅
      • Docker
      • DB
      • AWS
      • CI-CD
      • 웹
      • git & github
      • 구인공고분석
  • 블로그 메뉴

    • 홈
  • 링크

  • 공지사항

  • 인기 글

  • 태그

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

  • 최근 글

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

티스토리툴바