반응형

프레임워크(Framework)/JPA 33

[JPA] 엔티티(Entity) 기본 생성자 사용 이유 - Reflection API

Intro JPA에서 엔티티는 반드시 public 또는 protected인 기본 생성자를 가져야 한다. 이 것이 가능한 이유는 자바에서 제공하는 리플렉션 API(reflection API)를 활용하여 동적으로 객체를 생성하기 때문이다. 만약, 기본 생성자가 없거나, private인 경우 리플랙션 API는 객체를 생성할 수 없게 된다. Java Reflection API Java Reflection API는 구체적인 클래스 타입을 알지 못하더라도 해당 클래스 이름을 통해 메서드, 타입, 변수 등에 접근할 수 있도록 해주는 API이다. Reflection을 활용하여 런타임 시점에 동적으로 클래스 객체를 생성할 수 있다. 일반적으로 객체에 데이터를 넣기 위해서는 new 생성자 또는 setter 등이 필요하며,..

[JPA] QueryDSL과 JPQL 비교

본 내용은 온라인 강의 사이트 인프런의 김영한 님의 강의 내용이 포함되어 있습니다. '실전! Querydsl' 실전! Querydsl - 인프런 | 강의 Querydsl의 기초부터 실무 활용까지, 한번에 해결해보세요!, - 강의 소개 | 인프런... www.inflearn.com 엔티티 준비 기초적인 실습을 위한 Member 엔티티와 Team 엔티티를 준비한다. Member와 Team은 양방향 연관관계 연관관계의 주인은 Member로 Team의 외래키를 가지고 있다. Member @Entity @Getter @Setter @NoArgsConstructor(access = AccessLevel.PROTECTED) @ToString(of = {"id", "username", "age"}) public cla..

[JPA] QueryDSL build.gradle 환경 설정

스프링 부트 프로젝트 생성 Spring initialzr에서 프로젝트를 생성한다. Spring Web, JPA, H2 Database 등 필요한 의존 라이브러리 설정이 필요하다. Spring Boot 2.6 ~ 2.7과 3.0은 build.gradle 설정 방법이 다르다. QueryDSL 설정 스프링 부트 2.6 ~ 2.7에서 build.gradle 설정 // (1) queryDSL 추가 buildscript { ext { queryDslVersion = "5.0.0" } } plugins { id 'java' id 'org.springframework.boot' version '2.7.7' id 'io.spring.dependency-management' version '1.0.15.RELEASE' /..

[JPA] QueryDSL 소개 및 장점

QueryDSL이란? QueryDSL은 하이버네이트 쿼리 언어(HQL: Hibernate Query Language)의 쿼리를 타입에 안전하게 생성 및 관리해주는 프레임워크이다. QueryDSL은 정적 타입을 이용하여 SQL과 같은 쿼리를 생성할 수 있게 해 준다. 자바 백엔드 기술은 Spring Boot와 Spring Data JPA를 함께 사용한다. 하지만, 복잡한 쿼리, 동적 쿼리를 구현하는 데 있어 한계가 있다. 이러한 문제점을 해결할 수 있는 것이 QueryDSL이다. QueryDSL이 등장하기 이전에는 Mybatis, JPQL, Criteria 등 문자열 형태로 쿼리문을 작성하여 컴파일 시에 오류를 발견하는 것이 불가능했다. 하지만, QueryDSL은 자바 코드로 SQL 문을 작성할 수 있어 ..

[JPA] JPQL 벌크 연산 - 객체지향 쿼리 언어 JPQL (12)

본 내용은 온라인 강의 사이트 인프런의 김영한 님의 강의 내용이 포함되어 있습니다. '자바 ORM 표준 JPA 프로그래밍 - 기본편' 자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의 JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., - 강의 소개 | 인프런 www.inflearn.com 벌크 연산 엔티티를 수정하려면 영속성 컨텍스트의 변경 감지 기능이나 병합을 사용하고, 삭제하려면 엔티티 매니저의 remove() 메서드를 사용한다. 하지만, 이러한 방법으로 수많은 엔티티를 하나씩 처리하기에는 시간이 오래 걸릴 것이다. 예를 들어, 재고가 10개 미만인 모든 ..

[JPA] JPQL Named 쿼리(정적 쿼리) - 객체지향 쿼리 언어 JPQL (11)

본 내용은 온라인 강의 사이트 인프런의 김영한 님의 강의 내용이 포함되어 있습니다. '자바 ORM 표준 JPA 프로그래밍 - 기본편' 자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의 JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., - 강의 소개 | 인프런 www.inflearn.com Intro JPQL 쿼리는 크게 동적 쿼리와 정적 쿼리로 나눌 수 있다. 동적 쿼리 동적 쿼리는 em.createQuery(”select ..”)와 같이 JPQL을 문자로 완성해서 직접 넘기는 것을 동적 쿼리라 한다. 런타임에 특정 조건에 따라 JPQL을 동적으로 구성할 수 ..

[JPA] JPQL 엔티티 직접 사용 - 객체지향 쿼리 언어 JPQL (10)

본 내용은 온라인 강의 사이트 인프런의 김영한 님의 강의 내용이 포함되어 있습니다. '자바 ORM 표준 JPA 프로그래밍 - 기본편' 자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의 JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., - 강의 소개 | 인프런 www.inflearn.com 엔티티 직접 사용 - 기본 키 값 객체 인스턴스는 참조 값으로 식별하고 테이블의 행(row)은 기본 키 값으로 식별한다. JPQL에서 엔티티를 직접 사용하면 SQL에서 해당 엔티티의 기본 키 값을 사용한다. 예제 // JPQL select count(m.id) from Mem..

[JPA] JPQL - 다형성 쿼리 - 객체지향 쿼리 언어 JPQL (9)

본 내용은 온라인 강의 사이트 인프런의 김영한 님의 강의 내용이 포함되어 있습니다. '자바 ORM 표준 JPA 프로그래밍 - 기본편' 자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의 JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., - 강의 소개 | 인프런 www.inflearn.com 다형성 쿼리 JPQL로 부모 엔티티를 조회하면 자식 엔티티도 함께 조회한다. 다음과 같이 Item의 자식으로 Book, Album, Movie가 있다고 가정한다. (다형성 쿼리 엔티티) 다형성 쿼리 엔티티 Item, Album, Movie, Book @Entity @Inher..

[JPA] JPQL 페치 조인(Fetch join) - 객체지향 쿼리 언어 JPQL (8)

본 내용은 온라인 강의 사이트 인프런의 김영한 님의 강의 내용이 포함되어 있습니다. '자바 ORM 표준 JPA 프로그래밍 - 기본편' 자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의 JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., - 강의 소개 | 인프런 www.inflearn.com 페치 조인(Fetch Join) 페치 조인은 JPQL에서 성능 최적화를 위해 제공하는 기능이다. SQL 조인의 종류가 아니다. 연관된 엔티티나 컬렉션을 한 번에 같이 조회하는 기능으로 join fetch 명령어로 사용할 수 있다. 페치 조인 ::= [ LEFT [OUTER] ..

[JPA] JPQL 경로 표현식 - 객체지향 쿼리 언어 JPQL (7)

본 내용은 온라인 강의 사이트 인프런의 김영한 님의 강의 내용이 포함되어 있습니다. '자바 ORM 표준 JPA 프로그래밍 - 기본편' 자바 ORM 표준 JPA 프로그래밍 - 기본편 - 인프런 | 강의 JPA를 처음 접하거나, 실무에서 JPA를 사용하지만 기본 이론이 부족하신 분들이 JPA의 기본 이론을 탄탄하게 학습해서 초보자도 실무에서 자신있게 JPA를 사용할 수 있습니다., - 강의 소개 | 인프런 www.inflearn.com 경로 표현식 jpql의 쿼리문 작성 시 점(.)을 이용하여 객체의 값에 접근할 수 있다. 이처럼 점(.)을 이용해 객체 그래프를 탐색하는 것을 경로 표현식이라 한다. select m.username // 상태 필드 from Member m join m.team t // 단일 ..

반응형