본문 바로가기
반응형

분류 전체보기49

QueryDSL(1)- QueryDSL과 설정 방법 QueryDSL QueryDSL은 JPA 표준에서 지원하는 Criteria 기술처럼 JPQL 빌더 역할을 해주는 오픈소스 프로젝트이다. 기존의 JPQL처럼 문자로 작성하는 것이 아닌 자바 코드로 JPQL을 작성할 수 있도록 해주어 문법 오류를 컴파일 단계에서 잡을 수 있고 IDE의 자동완성 기능의 도움을 받을 수 있는 등 여러가지 장점이 있다. 또한 Criteria에 비해 복잡성이 낮다. 쿼리를 문자가 아닌 코드로 작성해도 쉽고 간결하며 그 모양도 쿼리와 비슷하게 개발할 수 있게 해준다. QueryDSL 설정 필자는 프로젝트 설정 시 메이븐을 주로 사용하기에 메이븐을 위주로 설정 방법을 다루겠다. 먼저 pom.xml에 다음과 같이 의존성을 추가한다. com.querydsl querydsl-apt ${qu.. 2021. 1. 25.
Spring Data JPA(2) - JpaRepository 쿼리 메소드 기능 해당 포스팅은 [ 자바 ORM 표준 JPA 프로그래밍 - 김영한 저 ]를 학습한 내용을 바탕으로 정리한 글입니다. 쿼리 메소드 기능 쿼리 메소드 기능은 스프링 데이터 JPA가 제공하는 특별한 기능이다. 크게 3가지 기능이 있다. 메소드 이름으로 쿼리 생성 메소드 이름으로 JPA NamedQuery 호출 @Query 어노테이션을 사용하여 레포지토리 인터페이스에 쿼리 직접 정의 이 기능들을 활용하면 인터페이스만으로 필요한 대부분의 쿼리 기능을 개발할 수 있다. 1. 메소드 이름으로 쿼리 생성 예시를 들어보자. 이름과 나이로 회원을 조회하려면 다음과 같이 메소드 이름을 정의하면 된다. List findByUsernameAndAge(String username, int age); 인터페이스에 정의한 findBy.. 2021. 1. 20.
Spring Data JPA(1) - Spring Data JPA와 JpaRepository 인터페이스의 공통 기능 해당 포스팅은 [ 자바 ORM 표준 JPA 프로그래밍 - 김영한 저 ]를 학습한 내용을 바탕으로 정리한 글입니다. 순수 JPA 기반 리포지토리로 개발 시 문제 @Repository public class MemberJpaRepository { @PersistenceContext private EntityManager em; public Member save(Member member) { ... } public Member find(Long id) { ... } public void delete(Member member) { ... } public List findAll() { ... } public long count() { ... } public List findByUsername(String user.. 2021. 1. 20.
JPA - OSIV(Open Session In View) 정리 OSIV(Open Session In View) OSIV(Open Session In View)는 영속성 컨텍스트를 뷰까지 열어두는 기능이다. 영속성 컨텍스트가 유지되면 엔티티도 영속 상태로 유지된다. 뷰까지 영속성 컨텍스트가 살아있다면 뷰에서도 지연 로딩을 사용할 수가 있다. ! JPA에서는 OEIV(Open EntityManager In View), 하이버네이트에선 OSIV(Open Session In View)라고 한다. 하지만 관례상 둘 다 OSIV로 부른다. OSIV 동작 원리 OSIV의 동작 방식에 대해서 Spring Framework가 제공하는 OSIV을 통해 알아보겠다. 스프링이 제공하는 OSIV 클래스는 서블릿 필터에서 적용할지 스프링 인터셉터에서 적용할지에 따라 원하는 클래스를 선택해서.. 2021. 1. 18.
MockMvc를 이용한 REST API의 Json Response 검증 MockMvc를 이용하여 API의 Json Response를 JsonPath 표현식을 사용해 검증하는 예제를 정리하였습니다. 테스트 예제를 보기 앞서 테스트에 필요한 기본적인 지식들을 간단히 서술 해보겠습니다. 의존성 추가 Spring Boot에 spring-boot-starter-test 의존성을 추가하여 테스트를 작성할 수 있습니다. @WebMvcTest와 @MockBean을 이용한 테스트 @SpringBootTest 어노테이션을 사용하면 스프링이 관리하는 모든 빈을 등록시켜서 통합 테스트를 진행하기 때문에 무겁습니다. 하지만 @WebMvcTest는 web 레이어 관련 빈들만 등록하므로 비교적 가볍습니다. web레이어 관련 빈들만 등록되므로 Service는 등록되지 않습니다. 따라서 가짜로 만들어줄 .. 2021. 1. 14.
자바 ORM 표준 JPA 프로그래밍(14) - 경로 표현식, 페치 조인, 다형성 쿼리, Named 쿼리, 벌크 연산 경로 표현식(Path Expression) 경로 표현식은 쉽게 표현하면 .(점)을 찍어 객체 그래프르 탐색하는 것이다. select m.username -> 상태 필드 from Member m join m.team t -> 단일 값 연관 필드 join m.orders o -> 컬렉션 값 연관 필드 where t.name = '팀A' 위에서 m.username, m.team, m.orders, t.name이 모두 경로 표현식을 사용한 예이다. 상태 필드(state field): 단순히 값을 저장하기 위한 필드(필드 or 프로퍼티) 연관 필드(association field): 연관 관계를 위한 필드, 임베디드 타입 포함(필드 or 프로퍼티) 단일 값 연관 필드: @ManyToOne, @OneToOne, 대.. 2021. 1. 10.
자바 ORM 표준 JPA 프로그래밍(13) - 조인, 서브 쿼리, 조건식, 컬렉션 식, 스칼라 식, CASE 식 조인 JPQL이 지원하는 조인은 SQL 조인과 기능은 같고 문법만 약간 다르다. 내부 조인(INNER JOIN) SELECT m FROM Member m [INNER] JOIN m.team t INNER JOIN을 사용한다. INNER는 생략 가능 생성된 내부 조인은 아래와 같다. SELECT M.ID AS ID, M.AGE AS AGE, M.TEAM_ID AS TEAM_ID, M.NAME AS NAME FROM MEMBER M INNER JOIN TEAM T ON M.TEAM_ID=T.ID JPQL 조인의 가장 큰 특징은 연관 필드를 사용한다는 점 JPQL 조인을 SQL 조인처럼 사용하면 문법 오류가 발생한다. FROM Member m JOIN Team t →잘못된 JPQL 조인, 오류! 외부 조인(O.. 2021. 1. 7.
자바 ORM 표준 JPA 프로그래밍(12) - JPQL 기본 문법과 파라미터 바인딩, 프로젝션, 페이징 JPQL(Java Persistence Query : Language) JPQL은 객체지향 쿼리 언어이다. 테이블 대상으로 쿼리하는 것이 아닌 엔티티 객체를 대상으로 쿼리한다. JPQL은 SQL을 추상화하여 특정 데이터베이스 SQL에 종속적이지 않다. JPQL은 결국 SQL로 변환되어 실행한다. JPQL 문법 select 문 :: = select_절 from_절 [where_절] [groupby_절] [having_절] [orderby_절] update_문 :: = update_절 [where_절] delete_문 :: = delete_절 [where_절] SELECT문은 다음과 같이 사용한다. SELECT m FROM Member AS m where m.username = 'Hello' 대소문자 구분 .. 2021. 1. 6.
자바 ORM 표준 JPA 프로그래밍(11) - 값 타입 JPA의 데이터 타입 분류 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 지속해서 추적 가능 예) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 값 타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있으므로 변경시 추적 불가 예) 숫자 100을 200으로 변경하면 완전히 다른 값으로 대체 값 타입 분류 기본값 타입 자바 기본 타입(int, double) 래퍼 클래스(Integer, Long) String 임베디드 타입(embedded type, 복합 값 타입) 컬렉션 값 타입(collection value type) 임베디드 타입 새로운 값 타입을 직접 정의할 수 있음 JPA는 임베디드 타입(embedded.. 2021. 1. 5.
반응형